2016-01-15 2 views
2

У меня есть таблица, в которой нет первичного ключа и даты/времени. Эта таблица аналогична таблице транзакций, которая сохраняет все данные (Нет удаления/обновления).Инкрементная загрузка данных с использованием sqoop без первичного ключа или метки времени

Моя проблема теперь заключается в том, что я хочу, чтобы данные HDFS попадали в HDFS, не загружая всю таблицу снова каждый раз, когда я запускаю инкрементную нагрузку.

Код ниже содержит последнюю строку, импортированную в HDFS, если моя таблица имеет первичный ключ.

sqoop job \ 
--create tb_w_PK_DT_append \ 
-- \ 
import \ 
--connect jdbc:mysql://10.217.55.176:3306/SQOOP_Test \ 
--username root \ 
--incremental append \ 
--check-column P_id \ 
--last-value 0 \ 
--target-dir /data \ 
--query "SELECT * FROM tb_w_PK_DT WHERE \$CONDITIONS" \ 
-m 1; 

Любое решение для получения последних данных, импортированных без изменения первичного ключа или даты.

+0

У меня есть аналогичное требование, но запись будет удалена/обновляется в источнике РСУБДЕ без какого-либо уникального идентификатора столбца или меток времени. любая идея о том, как ее решить? – kumsgs

ответ

0

Если у ваших данных есть поле типа rowid, вы можете импортировать, используя значение -last в аргументах sqoop.

Пожалуйста, обратитесь к https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports

+0

Что делать, если в таблице нет первичного ключа или даты? – MMakati

+0

Не могли бы вы дать пример данных, чтобы понять это немного лучше –

1
You can follow these steps 

1) The initial load data (previous day data) is in hdfs - Relation A 
2) Import the current data into HDFS using sqoop -- Relation B 
3) Use pig Load the above two hdfs directories in relation A and B define schema. 
4) Convert them to tuples and join them by all columns 
5) The join result will have two tuples in each row((A,B),(A,B)) , fetch the result from join where tuple B is null ((A,D),). 
6) Now flatten the join by tuple A you will have new/updated records(A,D). 
Смежные вопросы