ApachePig—pig可以用于从hdfs中的parquet表加载分区,并将分区作为列添加吗?

yfjy0ee7  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(344)

我有一张 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:长“
希望能在这里得到一些建议。谢谢您!

f0brbegy

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

相关问题