我有两个数据集,一个是源数据,另一个是元数据。
source data
============
name city state country
Ram Agra UP India
John Aligarh UP India
Shyam Merrut UP India
Isha Kanpur UP India
Metadata
=========
column_input flag
name Y
city Y
state N
country N
FINAL OUTPUT
============
name city
Ram Agra
John Aligarh
Shyam Merrut
Isha Kanpur
基于元信息,我们需要从源代码中获取几个列,我们需要首先引用/读取元数据数据集,logic-flag应该是“y”,这里是“city”和“state”,所以我们只需要从源数据中提取这两个列。
我可以从元数据数据集中获取列名,现在我可以将此列名传递到源代码以获取相应的列数据。
当前代码
meta_data_read = LOAD '/user/aidb' USING PigStorage(',') AS (column_input,flag);
filter_flag = FILTER meta_data_read by LOWER(TRIM(Flag)) == 'y' ;
gen_required_col = FOREACH filter_flag GENERATE column_input;
dump gen_required_col ;
(city)
(state)
1条答案
按热度按时间cnh2zyt31#
如果所有数据行都必须针对同一个meta进行处理,我将创建一个小的(shell)脚本来处理meta文件并响应以逗号分隔的文件名。然后将其存储在pig变量中,并使用该变量投影所需的字段。下面是一个示例(注意:我没有创建shell脚本,只是声明了项目变量,但是脚本很简单)
所以project变量包含需要投影的字段,只需在foreach语句中使用它。描述结果:
我希望这能解决你的问题。