Mit Sqoop können Sie Daten parallel importieren und --split-by und --boundary-query ermöglichen Ihnen mehr Kontrolle. Wenn Sie nur eine Tabelle importieren, wird sie den PRIMARY KEY verwenden. Wenn Sie jedoch eine komplexere Abfrage durchführen, müssen Sie die Spalte angeben, um die parallele Aufteilung durchzuführen.
heißt
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-Abfrage können Sie eine optimierte Abfrage geben Sie die max, min zu erhalten. Andernfalls versucht es, MIN (a.id), MAX (a.id) ON - Abfrage-Anweisung.
Die Ergebnisse werden (wenn min = 0, max = 30) 3 Abfragen, die parallel laufen lassen:
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;
Entschuldigung. Ich verstehe es immer noch nicht. Was ist --split-by? ist es so, etwas mit der Verarbeitung des Befehls zu tun? – DrewRose