我有一张 Impala 隔断的table,作为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);
但我会收到这样的错误:
error org.apache.pig.tools.grunt.grunt-错误1031:不兼容架构:左为“name:bytearray,id:长,gender:bytearray,age:int“右是”name:bytearray,id:长“
希望能在这里得到一些建议。谢谢您!
1条答案
按热度按时间f0brbegy1#
您应该使用org.apache.hcatalog.pig.hcatloader库进行测试。
通常,pig支持从分区表中读写;
阅读:
此load语句将加载指定表的所有分区。/myscript.pig/a=使用org.apache.hcatalog.pig.hcatloader()加载“tablename”。。。如果只需要指定表的某些分区,请在数据流中紧跟load语句之后包含partition filter语句(但是,在脚本中,filter语句可能不会紧跟在load语句之后。)filter语句可以包括分区列和非分区列的条件。
https://cwiki.apache.org/confluence/display/hive/hcatalog+loadstore#hcatalogloadstore-使用目录运行pig
写
如果需要(如果没有指定键值),hcatoutputformat将在动态分区使用时触发,并检查数据以适当地将其写出。
https://cwiki.apache.org/confluence/display/hive/hcatalog+dynamicpartitions
但是,我认为这还没有用Parquet文件进行适当的测试(至少cloudera的人没有这样做):
Parquet地板还没有用hcatalog测试过。没有hcatalog,pig无法正确读取动态分区表;所有文件格式都是这样。
http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_parquet.html