2017-08-28 3 views
0

私は豚には非常に新しいので、豚で非常に基本的な処理を実行しようとしている間にいくつかの問題に直面しています。行が2列がCOL_1持っているとcol_2(列がchararrayあると仮定)と私が取得する必要があり、たとえば 豚のデータ処理

2-日付に基づいてレコードをフィルタリングするための処理ロジックを書く豚

を使用してファイル

の1-ロード、 col_1とcol_2の間に1日の差があるレコードのみ。

3最後に、フィルタリングされたレコードをハイブテーブルに格納します。

入力ファイル(タブ区切り): -

2016-01-01T16:31:40.000+01:00 2016-01-02T16:31:40.000+01:00 
2017-01-01T16:31:40.000+01:00 2017-01-02T16:31:40.000+01:00 

私は

A = LOAD '/user/inp.txt' USING PigStorage('\t') as (col_1:chararray,col_2:chararray); 

私は以下のように取得しています結果試す: - DUMPのAを、

(,2016-01-03T19:28:58.000+01:00,2016-01-02T16:31:40.000+01:00) 
(,2017-01-03T19:28:58.000+01:00,2017-01-02T16:31:40.000+01:00) 

わからないのはなぜですか? 私はこの方法でタブで区切られたファイルを解析する方法と、その文字列を日付に変換して日差に基づいてフィルタリングする方法を教えてください。

おかげ

+0

ほとんどの場合、loadステートメントのスキーマ部分にスペースがあります。 –

+0

ありがとう、私は問題を解決しました。実際には最初にもう1つのフィールドがあり、intとして定義し、longに変更して動作させました。 –

答えて

1

ToDateを使用してDateTimeオブジェクトに列を変換し、その差を与える必要がありDaysBetween .Thisを使用して、差分== 1は、その後filter.Finallyロードした場合には、ハイブ。

A = LOAD '/user/inp.txt' USING PigStorage('\t') as (col_1:chararray,col_2:chararray); 
B = FOREACH A GENERATE DaysBetween(ToDate(col_1,'yyyy-MM-dd HH:mm:ss'),ToDate(col_2,'yyyy-MM-dd HH:mm:ss')) as day_diff; 
C = FILTER B BY (day_diff == 1); 
STORE C INTO 'your_hive_partition' USING org.apache.hive.hcatalog.pig.HCatStorer(); 
+0

多くのご協力ありがとうございました。 –

+0

col_1とcol_2がunix_time_stampにある場合、ちょうどあなたがコードで私を助けることができますか知りたいですか?同じ機能が働いていませんか?どんな助け? –

+0

フォーマット文字列を使わずにToDate(col_1)を使用するだけで動作します。 –