2017-01-24 3 views
0

n(large)私は大きいorcファイルのk(small)にマージしたい小さいサイズのorcファイルの数を持っています。Hiveのテーブル<table name>をどのように変更すると「仕事」が連結されますか?

これは、ハイブでalter table table_name concatenateコマンドを使用して行われます。

Hiveはこれをどのように実装しているのか理解したいと思います。 必要に応じてSparkを使ってこれを実装したいと思っています。

すべてのポインタが優れています。

答えて

1

AlterTable/PartitionConcatenateあたりとして:

表またはパーティションは多くの小さなrcfileをやORCファイルが含まれている場合、上記のコマンドは、大きなファイルにマージします。 RCFileの場合、ブロックレベルでマージが行われますが、ORCファイルの場合、マージはストライプレベルで行われるため、データの解凍とデコードのオーバーヘッドが回避されます。

また:

ORCファイルの本体は、一連のストライプで構成されています。ストライプは大きい(通常〜200MB)、互いに独立した であり、よく異なるタスクによって処理される です。柱状 の格納形式の定義上の特徴は、各列のデータが個別に に格納され、ファイルから読み取るデータが、読み取られた列の数が に比例することです。 ORCファイルでは、各列は複数のストリームに格納され、ファイル内には互いに隣接して に格納されます。たとえば、整数列は、2つのストリームPRESENTとして表現された であり、値がNULLでない場合には 値の記録単位のビットを使用し、0以外の値の場合は を記録するDATAを使用します。ストライプ内の列の値がすべてNULLでない場合、 PRESENTストリームはストライプから除外されます。バイナリデータの場合、ORC はPRESENT、DATA、LENGTHの3つのストリームを使用し、各値の長さは です。各タイプの詳細は、サブセクションの に記載されています。

スパークに実装するためにあなたがスパークコンテキストの助けを借りてSparkSQLを使用することができます。

scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 

scala> sqlContext.sql("Your_hive_query_here") 
関連する問題