2015-11-11 49 views
0

我有一個Impala分區表,存儲爲Parquet。我可以使用Pig從該表中加載數據,並將分區添加爲列嗎?可以使用Pig來從HDFS中的Parquet表中加載分區,並將分區添加爲列?

實木複合地板表定義爲:

create table test.test_pig (
    name: chararray, 
    id bigint 
) 
partitioned by (gender chararray, age int) 
stored as parquet; 

和豬的腳本是這樣的:

A = LOAD '/test/test_pig' USING parquet.pig.ParquetLoader AS (name: bytearray, id: long); 

然而,genderage丟失的情況下DUMP A。僅顯示nameid

我有嘗試:

A = LOAD '/test/test_pig' USING parquet.pig.ParquetLoader AS (name: bytearray, id: long, gender: chararray, age: int); 

但我會收到錯誤,如:

錯誤org.apache.pig.tools.grunt.Grunt - 錯誤1031:不相容 模式:左是 「姓名:字節組,ID:長,性別:字節組,年齡:INT」, 右邊是 「姓名:字節組,ID:長」

希望能得到一些進階冰在這裏。謝謝!

回答

1

您應該使用org.apache.hcatalog.pig.HCatLoader庫進行測試。

通常,Pig支持讀/寫分區表;

讀:

此負載語句將加載指定表的所有分區。 /* myscript.pig */ A = LOAD'tablename'USING org.apache.hcatalog.pig.HCatLoader(); ... ... 如果只需要指定表的某些分區,請在數據流中的load語句之後立即包含分區過濾器語句。 (但是,在腳本中,filter語句可能不會立即跟隨其加載語句。)filter語句可以包含分區條件以及非分區列。如果必要的話

https://cwiki.apache.org/confluence/display/Hive/HCatalog+LoadStore#HCatalogLoadStore-RunningPigwithHCatalog

寫入

HCatOutputFormat將觸發動態分區的使用(如果未指定密鑰值)和將檢查數據以將其適當地寫出來的。

https://cwiki.apache.org/confluence/display/Hive/HCatalog+DynamicPartitions

不過,我認爲這還沒有正確地與拼花文件(至少不是由Cloudera的傢伙)測試:

鑲木尚未與HCatalog測試。沒有HCatalog,Pig無法正確讀取動態分區表;對於所有文件格式都是如此。

http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_parquet.html

相關問題