Sqoop позволяет вам импортировать данные параллельно, а -split-by и -граничный-запрос позволяет вам больше контролировать. Если вы просто импортируете таблицу, тогда он будет использовать PRIMARY KEY, но если вы выполняете более продвинутый запрос, вам нужно указать столбец для параллельного разделения.
т.е.
sqoop import \
--connect 'jdbc:mysql://.../...' \
--direct \
--username uname --password pword \
--hive-import \
--hive-table query_import \
--boundary-query 'SELECT 0, MAX(id) FROM a' \
--query 'SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND $CONDITIONS'\
--num-mappers 3
--split-by a.id \
--target-dir /data/import \
--verbose
Boundary Query позволяет определить оптимизированный запрос для получения максимального, мин. иначе он попытается выполнить MIN (a.id), MAX (a.id) в вашем запросе -query.
Результаты будут (если мин = 0, макс = 30) 3 запросы, которые получают выполняются параллельно:
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 0 AND 10;
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 11 AND 20;
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 21 AND 30;
Извините. Я все еще не понимаю. Что такое -split-by? похоже, что-то связано с обработкой команды? – DrewRose