Загрузка из mysqldump с PIG - PullRequest
1 голос
/ 14 июля 2011

У меня есть 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 был целым, и я не могу понять, как отрубить ведущие "INSERT INTO MY_TABLE VALUES (" and the trailing ");" при загрузке.

Кроме того, как мне загрузить информацию о дате и времени, чтобы я мог запросить ее?

Любая помощь, которую вы можете оказать, была бы великолепна.

1 Ответ

1 голос
/ 16 июля 2011

Вы можете загрузить каждую запись в виде строки текста и затем попытаться переэкспонировать / извлечь поле с помощью 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 или создать свой собственный UDF, чтобы преобразовать его в Unix long.

Другим способом будет также простой скрипт (Python ...) для подготовки данных к загрузке.

...