启动metastore

hive 外部表 loaddata hive 外部表jdbc_字段


启动hiveserver2

hive 外部表 loaddata hive 外部表jdbc_字段_02

启动beeline

hive 外部表 loaddata hive 外部表jdbc_hive_03

“-e”不进入 hive 的交互窗口执行 sql 语句
“-f”执行脚本中 sql 语句

DDL

COMMENT:为表和列添加注释。
PARTITIONED BY :创建分区表
CLUSTERED BY :创建分桶表
SORTED BY :不常用,对桶中的一个或多个列另外排序
LOCATION :指定表在 HDFS 上的存储位置。

在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

修改内部表为外部表
alter table student2 set tblproperties(‘EXTERNAL’=‘TRUE’);
区分大小写!

重命名
ALTER TABLE table_name RENAME TO new_table_name

ADD 是代表新增一字段,字段位置在所有列后面(partition 列前)

REPLACE 则是表示替换表中所有字段。

hive 外部表 loaddata hive 外部表jdbc_hive_04

DML

加载数据

  • 本地文件stu.txt
    opt/module/hive/stu.txt
  • 创建一张表
    create table student1(id int,name string)
    row format delimited fields terminated by ‘\t’;
  • 加载本地文件到hive
    load data local inpath
    ‘/opt/module/hive/stu.txt’ into table default.student1;
  • 查询
    select * from student1;
  • hive 外部表 loaddata hive 外部表jdbc_hive 外部表 loaddata_05

  • 比较运算符
  • hive 外部表 loaddata hive 外部表jdbc_hive_06

  • having 与 where 不同点
    (1)where 后面不能写分组函数,而 having 后面可以使用分组函数。
    (2)having 只用于 group by 分组统计语句。

where后不能加字段别名,可以加表别名

hive 外部表 loaddata hive 外部表jdbc_数据_07

外连接
涉及到2个表,分为:主表和从表,要查询的信息主要来⾃于哪个表,谁就是主表。
外连接查询结果为主表中所有记录。如果从表中有和它匹配的,则显⽰匹配的值,这部分相当于内连接查询出来的结果;如果从表中没有和它匹配的,则显示null。
最终:外连接查询结果 = 内连接的结果 + 主表中有的⽽内连接结果中没有的记录。
外连接分为2种:
左外链接:使⽤left join关键字,left join左边的是主表。
右外连接:使⽤right join关键字,right join右边的是主表。

满外连接:全外连接=左外连接+右外连接

Truncate :只能删除管理表,不能删除外部表中数据

多表连接

hive 外部表 loaddata hive 外部表jdbc_数据_08

笛卡尔积
(1)省略连接条件
(2)连接条件无效
(3)所有表中的所有行互相连接

关于四个排序

全局排序(order by)

多个列排序
按照部门和工资升序排序
hive (default)> select ename, deptno, sal from emp order by deptno, sal;
先按照部门号排,再根据薪水排序

每个 Reduce 内部排序(Sort By)
为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序。

分区排序

函数

UDF :一对一
UDAF:多对一 聚集函数 类似:count/max/min
UDTF:一对多 如:lateral view explode()

行转列: 多列转一行

  • concat
    返回输入字符串连接后的结果,支持任意个输入字符串
  • concat_ws
    第一个参数是分隔符
  • CONCAT_WS must be "string or array

case when then else end

列转行: 一行转多行

  • explode
  • LATERAL VIEW
    LATERAL VIEW udtf(expression) tableAlias AS columnAlias
    用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

over()窗口函数
分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)
即一行对应一个窗口,窗口的范围取决于over()函数里对窗口范围的约束:
:通过order by 来对order by字段排序后的行进行开窗,第一行数据的窗口大小是1,第二行数据的窗口范围是前2行,第n行的窗口范围是前n行

  • 此时每一行的窗口都是所有的行
    select *,count(1) over() from test;
  • over(partition by name)每一行根据 name来区分窗口
  • over(order by date) orderdate=1的窗口只有一行,orderdate=2的窗口包括前两行
  • over(partition by name order by id) 每一行根据 name来区分窗口,再根据order by 取具体的范围。

常与over()一起使用的分析函数:

  • avg()、sum()、max()、min()
  • 按照值排序时产生一个自增编号row_number()不会重复、rank()值相等时会重复产生空位、dense_rank()值相等时会重复不会产生空位。
  • lag
  • lead