一.基本概念
Hive分桶:
1.概念
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
对于hive中每一个表、分区都可以进一步进行分桶。(可以对列,也可以对表进行分桶)由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。2.设置
set hive.enforce.bucketing=true;
默认:false;设置为true之后,mr运行时会根据bucket的个数自动分配reduce task个数。(用户也可以通过mapred.reduce.tasks自己设置reduce任务个数,但分桶时不推荐使用)注意:一次作业产生的桶(文件数量)和reduce task个数一致。3.用途
桶表 抽样查询select * from bucket_table tablesample(bucket 1 out of 4 on columns);TABLESAMPLE语法:TABLESAMPLE(BUCKET x OUT OF y)x:表示从哪个bucket开始抽取数据y:必须为该表总bucket数的倍数或因子
4.创建分桶表CREATE TABLE psnbucket( id INT, name STRING, age INT)CLUSTERED BY (age) INTO 4 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
Hive Lateral View概念
作用:
Lateral View用于和UDTF函数(explode、split)结合来使用。首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题语法:
LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)
举例 :
select count(distinct(myCol1)), count(distinct(myCol2)) from psn2 LATERAL VIEW explode(likes) myTable1 AS myCol1 LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;
Hive 运行方式
1.CLI方式:1.1 与hdfs交互
执行执行dfs命令 例:dfs –ls /1.2 与Linux交互 !开头 例: !pwd2.Hive脚本运行方式:
hive -e ""hive -e "">aaahive -S -e "">aaa(简化一些输出比如时间等等)。hive -f filehive -i /home/my/hive-init.sqlhive> source file (在hive cli中运行)