Hive入门讲解
Hive定位:ETL(数据仓库)工具
将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的工具,如像:kettle
DML
批量插入/批量导入1
2LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
注:filepath可以是hdfs路径或者是S3路径,如hdfs://namenode:9000/user/hive/project/data1
1 | 1.从本地文件导入到表 |
1 | 2.从hdfs导入到表 |
1 | 3.从表查询中导入到表 |
1 | 4.将查询数据导入到多个表 |
1 | 5.建表时导入 |
指定分隔符导出数据
1 | insert overwrite local directory '/home/hadoop/export_hive' |
删除/清空
1 | 1.删除table1中不符合条件的数据 |
1 | 2.清空表 |
1 | 3.截断表(注:不能截断外部表) |
1 | 4.删除hdfs对应的表数据达到清空表(表结构依然存在) |
delete 与 update
在hive中默认不支持事务,因此默认不支持delete与update,如果需要支持必须在hive-site.xml中配置打开
DDL
库/表/索引/视图/分区/分桶
数据库
列出/创建/修改/删除/查看信息
1 | 1.列出所有数据库 |
1 | 2.创建数据库 |
1 | 3.删除 |
1 | 4.查看数据库信息 |
表
列出/创建/修改/删除/查看信息1
2
3
4
5
6
7
8
9
101.列出所有表
当前数据库的所有表
show tables;
指定数据库的所有表
show tables in db_name;
支持正则
show tables '.*s';
1 | 2.创建表 |
1 | 创建基于正则切分行字段的表 |
1 | 3.修改 |
1 | 4.删除 |
1 | 5.查看信息 |
索引
1 | 创建索引 |
视图
1 | CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], ...) ][COMMENT view_comment][TBLPROPERTIES (property_name = property_value, ...)] AS SELECT |
分区(重点)
列出/创建/修改/删除
1 | 1.列出一个表的所有分区 |
1 | 2.创建分区表 |
1 | 3.对现有表添加分区 |
1 | 4.删除分区 |
1 | 5.加载数据到分区表 |
1 | 6.未分区表数据导入分区表 |
1 | 7.动态分区指令 |
分桶
1 | CREATE TABLE bucketed_user (id INT) name STRING) |
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
把表(或者分区)组织成桶(Bucket)有两个理由:
(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。
(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
DQL
1 | hive中的order by、distribute by、sort by和cluster by |
1 | 表连接 |
1 | 分析窗口函数 |
例子:Hive分析窗口函数(一) SUM,AVG,MIN,MAX1
2
3
4
5
6其他
1.不支持EXIST ,NOT EXIST
2.Top N 关键字 为Limit
3.支持正则筛选字段,如SELECT `(ds|hr)?+.+` FROM test
DCL
权限
1 | Grant/revoke语法: |
Hive函数
UDF、UDAF和UDTF
UDF实现输入一行输出一行行的函数
UDAF实现输入多行输出一行的函数
UDTF实现输入一行输出多行的函数
自定义UDF、UDAF和UDTF
相关资料
hive2.0函数大全
http://www.cnblogs.com/MOBIN/p/5618747.html
Mysql数据导入Hive
通过sqoop把mysql数据导入到hive(若hive没对应表则自动建表)1
./bin/sqoop import --connect jdbc:mysql://172.17.4.1:3306/poi --username lizt --table poi_amap --hive-import --password 123456
python 客户端
pyhs21
pip install pyhs2