pig:如何删除列名中的“::”

ej83mcc0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(315)

我和Pig的关系如下:
最终= {input_md5::type: chararray,input_md5::name: chararray,input_md5::id: long,input_md5::age: chararray,test_1:: type: chararray,test_2::name:chararray} 我正在尝试存储的所有列 input_md5 与配置单元表的关系。像所有人一样 input_md5::type: chararray,input_md5::name: chararray,input_md5::id: long,input_md5::age: chararray 不接受 test_1:: type: chararray,test_2::name:chararray pig中是否有只过滤列的命令 input_md5 。如下所示: STORE= FOREACH FINAL GENERATE all input_md5::type . 我知道Pig有: FOREACH FINAL GENERATE all input_md5::type as type 语法,但是我有很多列,所以我不能使用 as 在我的密码里。
因为当我尝试: STORE= FOREACH FINAL GENERATE input_md5::type .. bus_input_md5::name; pig抛出错误: org.apache.hive.hcatalog.common.HCatException : 2007 : Invalid column position in partition schema : Expected column <type> at position 1, found column <input_md5::type> 提前谢谢,

cgh8pdjw

cgh8pdjw1#

已解决此问题,下面是修复方法:
创建与某些筛选条件的关系,如下所示: DUMMY_RELATION= FILTER SOURCE_TABLE BY type== ''; (我取了一个名为type的列,它可以被表中的任何列过滤,重要的是我们需要它的模式) FINAL_DATASET= UNION DUMMY_RELATION,SCHEMA_1,SCHEMA_2; (这个新的 DUMMY_RELATION n应该排在联盟的第一)现在你没有了 :: 运算符和列名将匹配配置单元表的列名,前提是源表(到伪\u关系)和目标表具有相同的列顺序。
感谢我自己:)

ctehm74n

ctehm74n2#

我用这种方式实现了neethu的例子。可能有拼写错误,但它展示了如何实现这个想法。

tableA = LOAD 'default.tableA' USING org.apache.hive.hcatalog.pig.HCatLoader();
tableB = LOAD 'default.tableB' USING org.apache.hive.hcatalog.pig.HCatLoader();

--load empty table
finalTable = LOAD 'default.finalTable' USING org.apache.hive.hcatalog.pig.HCatLoader();

--example operations that end up with '::' in column names
g = group tableB by (id);
j = JOIN tableA by id LEFT, g by group;
result = foreach j generate tableA::id, tableA::col2, g::tableB;

--union empty finalTable and result
result2 = union finalTable, result;

--bob's your uncle
STORE result2 INTO 'finalTable' USING org.apache.hive.hcatalog.pig.HCatStorer();

感谢尼瑟!

相关问题