Saltar al contenido principal Saltar al contenido complementario

Agregar transformaciones SQL

Puede incluir tablas basadas en SQL en tareas de transformación. Una transformación SQL le permite insertar una consulta SQL SELECT en una canalización para definir transformaciones complejas o simples. También puede utilizar macros para adaptar la consulta para que se ejecute si se realiza una carga inicial o incremental.

Para más información sobre crear una tarea de transformación, vea Transformar datos.

Agregar una transformación SQL

Para añadir una transformación SQL en una tarea de datos mediante Transformar:

  1. En Transformar, seleccione los conjuntos de datos que desee incluir en la consulta y haga clic en Agregar transformación SQL.

    Se muestra Agregar transformación SQL, donde puede configurar los parámetros de la transformación.

  2. Indique un nombre para el conjunto de datos de destino en Nombre.

    También puede agregar una descripción más extensa en Descripción.

  3. En Materialización, seleccione si la salida transformada deberá materializarse o no. Puede optar por heredar las opciones de configuración de la tarea de datos.

    • Activado creará tablas y gestionará el procesamiento ELT asociado.

    • Desactivado creará vistas que realizarán transformaciones sobre la marcha.

  4. La carga incremental le permite ajustar la consulta para una carga de datos incremental mediante la aplicación de filtros u otras condiciones para reducir el conjunto de datos que se procesan mediante macros. La carga incremental solo está disponible si los datos se materializan como tablas.

    • Cuando la carga incremental está activa

      La primera ejecución de la tarea realizará una carga inicial, insertando todos los resultados de la consulta en su tabla de destino. Las ejecuciones posteriores ejecutarán cargas incrementales aprovechando filtros o condiciones específicas que haya definido para el procesamiento incremental. Durante la carga incremental, la tarea sólo procesará datos como una actualización o una inserción; las eliminaciones no se administran.

    • Cuando la carga incremental está desactivada

      La primera ejecución de la tarea realizará una carga inicial, insertando todos los resultados de la consulta en su tabla de destino. Las ejecuciones posteriores procesarán todos los resultados de la consulta comparándolos con su tabla de destino y procesando registros nuevos, modificados o eliminados.

    Nota informativaDesactive la carga incremental si la consulta seleccionará todos los registros que deberían existir en el destino. Los registros que no estén seleccionados se eliminarán en el destino.
  5. Haga clic en Agregar cuando esté listo para crear la transformación SQL.

    Se muestra Editar transformación SQL.

  6. Escriba la consulta para devolver la tabla basada en SQL en SELECT query.

    La consulta solo puede leer de los conjuntos de datos de origen que haya seleccionado, pero puede añadir más conjuntos de datos de origen con Agregar.

    Puede seleccionar entre Conjuntos de datos y Columnas.

  7. Si se utiliza una carga incremental, puede usar macros para adaptar la consulta para que se ejecute si se realiza una carga inicial o una carga incremental.

    Para más información, vea Utilizar macros para adaptar la consulta al tipo de carga.

  8. Haga clic en Extraer parámetros para analizar los parámetros en la consulta SELECT.

    Los parámetros deben asignarse a los objetos de origen o de destino. Puede asignarlas a

    • Estructuras de historial tipo 2 (_history)

    • Estructuras actuales

    • Objetos de destino

      Solo puede asignar objetos de destino cuando se define un parámetro dentro de una macro incremental.

    Nota de sugerenciaPuede reemplazar un parámetro con una referencia para tener una consulta que sea más fácil de leer. Cambie el valor en Parámetro y la referencia en SELECT query también cambiará.
  9. Haga clic en Describir tabla para obtener una vista previa de los metadatos de salida de la consulta.

    Puede obtener una vista previa de los resultados utilizando una muestra de los datos.

    Vista previa de los datos

  10. Asegúrese de que la tabla tenga una clave principal.

    También puede editar la configuración de metadatos.

    • Establezca las claves principales en la columna Clave.

    • Defina si la columna admite nulos en la columna Anulable.

    • Seleccione una columna y haga clic en Editar para establecer el nombre de la columna, la clave, los valores anulables y el tipo de datos.

  11. Cuando esté satisfecho con los resultados de la consulta, haga clic en Aceptar. El conjunto de datos ahora se agrega a la lista de conjuntos de datos y puede obtener una vista previa.

Vista previa de los datos

Puede obtener una vista previa de los resultados utilizando una muestra de los datos.

Nota informativaLa vista previa de datos debe estar habilitada a nivel de espacio empresarial inquilino en Consola de gestión de Qlik. Encontrará la opción Ver datos enIntegración de datos en Configuración, en Control de funciones.

