1

hive 中的查询不使用 Sort读取整个 bucket。这是正常现象还是误会。

桌子 :

col_a; col_b; values;
  1. 规格:

    • 我的表按“col_a”列进行存储和排序。
    • 表具有 ORC 格式
  2. 结果:

    • 当我查询“col_a”时,会读取整个存储桶
    • 当我索引“col_b”并查询“col_b”时,读取的不仅仅是整个存储桶
  3. 表配置:

    • 输入格式: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
  4. 插入以填充表格并选择以获取值:

    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;
    
  5. 我的想法

    我认为排序可以让我们不读取整个存储桶,但允许我们访问特定行或一系列行。我还认为索引可以给我们一行或一个桶中的范围。我错了吗 ?顺便感谢您的宝贵时间!

4

0 回答 0