1

次の形式の mysqldump があります。

INSERT INTO `MY_TABLE` VALUES (893024968,'342903068923468','o03gj8ip234qgj9u23q59u','testing123','HTTP','1','4213883b49b74d3eb9bd57b7','blahblash','2011-04-19 00:00:00','448','206',NULL,'GG');

pig を使用してこのデータをロードするにはどうすればよいですか? 私が試してみました;

A = LOAD 'pig-test/test.log' USING PigStorage(',') AS (ID: chararray, USER_ID: chararray, TOKEN: chararray, NODE: chararray, CHANNEL: chararray, CODE: float, KEY: chararray, AGENT: chararray, TIME: chararray, DURATION: float, RESPONSE: chararray, MESSAGE: chararray, TARGET: chararray);

区切り文字として , を使用しても問題なく動作しますが、ID を int にしたいので、先頭の "INSERT INTO MY_TABLEVALUES (" と末尾の ");"を切り落とす方法がわかりません。ロードするとき。

また、クエリを実行できるように日時情報をロードするにはどうすればよいですか?

あなたが与えることができるどんな助けも素晴らしいでしょう.

4

1 に答える 1

1

各レコードをテキスト行としてロードしてから、MyRegExLoaderまたはREGEX_EXTRACT_ALLを使用してフィールドを正規表現/抽出しようとすることができます。

A = LOAD 'data' AS (record: CHARARRAY);
B = FOREACH A GENERATE REGEX_EXTRACT_ALL(record, 'INSERT INTO...., \'(\d+)\', ...');

これは一種のハックですが、REPLACEを使用して余分なテキストを切り取ることもできます。

B = FOREACH A
    GENERATE
      (INT) REPLACE(ID, 'INSERT INTO MY_TABLE VALUES (', ''),
      ...
      REPLACE(TARGET, ');', '');    

現在、セミコロンに問題があるため、独自のREPLACEを実行する必要がある場合があります。

Pig にはネイティブの日付型はありませんが、 PiggyBankの日付ユーティリティを使用したり、Unix long に変換するために独自の UDF を構築したりできます。

別の方法として、ロードするデータを準備するための単純なスクリプト(Python...) を実行することもできます。

于 2011-07-15T23:30:03.903 に答える