使用 Apache pig 使用列值从其他数据集(数据转置排序)中获取数据

Use column values to fetch data from other dataset (sort of data transpose ) using Apache pig

我有两个数据集,一个是源数据,另一个是元数据。

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

我们需要基于元信息的源中的几列,我们首先需要 refer/read 元数据数据集,逻辑标志应该 '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)

如果所有数据行都必须针对同一个元进行处理,我会创建一个小的 (shell) 脚本来处理元文件并响应以逗号分隔的文件名。比将它存储在猪变量中并使用该变量来投影所需的字段。 这是一个示例(注意:我没有创建 shell 脚本,只是声明了 PROJECT 变量,但脚本很简单)

set pig.pretty.print.schema true;

%default PROJECT 'a,c'

data = LOAD 'SO/simple.txt' USING PigStorage(',') AS (a:chararray, b:chararray, c:chararray, d:chararray);
DESCRIBE data;
dump data;
data_p = FOREACH data GENERATE
        $PROJECT;
DESCRIBE data_p;
DUMP data_p;

因此PROJECT 变量包含需要投影的字段,只需在FOREACH 语句中使用它即可。 描述结果:

data: {
    a: chararray,
    b: chararray,
    c: chararray,
    d: chararray
}

data_p: {
    a: chararray,
    c: chararray
}

希望这能解决您的问题。