我有一个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
时遗失了age
和DUMP A
。仅显示name
和id
。
我尝试过:
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"
希望在这里得到一些建议。谢谢!
答案 0 :(得分:1)
您应该使用org.apache.hcatalog.pig.HCatLoader库进行测试。
通常,Pig支持读/写分区表;
阅读:
此load语句将加载指定表的所有分区。 / * myscript.pig * / A = LOAD' tablename'使用org.apache.hcatalog.pig.HCatLoader(); ... ... 如果只需要指定表的某些分区,请在数据流中的load语句后面紧跟一个分区过滤器语句。 (但是,在脚本中,filter语句可能不会紧跟其load语句。)filter语句可以包括分区条件和非分区列。
<强>写强>
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