我有一个格式的mysqldump:
INSERT INTO `MY_TABLE` VALUES (893024968,'342903068923468','o03gj8ip234qgj9u23q59u','testing123','HTTP','1','4213883b49b74d3eb9bd57b7','blahblash','2011-04-19 00:00:00','448','206',NULL,'GG');
如何使用猪加载此数据?我试过了;
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_TABLE
VALUES(”和尾随“);”加载时。
另外我应该如何加载日期时间信息以便我可以查询它?
你能给予的任何帮助都会很棒。
答案 0 :(得分: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中没有本地date type,但您可以使用PiggyBank中的日期工具丛林,或者构建您自己的UDF,以便将其转换为Unix长。
另一种方法是使用简单脚本(Python ...)来准备加载数据。