首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能从原始关系的别名中找到列除非它的存在

为什么不能从原始关系的别名中找到列除非它的存在
EN

Stack Overflow用户
提问于 2019-08-01 12:12:58
回答 1查看 415关注 0票数 0

我有这样的关系:

代码语言:javascript
运行
复制
S10 = FOREACH E1EEFRE GENERATE  

CD_SI AS CD_SI,
IDT_ETT_CTR AS IDT_ETT_CTR,
CD_EFS AS CD_EFS,
(BigDecimal) null AS MT_DSP,
(BigDecimal) null AS MT_NAL,
(BigDecimal) null AS MT_ENC_MOY,
(BigDecimal) null AS MT_UTI,
(BigDecimal) null AS MT_ITT_M,
 MT_ENMO  AS MT_ENMO;

代码语言:javascript
运行
复制
S5 = FOREACH E1EEFAU  GENERATE  
    CD_SI             AS CD_SI,
    IDT_ETT_CTR       AS IDT_ETT_CTR,
    CD_EFS            AS CD_EFS,
    MT_DSP AS MT_DSP,
    MT_NAL AS MT_NAL,
    MT_ENC_MOY  AS MT_ENC_MOY,
    MT_ENC_FIN_PER AS MT_UTI,
   'EEFAU' AS CD_ETT_ORI,
   MT_DSP AS MT_DSP_CVE,
   MT_NAL AS MT_NAL_CVE,
  (BigDecimal) null AS MT_ENC_MOY_CVE,
   MT_IMP AS MT_IMP,
   MT_PROR AS MT_PROR,
   MT_DEM AS MT_DEM,
  (BigDecimal) null AS MT_ITT_M;

现在,我想生成最后一个实体,其中MT_ENC_EFFMT_NAL_LIG依赖于S5S10

代码语言:javascript
运行
复制
S26 = UNION S19, S22, S21;

S27 = FOREACH S26 GENERATE 

    '$CD_TY_TT'                 AS CD_TY_TT,
    '$DA_TT'                    AS DA_TT,
    '$A_ARR'                    AS A_ARR,
    '$M_ARR'                    AS M_ARR,
    '$CD_ETS'                   AS CD_ETS,
        $0                                       AS CD_SI,  
        $1                                  AS IDT_ETT_CTR,
        $2                                       AS CD_EFS,
        $3                                       AS MT_DSP,
        $4                                       AS MT_NAL,
        $5                                       AS MT_ENC_MOY,
        S10::MT_ENMO + S5::MT_ENC_MOY              AS MT_ENC_EFF,
        $6                                      AS MT_IMP,
        $7                                      AS MT_PROR,
        $8                                      AS MT_DEM,
        $9                                      AS MT_ITT_M,
        (S6::IDT_ETT_CTR_LIG == '' ? (S6::MT_NAL_BIL + S6::MT_AUT) :99) AS MT_NAL_LIG;


STORE S27 INTO '$PathDataWorkingFile' USING CSVExcelStorage(',', 'YES_MULTILINE');

显示的错误是:

无效场投影。投影字段S10::MT_ENMO不存在。

MT_ENMO却存在于现实中!

当我把S10::MT_ENMO改为S10.MT_ENMO

我在Hadoop应用程序管理器中得到了这些信息:

