PIG 错误:从关系中读取属性时

Posted

技术标签:

【中文标题】PIG 错误:从关系中读取属性时【英文标题】:PIG Error : while reading the Attribute from a Relation 【发布时间】:2016-09-20 11:47:11 【问题描述】:

​嗨, 我正在使用下面的代码来执行订单操作,但它抛出了 Invalid field projection 的错误,因为关系有列。

grunt> byts = ORDER B BY JB_DLT::job_id DESC;

错误

2016-09-20 07:32:56,815 [主要] 错误 org.apache.pig.tools.grunt.Grunt - 错误 1025:无效的字段投影。架构中不存在投影字段 [JB_DLT::job_id]: group:tuple(JB_ASGNMNT::JB_DLT::job_id:bigdecimal,JOB_ASNMNT_STS_DLT::job_assignment_status_cd:chararray),a:bag:tuple(JB_ASGNMNT::JB_DLT::job_id:bigdecimal,JOB_ASNMNT_STS_DLT::job_assignment_status_cd:chararray,JOB_ASNNT :bigdecimal,JOB_ASNMNT_STS_DLT::actual_status_dt:datetime)。

grunt> describe B;

B: 组: (JB_ASGNMNT::JB_DLT::job_id: bigdecimal,JOB_ASNMNT_STS_DLT::job_assignment_status_cd: chararray),a: (JB_ASGNMNT::JB_DLT::job_id: 大十进制,JOB_ASNMNT_STS_DLT::job_assignment_status_cd: 字符数组,JOB_ASNMNT_STS_DLT::job_assignment_status_id: bigdecimal,JOB_ASNMNT_STS_DLT::actual_status_dt: datetime)

如何在 ORDER BY 子句中读取此列数据。请分享您的想法..

【问题讨论】:

使用“job_id”或“JB_ASGNMNT::JB_DLT::job_id” 【参考方案1】:

虽然 JB_DLT::job_id 存在但 Pig latin 无法找到(有 JB_ASGNMNT::JB_DLT::job_id),编辑语句 B 添加 JB_DLT::job_id 作为 job_id 。然后运行:

grunt> byts = ORDER B BY job_id DESC;

或者

byts = ORDER B BY JB_ASGNMNT::JB_DLT::job_id DESC;

【讨论】:

【参考方案2】:

您不能对分组数据进行 ORDER BY。使用 FOREACH 生成所需的数据,然后执行 ORDER BY。

C = FOREACH B GENERATE FLATTEN(group) AS (job_id, job_assignment_status_cd), a;
byts = ORDER C BY job_id DESC;

【讨论】:

以上是关于PIG 错误:从关系中读取属性时的主要内容,如果未能解决你的问题,请参考以下文章

Pig 无法处理大文件

Pig 中似乎有啥错误?

“帮助修复”错误:无法从文件中读取属性列表:info.plist

错误:无法读取未定义的属性“地图”

从 pig 脚本运行时,PIG 未从 hdfs 读取文件

未捕获的安全错误:无法从“HTMLIFrameElement”读取“contentDocument”属性