hadoop - español - ¿Cómo podemos automatizar la importación incremental en SQOOP?
sqoop import table mysql (3)
Puede aprovechar el metastore Sqoop incorporado
Puede crear un trabajo de importación incremental simple con el siguiente comando:
trabajo sqoop / --create <> / - / import / --connect <> / --username <> / --password <> / --table <> / --incremental append / --check - <> / --last-value 0
Y comience con el parámetro --exec:
sqoop job --exec <<Job Name>>
Sqoop serializará automáticamente el último valor importado en el metastore después de cada trabajo incremental exitoso
¿Cómo podemos automatizar la importación incremental en SQoop?
En la importación incremental, tenemos que dar el --last-value
para comenzar la importación desde el último valor en adelante, pero mi trabajo es importar con frecuencia de RDBMS, no quiero dar el último valor manualmente, ¿hay alguna manera de puede automatizar este proceso?
Un enfoque alternativo a la respuesta de @Durga Viswanath Gadiraju.
En caso de que esté importando los datos a una tabla de colmenas, podría consultar el último valor actualizado de la tabla de colmenas y pasar el valor a la consulta de importación de sqoop. Puede usar el script de shell o las acciones de oozie para lograr esto.
Script de Shell:
lastupdatedvalue=`hive -e ''select last_value from table` #tweak the selection query based on the logic.
sqoop import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${lastupdatedvalue}
Enfoque Oozie:
- Acción de colmena para la consulta de selección basada en la lógica para recuperar el último valor actualizado.
- Acción de Sqoop para la carga incremental de la salida capturada de la acción de la colmena anterior.
PFB a sudo flujo de trabajo:
<workflow-app name="sqoop-to-hive" xmlns="uri:oozie:workflow:0.4">
<start to="hiveact"/>
<action name="hiveact">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<script>script.sql</script>
<capture-output/>
</hive>
<ok to="sqoopact"/>
<error to="kill"/>
<action name="sqoopact">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<command>import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${wf:actionData(''hiveact'')}</command>
</sqoop>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed</message>
</kill>
<end name="end"/>
Espero que esto ayude.
Una forma de obtenerlo:
Cree la tabla de registro en la base de datos y desarrolle la importación incremental de la siguiente manera
Query the log table using sqoop eval command with the last value from last run
Run the sqoop import
Update the log table with the latest valueusing sqoop eval command
Necesita automatizar el proceso de sqoop eval
de sqoop eval
, sqoop import
sqoop eval
y sqoop eval
. Puede enviar cualquier consulta válida a cualquier base de datos que tenga conectividad utilizando sqoop eval
. Por lo tanto, puede ejecutar la consulta de selección antes de la importación para obtener el último valor de la última ejecución y ejecutar la consulta de actualización para actualizar la tabla de registro con el último valor de la ejecución actual.