6

ORCファイルは初めてです。多くのブログを調べましたが、明確な理解が得られませんでした。以下の質問を助けて明確にしてください。

  1. ORC ファイルからスキーマを取得できますか? Avro では、スキーマをフェッチできることを知っています。

  2. 実際にスキーマの進化をどのように提供しますか? 追加できる列がほとんどないことはわかっています。しかし、それを行う方法。私が知っている唯一の orc ファイルの作成は、データを orc 形式で保存するハイブテーブルにデータをロードすることです。

  3. ORC ファイルのインデックスはどのように機能しますか? 私が知っていることは、すべてのストライプ インデックスが維持されるということです。ただし、ファイルはソートされていないため、ストライプのリストでデータを検索するのに役立ちます。データの検索中にストライプをスキップするのにどのように役立ちますか?

  4. 列ごとにインデックスが維持されます。はいの場合、より多くのメモリを消費することはありませんか?

  5. 列形式の ORC ファイルが、各列の値が一緒に格納されるハイブ テーブルにどのように収まるか。一方、ハイブテーブルはレコードごとにフェッチするように作られています。両方がどのように適合しますか?

4

2 に答える 2

4

1.および2. Hive および/または HCatalog を使用して、Hive メタストア内の ORC テーブル構造を作成、読み取り、更新します(HCatalog は、Pig/Sqoop/Spark などをメタストアに直接アクセスできるようにするための単なるサイドドアです)。

2. ALTER TABLEコマンドを使用すると、ORC を含むストレージ タイプに関係なく、列を追加/削除できます。ただし、その後、ベクトル化された読み取りがクラッシュする可能性がある厄介なバグに注意してください(少なくとも V0.13 と V0.14 では)。

3.および4.「インデックス」という用語はかなり不適切です。基本的には、書き込み時にストライプフッターに保持される最小/最大情報であり、読み取り時に、明らかにWHERE要件を満たしていないすべてのストライプをスキップするために使用され、場合によっては I/O を大幅に削減します (列で一般的になったトリック)たとえば、MySQL の InfoBright だけでなく、Oracle Exadata アプライアンスにも保存されます [Oracle マーケティングでは「スマートスキャン」と呼ばれています])。

5. Hive は、「行ストア」形式 (Text、SequenceFile、AVRO) と「列ストア」形式 (ORC、Parquet) で同様に機能します。オプティマイザは、最初のマップ フェーズで特定の戦略とショートカットを使用するだけです。たとえば、ストライプの削除、ベクトル化された演算子などです。もちろん、シリアライゼーション/デシリアライゼーション フェーズは、列ストアを使用するともう少し複雑になります。

于 2015-08-10T20:59:12.537 に答える
0

すべての質問にお答えすることはできませんが、試してみます

  1. filedump ユーティリティを使用して、ORC ファイルのメタデータを読み取ることができます。こちらを参照してください。

  2. スキーマの進化についてはよくわかりませんが、私が知る限り、ORC は進化をサポートしていません。

  3. ORC インデックスには最小値と最大値の合計が格納されるため、データが完全に構造化されていない場合でも、おそらくまだ多くのデータを読み取る必要があります。しかし、ORC の最新リリース以降、行グループの除去においてより正確な追加の Bloom-Filter を有効にすることができます。これも参考になるかもしれませんorc-user mailing list

  4. ORC はすべての列にインデックスを提供しますが、これは単なる軽量インデックスです。ファイルフッター、ストライプフッター、およびデフォルトでは10000行ごとに、数値列の最小/最大および合計に関する情報を保存します。そんなに場所を取らないので

  5. テーブルを Orc Fileformat に保存すると、Hive は特定の ORC Recordreader を使用して列から行を抽出します。カラム型ストレージの利点は、行全体を読み取る必要がないことです

于 2015-07-30T22:10:13.720 に答える