Sqoop nos ofrece la posibilidad de fusionar dos conjuntos de datos o datasets en un único dataset. Supongamos que realizamos una importación desde SQL Server a HDFS, esta importación se guardará en un directorio en HDFS, y luego realizamos una carga incremental sobre la misma tabla, la carga incremental la deberemos guardar en un directorio distinto ya que sino sobrescribiremos los datos importados anteriormente. Bien, entonces tenemos dos directorios en HDFS con los datos de la tabla, es en este escenario es cuando resulta de especial interés la utilización de la herramienta Sqoop merge, para poder fusionar los datos de los directorios HDFS en uno sólo.Las opciones de la herramienta Sqoop merge son las siguientes:–class-file: especifica el nombre de la clase con la definición de las filas que se usará para realizar la fusión

–jar-file:  especifica el nombre del jar que contiene la definición de la clases

–merge-key: nombre de la columna por la cual se hará la fusión (normalmente la clave primaria)

–new-data: especifica la ruta los datos más recientes que se han importado

–onto: especifica la ruta a los datos más antiguos que se han importado

–target-dir: especifica el directorio donde se realizará la fusión.

 

Para ver el ejemplo, partimos de la premisa que hemos realizado una importación desde SQL Server a HDFS de una tabla llamada “Orders” (leer más información sobre Importación de datos desde SQL Server a HDFS),  posteriormente se han insertado nuevas filas en el origen, y realizamos nuevamente una importación pero esta vez incremental para obtener las filas nuevas insertadas en el origen. Tendremos dos directorios:

/user/hadoop/sqoop/orders : directorio en HDFS con el contenido de la tabla importada

/user/hadoop/sqoop/ordersincremental : directorio en HDFS con las nuevas filas importadas

Ahora utilizamos la herramienta Sqoop merge para fusionar ambos datasets. La sentencia sería la siguiente:

sqoop merge --new-data /user/hadoop/sqoop/ordersincremental --onto /user/hadoop/sqoop/orders --merge-key OrderID --target-dir /user/hadoop/sqoop/ordersmerge --jar-file tmpsqoop-Administratorcompileac68dd63ba1b24e832d77ce1654c30eOrders.jar --class-name Orders

 

Una aclaración sobre los parámetros –jar-file y –class-name. Cuando se realiza una importación se crea un archivo jar que contiene la definición de las columnas y sus tipos de datos, dicho jar puede contener una o más clases pertenecientes a las tablas importadas. Este archivo jar se genera mediante el conector JDBC entre SQL Server y Hadoop, pero en este caso en la herramienta Sqoop merge no se requiere el parámetro de la conexión a SQL Server (o a otro origen RDBMS), por lo tanto debemos especificar la ruta del archivo jar para poder obtener la especificación de la tabla. Esta ruta se consigue de dos formas, bien en la salida de la última importación que se ha realizado, es decir, la carga incremental, o bien podemos generar el jar manualmente mediante la herramienta Sqoop codegen.

En la siguiente imagen podéis ver cómo obtener la ruta, cuando se ha realizado la importación incremental:

image_thumb_67241203

O bien podéis generar el jar mediante la herramienta codegen, la instrucción sería la siguiente (Sustituid SERVERNAME por el nombre del servidor e INSTANCENAME por el nombre de vuestra instancia de SQL Server):

sqoop codegen --connect "jdbc:sqlserver://SERVERNAMEINSTANCENAME:1433;database=northwind;integratedSecurity=true" --table "Orders"

La salida sería la siguiente donde podréis obtener también el jar.

image_thumb_1_52328F90

Tened en cuenta que se trata de directorios temporales, por lo que cada vez que se ha realiza una importación este directorio se sobrescribe.

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like

Excel conectado a Analysis Services y la propiedad MDX Missing Member Mode

Encontramos muchas veces Excel como herramienta que los usuarios utilizan para pre cocinar datos, crearse informes, navegar cubos… En esta entrada voy a compartir una experiencia reciente, en un escenario en el que Excel es la aplicación cliente para mostrar datos de un cubo, algo bastante común. Lo que no resulta tan común es Excel muestre un error cuando puedo ejecutar la misma consulta MDX en SQL Server Management Studio.
Leer más

Operador unario y jerarquías padre-hijo en SSAS MD

Recientemente nos hemos visto involucrados en un proyecto SSAS Multidimensional en el que existía una dimensión de cuentas padre-hijo bastante compleja y con un operador unario por en medio. Es por esto que nos hemos decidido a describir brevemente la implementación por defecto de SSAS y la que utilizamos finalmente para mejorar el rendimiento.
Leer más

Extended support. Pan para hoy, hambre para mañana.

Este año 2020 va a representar un reto importante para muchas organizaciones desde el punto de vista de actualizaciones/renovaciones. El soporte extendido de SQL Server 2008 terminaba el pasado 9 de Julio de 2019 y hoy 14 de Enero de 2020 termina el de Windows Server 2008 y 2008 R2. Muchas empresas son conscientes del fin de soporte y a pesar de ello, aún no tienen prevista la migración por lo que probablemente deba ser abordada en breve y con cierta urgencia (escanario ideal).