У меня 20000 записей в таблице. Я хочу скопировать их в два отдельных файла (одинаково распределенные записи) в HDFS (используя Sqoop). Как достичь этого, если в таблице нет первичного ключа или уникального ключа?Как импортировать 20000 записей таблицы в два разных файла (одинаково распределенные записи), если таблица не имеет первичного ключа или уникального ключа?
ответ
Наличие первичного ключа или уникального ключа не является ограничением для импорта параллельно.
Разделение на неравномерно распределенный столбец не рекомендуется, поскольку это может привести к несбалансированным задачам.
Теперь ваши записи распределены равномерно. Таким образом, с этой проблемой не будет никаких проблем с производительностью.
Позвольте мне объяснить, что это работает, используя пример,
У вас есть таблица с колонки col1
со значениями от 1 -100 (некоторые из повторяющихся значений также есть).
Теперь sqoop будет определять минимальное и максимальное значения и разделить его на 2 части
- 1 - 50
- 51 - 100
Картостроители будет получать данные через JDBC с использованием запросов, как -
SELECT * FROM sometable WHERE id >= 1 AND id < 50
SELECT * FROM sometable WHERE id >= 51 AND id < 100
Таким образом, идти вперед с sqoop импорта запроса с двумя картографов (-m 2
).
Убедитесь, что вы даете --split-by col1 с -m 2 иначе вы увидите сообщение об ошибке.