Инкрементный импорт — чтобы избежать дублирования строк

#sqoop

#sqoop

Вопрос:

Рассмотрим таблицу отделов со следующими данными-

 ID -1,2,3,8000
Name- A,B,C,D
  

Я импортировал данные в HDFS с помощью sqoop

Добавлены 2 новые строки с идентификаторами 4 и 5 в MySQL, выполнен инкрементный импорт с последним значением 3 и mode =append

Импортируемые данные содержат две строки для идентификатора 8000, поскольку используется условие department_id> 3 Как я могу настроить приведенную ниже команду, чтобы убедиться, что создаются повторяющиеся строки.

 sqoop import 
    --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username=retail_dba 
    --password=cloudera 
    --table departments 
    --target-dir/user/cloudera/dep1
    --append
    --check-column "department_id"
    --incremental append
    --last-value 3
  

Ответ №1:

Вы не можете настроить эту команду.

--incremental append предназначен для добавления новых данных с --check-column помощью > -last-value .


Для вашего использования вы должны использовать --incremental lastmodified .

--check-column должны иметь типы данных date, time, datetime и timestamp.

Если вы добавили новые записи после --last-value , будут извлечены все записи (новые или обновленные)

Пример команды:

  sqoop import 
    --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username=retail_dba 
    --password=cloudera 
    --table departments 
    --target-dir/user/cloudera/dep1 
    --incremental lastmodified 
    --check-column last_update_date 
    --last-value "2015-10-20 06:00:01"
  

Все записи, добавленные после "2015-10-20 06:00:01" , будут импортированы.

Проверьте документацию sqoop для получения более подробной информации.

Комментарии:

1. Столбец last_update_date отсутствует в таблице.

2. last_update_date отсутствует в таблице. Следовательно, мы не можем его использовать, я полагаю.

3. @VarunJoshi для использования в таблице необходимо создать столбец даты или метки времени --incremental lastmodified