2017-01-24 32 views
0

我有n(large)我想合併成大型獸人文件數量爲k(small)的小型獸人文件數。Hive'alter table <table name> concatenate'工作如何?

這是在Hive中使用alter table table_name concatenate命令完成的。

我想了解Hive如何實現這一點。 我正在尋找使用Spark來實現這一點,如果需要的話有任何改變。

任何指針都會很棒。

回答

1

作爲每AlterTable/PartitionConcatenate

如果表或分區包含許多小RCFiles或ORC文件,那麼上面的命令將它們合併到更大的文件。在RCFile的情況下,合併發生在塊級別,而對於ORC文件,合併發生在條帶級別,從而避免瞭解壓縮和解碼數據的開銷。

而且:

的ORC文件的主體由一系列條紋的。條紋是 大(通常〜200MB)並且彼此獨立並且通常由不同的任務處理 。列式存儲格式的定義特性是每列的數據分別存儲在 中,並且從文件中讀取數據應與讀取的列數成比例。 在ORC文件中,每個列都存儲在幾個流中,這些流在文件中彼此相鄰存儲 。例如,一個整數列是 ,表示爲兩個數據流PRESENT,如果該數值非空,則使用一個值爲 值的數據;如果該值爲非空值,則記錄數據DATA。如果條帶中的所有列值都非空,則 從條帶中省略PRESENT流。對於二進制數據,ORC 使用三個數據流PRESENT,DATA和LENGTH,它們存儲每個值的長度 。每種類型的細節將在後面的小節 中提供。

於火花實施,您可以使用SparkSQL星火上下文的幫助:

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

scala> sqlContext.sql("Your_hive_query_here")