xecException:错误0:标量在输出中有多行。1:(001,1708104234,01,、,、)、(001、1708104234、01、(001、1715803801、0.0) (共同的原因:“加入”然后“加入”.org.apache.pig.impl.builtin.ReadScalars.exec(ReadScalars.java:122) at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:326)的foo.bar“应该是"foo::bar”)

编辑:这是S26的输出

代码语言:javascript
运行
复制
001,DQ0017751107,29,0.0,246327.35,0.0,,162234.16,0.0,0.0,0.0,,ECRFI,0.0,246327.35,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947801,29,0.0,25217.33,0.0,,20433.19,0.0,0.0,0.0,,ECRFI,0.0,25217.33,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947802,29,0.0,16666.67,0.0,,13496.64,0.0,0.0,0.0,,ECRFI,0.0,16666.67,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947803,29,0.0,-16666.67,0.0,,-13496.64,0.0,0.0,0.0,,ECRFI,0.0,-16666.67,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947804,29,0.0,25217.33,0.0,,21156.29,0.0,0.0,0.0,,ECRFI,0.0,25217.33,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947805,29,0.0,16666.67,0.0,,13638.92,0.0,0.0,0.0,,ECRFI,0.0,16666.67,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947806,29,0.0,-16666.67,0.0,,-13638.92,0.0,0.0,0.0,,ECRFI,0.0,-16666.67,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067947901,29,0.0,961900.0,0.0,,667228.77,0.0,0.0,0.0,,ECRFI,0.0,961900.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067948001,29,0.0,6250000.0,0.0,,4669082.64,0.0,0.0,0.0,,ECRFI,0.0,6250000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,
001,DQ0067948101,29,0.0,1730000.0,0.0,,1314314.02,0.0,0.0,0.0,,ECRFI,0.0,1730000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,

Note

完整的猪脚本就在这里:

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-08-01 13:20:59

问题是,除了MT_ENMO和您的最终关系S27之外,在任何关系中都没有预测到S27。

  • S26由S23、S22和S20三种关系组成。所有这些都不包括MT_ENMO。
  • S20由六个关系组成,包括S16。S16也不包含MT_ENMO。
  • S16正在投影来自S10的数据,所以您应该首先在这里添加MT_ENMO。然后在S27中,您应该能够通过投影S16::MT_ENMO获得字段。

示例:

代码语言:javascript
运行
复制
S16 = FOREACH S16_JOIN_LEFT GENERATE
    S10::CD_SI                      AS CD_SI,
    S10::IDT_ETT_CTR                AS IDT_ETT_CTR,
    S10::CD_EFS                     AS CD_EFS,
    S10::MT_DSP                     AS MT_DSP,
    S10::MT_NAL                     AS MT_NAL,
    S10::MT_ENC_MOY                 AS MT_ENC_MOY,
    S10::MT_UTI                     AS MT_UTI,
    S10::MT_CAP_RST_DU              AS MT_CAP_RST_DU,
    S10::MT_ITT_CRU                 AS MT_ITT_CRU,
    S10::MT_CAP_ECN_IMP             AS MT_CAP_ECN_IMP,
    S10::MT_ITT_IMP                 AS MT_ITT_IMP,
    S10::MT_DNR_ECN                 AS MT_DNR_ECN,
    S10::CD_ETT_ORI                 AS CD_ETT_ORI,
    S10::MT_DSP_CVE                 AS MT_DSP_CVE,
    S10::MT_NAL_CVE                 AS MT_NAL_CVE,
    S10::MT_ENC_MOY_CVE             AS MT_ENC_MOY_CVE,
    S10::MT_CAP_IMP_CVE             AS MT_CAP_IMP_CVE,
    S10::MT_ITT_IMP_CVE             AS MT_ITT_IMP_CVE,
    S10::MT_GLB_IMP                 AS MT_GLB_IMP,
    S10::MT_GLB_IMP_CVE             AS MT_GLB_IMP_CVE,
    S10::MT_BN_INST                 AS MT_BN_INST,
    S10::MT_BN_INST_CVE             AS MT_BN_INST_CVE,
    S10::MT_BN_NV                   AS MT_BN_NV,
    S10::MT_BN_NV_CVE               AS MT_BN_NV_CVE,
    S10::MT_IMP                     AS MT_IMP,
    S10::MT_PROR                    AS MT_PROR,
    S10::MT_DEM                     AS MT_DEM,
    S10::MT_ITT_M                   AS MT_ITT_M,
    S10::MT_ENMO                    AS MT_ENMO;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57308791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档