Apache pig 将yyyymmdd字符转换为yyyy/mm/dd日期格式

Apache pig 将yyyymmdd字符转换为yyyy/mm/dd日期格式,apache-pig,Apache Pig,我想在DAT_015_X列和固定日期“2019年1月1日”之间进行筛选 我已将DAT_015_X作为字符列加载 然后 然后 我的原始数据如下所示: 99991231 20200605 20190605 20200605 这是全球数据的一部分 MGM_COMPTEUR;CIA_CD_CRV_CIA;CIA_DA_EM_CRV;CIA_CD_CTRL_BLCE;CIA_IDC_EXTR_RDJ;CIA_VLR_IDT_CRV_LOQ;CIA_VLR_REF_CRV;CIA_NO_SEQ_CRV;C

我想在DAT_015_X列和固定日期“2019年1月1日”之间进行筛选

我已将DAT_015_X作为字符列加载 然后

然后

我的原始数据如下所示:

99991231
20200605
20190605
20200605
这是全球数据的一部分

MGM_COMPTEUR;CIA_CD_CRV_CIA;CIA_DA_EM_CRV;CIA_CD_CTRL_BLCE;CIA_IDC_EXTR_RDJ;CIA_VLR_IDT_CRV_LOQ;CIA_VLR_REF_CRV;CIA_NO_SEQ_CRV;CIA_VLR_LG_ZON_RTG;CIA_HEU_CIA;CIA_TM_STP_CRE;CIA_CD_SI;CIA_VLR_1;CIA_DA_ARR_FIC;CIA_TY_ENR;CIA_CD_BTE;CIA_CD_PER;CIA_CD_EFS;CIA_CD_ETA_VAL_CRV;CIA_CD_EVE_CPR;CIA_CD_APLI_TDU;CIA_CD_STE_RTG;CIA_DA_TT_RTG;CIA_NO_ENR_RTG;CIA_DA_VAL_EVE;PSE_001;STR_002;STR_003;CPR_006_VLR;CPR_006_DCM;CPR_006_DVS;CPR_008_VLR;CPR_008_DCM;CPR_008_DVS;CPR_009_VLR;CPR_009_DCM;CPR_009_DVS;CPR_059_VLR;CPR_059_DCM;CPR_059_DVS;CPR_060_VLR;CPR_060_DCM;CPR_060_DVS;RUB_205;RUB_216;DAT_015_X;NB_005_VLR;NB_005_DCM;NB_007_VLR;NB_007_DCM;NB_012_VLR;NB_012_DCM;EUR_061_VLR;EUR_061_DCM;EUR_061_CD_DVS;EUR_062_VLR;EUR_062_DCM;EUR_062_CD_DVS
00000000000000000000;22002;20190731;9;9;                                  ;22002                   0000000001;0000000001;ZZZZZZZZZZZZZZZZZZZZ;      ;2019-07-31-18.03.27.880010;002;00000000000000000001;20190731; ;2200;M;02;V;00001;    ; ;ZZZZZZZZ;ZZZZZZZZZZZZZZZZZZZZ;20081112;50421451;065000;060100;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;3   ;40  ;99991231;+00000000000000000;00;+00000000000000000;00;+00000000000000000;00;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;
00000000000000000001;22002;20190731;9;9;                                  ;22002                   0000000002;0000000002;ZZZZZZZZZZZZZZZZZZZZ;      ;2019-07-31-18.03.27.880010;002;00000000000000000001;20190731; ;2200;M;02;V;00001;    ; ;ZZZZZZZZ;ZZZZZZZZZZZZZZZZZZZZ;20081112;52289527;065000;060100;+00000000000000000;02;EUR ;+00000000003000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;1   ;40  ;20200605;+00000000000000000;00;+00000000000000000;00;+00000000000000000;00;+00000000003000000;02;EUR ;+00000000000000000;02;EUR ;
00000000000000000002;22002;20190731;9;9;                                  ;22002                   0000000003;0000000003;ZZZZZZZZZZZZZZZZZZZZ;      ;2019-07-31-18.03.27.880010;002;00000000000000000001;20190731; ;2200;M;02;V;00001;    ; ;ZZZZZZZZ;ZZZZZZZZZZZZZZZZZZZZ;20081112;52439938;065000;060100;+00000000000000000;02;EUR ;+00000000001000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;+00000000000000000;02;EUR ;1   ;40  ;20190605;+00000000000000000;00;+00000000000000000;00;+00000000000000000;00;+00000000001000000;02;EUR ;+00000000000000000;02;EUR ;
但这会返回此消息错误

无法推断的匹配函数 org.apache.pig.builtin.ToString作为多个或没有一个匹配项。 请使用显式强制转换


如何解决此问题?

请注意,您缺少结尾引号,即格式为“yyyy/MM/dd”的结尾引号。 假设您的DAT_015_X为
yyyyMMdd
格式,请使用此

Data_2 = FILTER Data  BY ((ToDate(DAT_015_X,'yyyyMMdd') > ToDate('20190101','yyyyMMdd'));

解决这个问题的办法非常简单

事实上,我声明变量DAT_015_X为长数据,而不是chararray。 然后,我将过滤器创建为:

Data_2 = FILTER Data  BY (DAT_015_X > 20190101);

它给出了所需的结果。

@VK_2017感谢您的回答。实际上,我的DAT_015_X是yyyyMMdd格式的,但我尝试使用yyyyMMdd格式。即使实际上是yyyyMMdd格式,也可以使用ToDate将其直接转换为yyyy/MM/dd吗?不,ToDate用于将现有的chararray datetime转换为datetime。因此,在这种情况下,由于chararray格式为yyyyMMdd,您需要将其指定为ToDate的格式。我已编辑了答案。请尝试。这将返回给我无法从中读取数据且无法生成结果。执行时,init returns
错误0:异常(名称:CRE_22002_data:New for Each(false,false,false,false,false,false,false,false,false,false,fa
java.lang.IllegalArgumentException:无效格式:“DAT_015_X”
我想它不知道DAT_015_X在格式为yyyyMMdd时是一个日期变量
Data_2 = FILTER Data  BY ((ToDate(DAT_015_X,'yyyyMMdd') > ToDate('20190101','yyyyMMdd'));
Data_2 = FILTER Data  BY (DAT_015_X > 20190101);