ハイブのクエリはソートを使用せず、バケット全体を読み取ります。それは正常ですか、それとも誤解ですか。
テーブル :
col_a; col_b; values;
仕様:
- 私のテーブルはバケット化され、「col_a」列でソートされています。
- テーブルは ORC 形式です
結果:
- 「col_a」を照会すると、バケット全体が読み取られます。
- 「col_b」にインデックスを付けて「col_b」をクエリすると、バケット全体以上が読み取られます。
テーブル構成:
- 入力フォーマット: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
- outputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
- serializationLib: org.apache.hadoop.hive.ql.io.orc.OrcSerde
- バケット列: [col_a]
- sortCols: 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;
私が思ったこと
並べ替えを使用すると、バケット全体を読み取るのではなく、特定の行または行の範囲にアクセスできるようになると思いました。また、インデックスによってバケット内の行または範囲が得られると考えました。私が間違っている ?ところで、お時間をいただきありがとうございます。