主页 > 软件开发  > 

hive:分桶表和分区表的区别,分桶表,抽样查询

hive:分桶表和分区表的区别,分桶表,抽样查询
分桶表和分区表的区别

分桶表

建表语法

clustered by 聚类依据

示例

创建分桶表

加载数据到分桶表(错误)

load data local inpath '/home/sjh/ft.txt' into table sjh.ft;

报错: 提示设置 >>set hive.strict.checks.bucketing=false   作用是关闭 Hive 中的一个严格检查机制

默认情况下,Hive 会对分桶表的加载操作进行严格的检查,以确保数据正确地分布到各个桶中。这种严格的检查可以防止数据加载过程中的错误,但也可能导致一些不必要的限制,特别是在用户确定自己的操作是正确的情况下。 通过执行 set hive.strict.checks.bucketing=false 命令,用户可以关闭这种严格的检查。这意味着 Hive 将不再强制执行分桶相关的安全检查,用户可以直接将数据加载到分桶表中,而不需要通过中间表和 insert ... select 语句来进行。 注意: set 修改只作用于本次会话

如果想永久修改>>找到hive的安装目录,修改配置文件

查看加载情况

load的本质是把文件复制再上传>>没有经过map reduce>>数据没有进行拆分>>解决: 使用insert into , 写20个insert 非常不方便>> 创建一个表, 把数据放到表里, 再用insert into 

删除

示例

把数据加载到源表

-- 通过insert方法,执行mr

insert into sjh.ft select * from sjh.ftt;

执行日志: 先走map>>再到reduce

ftt 通过load加载数据,只有一个文件

ft通过 insert into 插入数据, 有4个文件, 和分桶个数对应

查看桶里面的数据>>分桶依据:  id/桶数  >>余数为0进0号桶; 余数为1进1号桶;余数为2进2号桶...

注意: 抽样查询时>>000000_0是1号桶, 000001_0是2号桶, 以此类推

分桶的好处

假设没有分桶, A表和B表连接>>A的每个id分别和B表的每个id 连接一次

交互次数= A表的id个数 * B表的id个数 = 10*10=100

如果把A表B表做成分桶表,按照id分成2个桶, 那么A表和B表分别产生了0号桶和1号桶, 现在A表和B表连接只需要交互50次,即0号桶和0号桶交互(25), 1号桶和1号桶交互

分桶的作用>>提高表连接效率

查看分桶文件

分区分桶表

sale_date 是分区列,数据将按照 sale_date 的值进行分区存储。

product_id 是分桶列,数据在每个分区内按照 product_id 进行分桶,分为4个桶。

 

抽样查询

从大数据集中随机抽取部分数据进行分析的技术。抽样查询可以帮助用户在不需要处理整个数据集的情况下,快速获取数据的代表性样本,从而进行初步分析、测试或验证。

1.基于分桶表的抽样查询

分桶表是将数据按照某个字段的哈希值分成若干个桶(Bucket),抽样时可以直接从指定的桶中抽取数据。

语法:

tablesample样表 ; bucket 桶 示例 从2号桶开始抽, 抽取桶的总数=桶的总数/y=4/4=1,即只抽1个桶

示例

 

从1号桶开始抽, 抽取4/2=2个桶的数量

第二个桶是 X+Y=1+2=3 ,3号桶

示例

从第8个桶开始抽, 即余数为3的那个桶>>4号桶

抽取的桶的数量=4/16=1/4, 一个桶的数据总量是5, 5*1/4约为1

2.基于数据块的抽样

直接从数据文件中随机抽取一定比例的数据块

 

3.基于行的抽样

随机抽取表中的一定数量的行

4.基于随机函数的抽样

5.基于分区的抽样

如果表是分区表,可以从指定的分区中抽取数据

示例

标签:

hive:分桶表和分区表的区别,分桶表,抽样查询由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“hive:分桶表和分区表的区别,分桶表,抽样查询