Позвольте привести пример: вчера я экспортировал 1 ТБ данных. Сегодня база данных получила еще 1 ГБ данных. Если я попытаюсь импортировать данные снова сегодня, Sqoop импортирует данные 1 ТБ + 1 ГБ, а затем я слияние. Так что это головная боль. Я хочу импортировать только новые данные и добавлять их к старым данным. Таким образом, на ежедневной основе я вытаскиваю данные РСУБД в HDFS.Как импортировать только новые данные с помощью Sqoop?
ответ
Вы можете использовать sqoop Инкрементного Импорт:
Sqoop обеспечивает режим incremental import
, который может быть использован для получения только строки новее, чем какой-то ранее импортированного набора строк.
инкрементальные аргументы импорта:
--check-column (col)
Указывает столбец будет рассматриваться при определении, какие строки для импорта. --incremental (mode)
Указывает, как Sqoop определяет, какие строки являются новыми. Правовые значения для режима включают добавление и последнее изменение.
--last-value (value)
Задает максимальное значение столбца проверки из предыдущего импорта.
Ссылка:https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports
Для инкрементного Импорт: Вам необходимо будет указать значение в контрольной колонке относительно эталонного значения для последнего импорта. Например, если был указан аргумент append –incremental
, а также –check-column id and –last-value 100
, все строки с идентификатором> 100 будут импортированы. Если инкрементный импорт запускается из командной строки, значение, которое должно быть указано как –last-value
в последующем инкрементном импорте, будет напечатано на экране для вашей справки. Если инкрементный импорт выполняется из сохраненного задания, это значение будет сохранено в сохраненном задании. Последующие прогоны sqoop job –exec
некоторые Инкрементные задания будут продолжать импортировать только новые строки, чем ранее импортированные.
Для импорта всех таблиц на одном дыхании, вам нужно будет использовать sqoop-импорт-все-таблицы команду, но эта команда должна удовлетворять указанным ниже критериям для работы
Каждая таблица должна иметь один столбец первичного ключ. Вы должны намереваться импортировать все столбцы каждой таблицы. Вы не должны использовать столбец разделения по умолчанию, а также не устанавливать какие-либо условия с помощью предложения WHERE.
Ссылка:https://hortonworks.com/community/forums/topic/sqoop-incremental-import/