Sqoop consente di importare i dati in parallelo e --split-by e --boundary-query consentono un maggiore controllo. Se si sta solo importando una tabella, verrà utilizzato il CHIAVE PRIMARIO, tuttavia se si sta eseguendo una query più avanzata, sarà necessario specificare la colonna per eseguire la divisione parallela.
cioè
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 consente di specificare una query ottimizzata per ottenere il max, min. altrimenti tenterà di eseguire MIN (a.id), MAX (a.id) sulla tua istruzione --query.
i risultati saranno (se min = 0, max = 30) è di 3 interrogazioni che vengono eseguite in parallelo:
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;
Siamo spiacenti. Ancora non capisco. Cos'è --split-by? è come, qualcosa a che fare con l'elaborazione del comando? – DrewRose