3

私はビッグデータと関連技術に慣れていないので、既存の ORC ファイルにデータを追加できるかどうかわかりません。Java APIを使用して ORC ファイルを作成していますが、ライターを閉じると、ファイルを再度開いて新しいコンテンツを書き込むことができず、基本的に新しいデータを追加できません。

Java Api、Hive、またはその他の手段を使用して、既存の ORC ファイルにデータを追加する方法はありますか?

Javautil.DateオブジェクトをORCファイルに保存すると、ORCタイプは次のように保存されます。

struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>,

Java BigDecimal の場合は次のとおりです。

<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int>

これらは正しいですか、これに関する情報はありますか?

4

3 に答える 3

2

いいえ、ORC ファイルに直接追加することはできません。Parquet ファイルにも。また、メタデータがデータにインターリーブされた複雑な内部構造を持つ列形式にも対応していません。

公式の「Apache Parquet」サイトを引用すると...

シングル パス書き込みを可能にするために、データの後にメタデータが書き込まれます。

次に、公式の「Apache ORC」サイトを引用します...

HDFS は、書き込み後のファイル内のデータの変更をサポートしていないため、ORC はファイルの最後に最上位のインデックスを格納します(...) ファイルの末尾は 3 つの部分で構成されます。ファイルのメタデータ、ファイルのフッター、ポストスクリプト。

技術的には、最近では HDFS ファイルに追加できます。切り捨てることもできます。ただし、これらのトリックは一部のエッジ ケースでのみ役立ちます (たとえば、Flume がメッセージを HDFS の「ログ ファイル」にマイクロバッチ単位でフィードする場合などfflush)。

Hive トランザクションをサポートするために、彼らは別のトリックを使用します。HBaseのように、バックグラウンドで実行される定期的な圧縮ジョブを使用して、各トランザクション (つまりマイクロバッチ) で新しい ORC ファイルを作成します。

于 2016-08-05T20:44:01.440 に答える