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

您可以将每条记录加载为一行文本,然后尝试使用MyRegExLoaderREGEX_EXTRACT_ALL正则表达式/提取字段:

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

这是一种 hack,但您也可以使用REPLACE来删除多余的文本:

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

目前分号存在问题,因此您可能需要自己做REPLACE

Pig中没有本地日期类型,但您可以使用PiggyBank中的日期工具或构建自己的 UDF 以将其转换为 Unix long。

另一种方法也是编写一个简单的脚本(Python ...)来准备要加载的数据。

于 2011-07-15T23:30:03.903 回答