Debe tener asignados los siguientes roles para poder acceder a una vista previa de los datos:

  • Puede ver datos en el espacio donde reside la conexión de datos.

  • Puede ver en el espacio donde reside el proyecto de datos.

Para ver una vista previa de los resultados:

  • Haga clic en Ver datos.

Se muestran los resultados utilizando una muestra de los datos. Puede establecer cuántas filas de datos incluir en la muestra con Número de filas.

Puede filtrar los datos de muestra de dos maneras:

  • Usar Filtrar para filtrar qué datos de muestra recuperar.

    Por ejemplo, si utiliza el filtro ${OrderYear}>2023 y Número de filas se establece en 10, obtendrá una muestra de 10 pedidos de 2024.

  • Filtrar los datos de la muestra por una columna específica.

    Esto sólo afectará a los datos de muestra existentes. Si usó Filtrar para incluir únicamente pedidos de 2024 y establece el filtro de columna para mostrar pedidos a partir de 2022, el resultado es una muestra vacía.

Puede ordenar la muestra de datos por una columna específica. La ordenación sólo afectará a los datos de muestra existentes. Si utilizó Filtrar para incluir únicamente pedidos de 2024 e invierte el orden de clasificación, los datos de muestra seguirán conteniendo sólo pedidos de 2024.

Utilizar macros para adaptar la consulta al tipo de carga

Si se utiliza una carga incremental, puede usar macros para adaptar la consulta para que se ejecute si se realiza una carga inicial o una carga incremental.

Seleccione la macro y agregue la consulta dentro de la cláusula respectiva.

  • Q_RUN_INCREMENTAL agrega una cláusula donde puede colocar una consulta que solo se ejecuta cuando se realiza una carga incremental.

  • Q_RUN_INITIAL_LOAD agrega una cláusula donde puede colocar una consulta que solo se ejecuta cuando se realiza una carga inicial.

No es necesario especificar la consulta completa con cada macro. Puede ajustar o agregar código según su caso de uso.

Caso de uso: Filtro incremental usando rango de fechas:

En este uso específico, es necesario transformar un conjunto de datos de pedidos con SQL personalizado. Dado que se trata de un conjunto de datos grande, desea incluir un filtrado incremental para garantizar que la carga incremental solo considere los pedidos de las últimas 12 horas.

Esta es la consulta base:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Este es el filtro que se aplicará durante la ejecución incremental, donde solo se consideran los pedidos que se agregaron en las últimas 12 horas:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
Nota de sugerenciaAl implementar una tabla basada en SQL, se recomienda reemplazar los nombres de las tablas con la notación ${TABLE}. Esto evita codificar nombres de esquemas y bases de datos que pueden cambiar de un entorno a otro, por ejemplo, al pasar del desarrollo a la producción.

Esta es la consulta completa, usando la macro de filtro y con los nombres de las tablas reemplazados por la notación ${TABLE}:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

Esto da como resultado una consulta de carga inicial:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

Y una consulta de carga incremental:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

Caso de uso: Filtro incremental utilizando datos en el destino:

En este uso específico, es necesario transformar un conjunto de datos de pedidos con SQL personalizado. Dado que los pedidos constituyen un conjunto de datos extenso, deseamos incluir filtrado incremental para garantizar que la carga incremental solo considere los registros de detalles del pedido que sean más recientes que los datos de la tabla de destino. También deseamos marcar si una fila fue procesada por la carga inicial o una carga incremental.

Nota informativaComo puede ver en este ejemplo, las macros se pueden usar para ajustar cualquier parte de la consulta para carga inicial o carga incremental.

Esta es la consulta base:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Este es el filtro que se aplicará durante la ejecución incremental. “ORDERS_DERIVED” es el nombre del conjunto de datos de destino.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
Nota de sugerenciaLa carga incremental también puede asignar una notación ${TABLE} a los objetos de destino creados por la tarea de transformación.

Esta es la consulta completa, que utiliza la macro de filtro y con los nombres de las tablas reemplazados por la notación {TABLE}. LOADED_BY se establece en INIT si la carga es inicial y en INCR si la carga es incremental:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

Esto da como resultado una consulta de carga inicial:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

Y una consulta de carga incremental:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

Prácticas recomendadas

  • Cuando agrega una transformación SQL, la clave principal no se define automáticamente. Agregue una clave al conjunto de datos en la pestaña Conjunto de datos.

  • No cree encabezados de columna en el resultado de salida transformado manualmente.

  • Evite usar SELECT con *, ya que esto puede hacer que devuelva columnas diferentes cada vez que se ejecuta la consulta. Si hubo un cambio en el esquema, cambie la consulta de manera acorde y ejecute Describir la tabla de nuevo. A continuación ya puede editar las columnas y ajustar las tablas.

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.