如何获取Pig Script

时间:2017-07-25 13:47:30

标签: regex apache-pig hl7

我想使用pig脚本获取一行的最后一个元素。我不能使用 $ ,因为最后一个元素的索引没有修复。我尝试使用正则表达式,但它无法正常工作。我尝试使用 $ - 1 来获取它,但它没有用。我只发布一个样本,因为我的实际文件包含更多的PID。

示例:

MSH|�~\&|LAB|LAB|HEATH|HEA-HEAL|20247||OU�R01|M1738000000001|P|2.3|||ER|ER|
PID|1|YXQ120185751001|YXQ120185751001||ELJKDP@#PDUB||19790615|F||| H LGGH VW��ZHVW FKHVWHU�SD�19380|||||||4002C340778A|000009561|ELJKDP@#PDUB19790615F

我想要获得 PID i的最后一个值; e ELJKDP@#PDUB19790615F 为此,我尝试了下面的代码,但它不起作用。

代码1:

STOCK_A = LOAD '/user/rt/PARSED' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($0 matches '.*PID.*'); 
MSH_DATA = FOREACH data GENERATE $2 AS id, $5 AS ame , $7 AS dob, $8 AS gender, $-1 AS rk;

代码2:

STOCK_A = LOAD '/user/rt/PARSED' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($0 matches '.*PID.*'); 
MSH_DATA = FOREACH data GENERATE $2 AS id, $5 AS ame , $7 AS dob, $8 AS gender, REGEX_EXTRACT(data,'\\s*(\\w+)$',1) AS rk;

代码2的错误:

  

错误org.apache.pig.tools.grunt.Grunt - 错误1200:Pig脚本失败   解析:标量投影无效:数据:A   列需要从关系中进行投影才能将其用作   标量

请帮忙

1 个答案:

答案 0 :(得分:1)

这应该有效

REGEX_EXTRACT(data,'([^|]+$)',1) AS rk

[^ |] + $匹配最后一个管道符号右侧的所有内容。

Output