可以使用Pig来从HDFS中的Parquet表中使用分区加载,并将分区添加为列吗?

时间:2015-11-11 00:04:15

标签: apache-pig hdfs database-partitioning parquet

我有一个Impala分区表,存储为Parquet。我可以使用Pig从此表加载数据,并将分区添加为列吗?

Parquet表定义为:

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

Pig脚本就像:

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

但是,gender时遗失了ageDUMP 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 - ERROR 1031:不兼容   schema:left is" name:bytearray,id:long,gender:bytearray,age:int",   右边是"名称:bytearray,id:long"

希望在这里得到一些建议。谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用org.apache.hcatalog.pig.HCatLoader库进行测试。

通常,Pig支持读/写分区表;

阅读:

  

此load语句将加载指定表的所有分区。   / * myscript.pig * /   A = LOAD' tablename'使用org.apache.hcatalog.pig.HCatLoader();   ...   ...   如果只需要指定表的某些分区,请在数据流中的load语句后面紧跟一个分区过滤器语句。 (但是,在脚本中,filter语句可能不会紧跟其load语句。)filter语句可以包括分区条件和非分区列。

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

<强>写

  

HCatOutputFormat将在必要时触发动态分区使用(如果未指定键值),并将检查数据以将其正确写出。

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

但是,我认为目前尚未对镶木地板文件进行适当测试(至少不是Cloudera人员):

  

Parquet尚未通过HCatalog测试。没有HCatalog,Pig无法正确读取动态分区表;这适用于所有文件格式。

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