2016-04-26 7 views
0

を使用して、他のデータセット(データ転置の一種)からデータをフェッチするために、私は、2つのデータセットをした、一方がソースデータであり、別のメタデータです。使用列の値は、Apache豚

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 

私たちは、私たちはここに「都市」と「状態」ので、私たちが必要とするため、メタデータのデータ・セット、最初にいるロジックフラグべき「Y」を読み/参照する必要があるメタ情報に基づいて、ソースからのいくつかの列を必要とソースデータからこれらの2つの列のみをプルします。

私は今、私が対応する列のデータをフェッチするために供給するために、この列名を渡すことができますどのように、メタデータのデータ・セットから列名を取得することができますよ。

現在のコード

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) 
+0

あなたはすべての行に対して同じメタを持っているか、それは行ごとに異なりますができますか?すべての行について – kecso

+0

同じメタデータ。 – Prashant

答えて

0

すべてのデータ行がに、私は小さな(シェル)スクリプトどのようなプロセスメタファイルを作成して、カンマ区切り提出の名前を対応するのと同じメタに対して処理されている場合。それを豚変数に格納し、その変数を使用して必要なフィールドを投影します。 は、ここに例を示します

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; 

(注私はシェルスクリプトを作成していなかっただけのプロジェクト変数を宣言したが、スクリプトが簡単になります)ので、プロジェクト変数を投影する必要があり、ちょうどことを使用するフィールドが含まれていますFOREACH声明書に記載されています。 説明結果:

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

data_p: { 
    a: chararray, 
    c: chararray 
} 

これがあなたの問題を解決することを願っています。

+0

おかげでkecso :) – Prashant