Apache-pig-concat

提供:Dev Guides
移動先:案内検索

Apache Pig-CONCAT()

Pig Latinの* CONCAT()*関数は、同じタイプの2つ以上の式を連結するために使用されます。

構文

grunt> CONCAT (expression, expression, [...expression])

以下に示すように、HDFSディレクトリ /pig_data/student_details.txt という名前のファイルがあると仮定します。

*student_details.txt*
001,Rajiv,Reddy,21,9848022337,Hyderabad,89
002,siddarth,Battacharya,22,9848022338,Kolkata,78
003,Rajesh,Khanna,22,9848022339,Delhi,90
004,Preethi,Agarwal,21,9848022330,Pune,93
005,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar,75
006,Archana,Mishra,23,9848022335,Chennai,87
007,Komal,Nayak,24,9848022334,trivendram,83
008,Bharathi,Nambiayar,24,9848022333,Chennai,72

そして、以下に示すように、このファイルをリレーション名 student_details でPigにロードしました。

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, phone:chararray, city:chararray, gpa:int);

2つの文字列を連結する

  • CONCAT()関数を使用して、2つ以上の式を連結できます。 まず、以下に示すように、ダンプ演算子を使用して *student_details 関係の内容を確認します。
grunt> Dump student_details;

( 1,Rajiv,Reddy,21,9848022337,Hyderabad,89 )
( 2,siddarth,Battacharya,22,9848022338,Kolkata,78 )
( 3,Rajesh,Khanna,22,9848022339,Delhi,90 )
( 4,Preethi,Agarwal,21,9848022330,Pune,93 )
( 5,Trupthi,Mohanthy,23,9848022336,Bhuwaneshwar,75 )
( 6,Archana,Mishra,23,9848022335,Chennai,87 )
( 7,Komal,Nayak,24,9848022334,trivendram,83 )
( 8,Bharathi,Nambiayar,24,9848022333,Chennai,72 )

そして、以下に示すように describe 演算子を使用してスキーマを検証します。

grunt> Describe student_details;

student_details: {id: int, firstname: chararray, lastname: chararray, age: int,
   phone: chararray, city: chararray, gpa: int}

上記のスキーマでは、学生の名前が2つのchararray値、つまり firstnamelastname を使用して表されていることがわかります。 * CONCAT()*関数を使用して、これら2つの値を連結します。

grunt> student_name_concat = foreach student_details Generate CONCAT (firstname, lastname);

検証

以下に示すように、 DUMP 演算子を使用して、リレーション student_name_concat を確認します。

grunt> Dump student_name_concat;

出力

リレーション student_name_concat の内容を表示する次の出力を生成します。

(RajivReddy)
(siddarthBattacharya)
(RajeshKhanna)
(PreethiAgarwal)
(TrupthiMohanthy)
(ArchanaMishra)
(KomalNayak)
(BharathiNambiayar)

以下に示すように、2つの式の間にオプションの区切り文字を使用することもできます。

grunt> CONCAT(firstname, '_',lastname);

ここで、 student_details 関係の生徒レコードの名と姓を連結します(下に示すように、それらの間に ‘_’ を配置します)。

grunt> student_name_concat = foreach student_details GENERATE CONCAT(firstname, '_',lastname);

検証

以下に示すように、 DUMP 演算子を使用して、リレーション student_name_concat を確認します。

grunt> Dump student_name_concat;

出力

次の出力が生成され、リレーション student_name_concat の内容が次のように表示されます。

(Rajiv_Reddy)
(siddarth_Battacharya)
(Rajesh_Khanna)
(Preethi_Agarwal)
(Trupthi_Mohanthy)
(Archana_Mishra)
(Komal_Nayak)
(Bharathi_Nambiayar)