我使用HCatalog
读取和写入数据,从猪脚本蜂巢如下撵表:问题保存到猪
A = LOAD 'customer' USING org.apache.hcatalog.pig.HCatLoader();
B = LOAD 'address' USING org.apache.hcatalog.pig.HCatLoader();
C = JOIN A by cmr_id,B by cmr_id;
STORE C INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
表定义客户是:
cmr_id int
name string
地址:
addr_id int
cmr_id int
address string
cmr_address_join:
cmr_id int
name string
addr_id int
address string
当我运行此,猪引发以下错误:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1115: Column names should all be in lowercase. Invalid name found: A::cmr_id
我认为这可能是因为猪是试图以配合蜂巢栏猪生成的文件名和它不完全匹配(A::cmr_id versus cmr_id
)。我认为HCatalogStorer
预计的别名是cmr_id
而不是A::cmr_id
。我希望HCatalogStorer
忽略别名前缀并只考虑字段名称。
grunt> DESCRIBE C;
C: {A::cmr_id: int,A::name: chararray,B::addr_id: int,B::cmr_id: int,B::address: chararray}
有没有办法在Pig中删除字段的前缀(即A::)?或者,如果某人有解决方法或解决方案,那就太好了。
我知道我们可以使用以下内容来明确地添加一个别名并使其工作。
D = foreach C generate A::cmr_id as cmr_id,A::name as name, B::addr_id as addr_id, B::address as address;
STORE D INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
但我的问题是,我有许多表,每个表都有数百列。如上所述指定别名会很繁琐。
任何帮助解决这个将不胜感激。
请参阅此问题的解决方案。http://stackoverflow.com/questions/38902046/pig-how-to-remove-in-the-column-name/40538122#40538122 – user584583 2016-11-11 00:15:54