hive 中的查询不使用 Sort并读取整个 bucket。这是正常现象还是误会。
桌子 :
col_a; col_b; values;
规格:
- 我的表按“col_a”列进行存储和排序。
- 表具有 ORC 格式
结果:
- 当我查询“col_a”时,会读取整个存储桶。
- 当我索引“col_b”并查询“col_b”时,读取的不仅仅是整个存储桶。
表配置:
- 输入格式:org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
- 输出格式:org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
- 序列化库:org.apache.hadoop.hive.ql.io.orc.OrcSerde
- bucketCols:[col_a]
- 排序列:col_a
- 订购:1
插入以填充表格并选择以获取值:
hive.enforce.sorting=true; hive.enforce.bucketing=true; FROM table_temp INSERT OVERWRITE TABLE table_sorted PARTITION (date=1) SELECT col_a, col_b DISTRIBUTE BY col_a SORT BY col_a; SELECT * from table_sorted where date=1 AND col_a=986123;
我的想法
我认为排序可以让我们不读取整个存储桶,但允许我们访问特定行或一系列行。我还认为索引可以给我们一行或一个桶中的范围。我错了吗 ?顺便感谢您的宝贵时间!