select * from table tablesample(bucket x out of y on column)
hive根据y的大小,决定抽样的比例。y必须是table总bucket数的倍数或者因子。
例如,table总共分了10份bucket,当y=2时,抽取(10/2=)5个bucket的数据,当y=10时,抽取(10/10=)1个bucket的数据。
x表示从哪个bucket开始抽取,如果需要取多个分区,以后的分区号为当前分区号加上y。
例如,table总bucket数为6,tablesample (bucket 1 out of 2),表示总共抽取(6/2=)3个bucket的数据,从第1个bucket开始,抽取第1(x)个和第3(x+y)个和第5(x+y)个bucket的数据。
注意:x的值必须小于等于y的值。否则会抛出异常:FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck。
注意: sqoop不支持分桶表,如果需要从sqoop导入数据到分桶表,可以通过中间临时表进行过度。ODS也可以不做分桶,从DWD明细层开始分桶。
Original: https://blog.csdn.net/weixin_46051319/article/details/124026197
Author: 小马虎不马虎
Title: hive分桶(hive为什么要分桶、分桶和分区的区别、分桶表的具体操作、如何将mysql中不是分桶的数据导入到分桶表中)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/818384/
转载文章受原作者版权保护。转载请注明原作者出处!