Sqoop richiede l'accesso ai metadati della tabella, ad esempio informazioni sul tipo di colonna. Placeholder $ CONDITIONS è impostato di default su '1 = 0' per garantire che sqoop riceva solo informazioni sul tipo. Quindi, dopo aver eseguito il comando sqoop, vedrai che la prima query che viene generata è con $ CONDITIONS predefinite. Successivamente, viene sostituito da valori diversi che definiscono intervalli diversi in base al numero di mapper (-m) o --split-by column o --boundary-query in modo che l'intero set di dati possa essere diviso in diverse sezioni di dati o blocchi e blocchi può essere importato in parallelo con tanto quanto la concorrenza disponibile. Sqoop sostituirà automaticamente questo segnaposto con le condizioni generate specificando quale porzione di dati deve essere trasferita da ogni singola attività
Ad esempio, si consideri la tabella sample_data con nome di colonne, id e salario. Si desidera recuperare i record con lo stipendio> 1k.
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba --password cloudera \
--query 'select * from sample_data where $CONDITIONS AND salary > 1000' \
--split-by salary \
--target-dir hdfs://quickstart.cloudera/user/cloudera/sqoop_new
Di seguito è la prima query che restituisce il set vuoto.
SqlManager: Executing SQL statement: select * from sample_data where (1 = 0) AND salary > 1000
Quindi la query successiva è ottenere min e max di intervallo.
INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(salary), MAX(salary) FROM (select * from sample_data where (1 = 1) AND salary > 1000) AS t1;
fonte
2016-12-30 09:16:20
'E \ $ CONDITIONS' è necessario se si è chiusa la query in doppia citazioni. altrimenti usa 'E $ CONDIZIONI' –