Ir para conteúdo principal Pular para conteúdo complementar

Adicionando transformações SQL

Você pode incluir tabelas baseadas em SQL em tarefas de transformação. Uma transformação SQL permite inserir uma consulta SQL SELECT em um pipeline para definir transformações complexas ou simples. Você pode permitir que o assistente SQL gere uma consulta a partir de um prompt de texto usando IA generativa. Você também pode usar macros para adaptar a consulta para execução se um carregamento inicial ou um carregamento incremental for executado.

Para obter mais informações sobre como criar uma tarefa de transformação, consulte Transformando dados.

Adicionando uma transformação SQL

Para adicionar uma transformação SQL em uma tarefa de dados Transformar:

  1. Em Transformar, selecione os conjuntos de dados a serem incluídos na consulta e clique em Adicionar transformação SQL.

    Adicionar transformação SQL é exibido onde você pode fornecer configurações para a transformação.

  2. Insira um nome para o conjunto de dados de destino em Nome.

    Você também pode adicionar uma descrição mais longa em Descrição.

  3. Em Materialização, selecione se a saída transformada deve ser materializada ou não. Você pode optar por herdar a configuração das configurações da tarefa de dados.

    • On criará tabelas e tratará do processamento ELT associado.

    • Off criará visualizações que realizam transformações dinamicamente.

  4. A carga incremental permite ajustar a consulta para uma carga de dados incremental aplicando filtros ou outras condições para reduzir o conjunto de dados que está sendo processado usando macros. A carga incremental só estará disponível se os dados forem materializados como tabelas.

    • Quando a Carga incremental está Ativada

      A primeira execução da tarefa realizará um carregamento inicial, inserindo todos os resultados da consulta em sua tabela de destino. As execuções subsequentes executarão cargas incrementais aproveitando filtros ou condições específicas que você definiu para processamento incremental. Durante o carregamento incremental, a tarefa processará dados apenas como uma atualização ou inserção; as exclusões não são gerenciadas.

    • Quando a Carga incremental está Desativada

      A primeira execução da tarefa realizará um carregamento inicial, inserindo todos os resultados da consulta em sua tabela de destino. As execuções subsequentes processarão todos os resultados da consulta comparando com sua tabela de destino e processando registros novos, alterados ou excluídos.

    Nota informativase a consulta selecionar todos os registros que deveriam existir no destino, desative a Carga incremental. Os registros que não forem selecionados serão excluídos do alvo.
  5. Clique em Adicionar quando estiver pronto para criar a transformação SQL.

    Editar transformação SQL é exibido.

  6. Digite a consulta para retornar a tabela baseada em SQL na consulta SELECT.

    A consulta só pode ler os conjuntos de dados de origem selecionados, mas você pode adicionar mais conjuntos de dados de origem com Adicionar.

    Você pode selecionar entre os Conjuntos de dados e Colunas.

    Você também pode usar o assistente SQL para gerar uma consulta usando IA generativa. Para obter mais informações, consulte Gerando uma transformação SQL a partir de um prompt de texto.

  7. Se a carga incremental for usada, você poderá usar Macros para adaptar a consulta para execução se uma carga inicial ou uma carga incremental for executada.

    Para obter mais informações, consulte Usando macros para adaptar a consulta ao tipo de carregamento.

  8. Clique em Extrair parâmetros para analisar os parâmetros na consulta SELECT.

    Os parâmetros devem ser mapeados para os objetos de origem ou de destino. Você pode mapear para

    • Estruturas de histórico tipo 2 (_history)

    • Estruturas atuais

    • Objetos alvo

      Você só pode mapear objetos de destino quando um parâmetro é definido dentro de uma macro incremental.

    Nota de dicaVocê pode substituir um parâmetro por uma referência para ter uma consulta mais fácil de ler. Altere o valor em Parâmetro e a referência na consulta SELECT também será alterada.
  9. Clique em Descrever tabela para obter uma visualização dos metadados de saída da consulta.

    Você também pode visualizar os resultados usando uma amostra dos dados.

    Visualizando dados

  10. Certifique-se de que a tabela tenha uma chave primária.

    Você também pode editar as configurações de metadados.

    • Defina chaves primárias na coluna Chave.

    • Defina se a coluna é anulável na coluna Anulável.

    • Selecione uma coluna e clique em Editar para definir o nome da coluna, chave, anulável e tipo de dados.

  11. Quando estiver satisfeito com os resultados da consulta, clique em OK. O conjunto de dados agora é adicionado à lista de destinos e você pode visualizá-lo.

Visualizando dados

Você pode visualizar os resultados usando uma amostra dos dados.

Nota informativaA visualização de dados deve estar habilitada no nível do locatário no Administração. Você pode encontrar a opção Visualizando dados no Integração de dados em Configurações, em Controle de recursos.

Você deve receber as seguintes funções para poder visualizar dados:

  • Pode visualizar dados no espaço onde reside a conexão.

  • Pode visualizar no espaço onde reside o projeto.

Para visualizar uma pré-visualização dos resultados:

  • Clique em Exibir dados.

Os resultados usando uma amostra dos dados são exibidos. Você pode definir quantas linhas de dados incluir na amostra com Número de linhas.

Você pode filtrar os dados de amostra de duas maneiras:

  • Use filtro para filtrar quais dados de amostra serão recuperados.

    Por exemplo, se você usar o filtro ${OrderYear}>2023 e Número de linhas estiver definido como 10, você obterá uma amostra de 10 pedidos de 2024.

  • Filtre os dados de amostra por uma coluna específica.

    Isso afetará apenas os dados de amostra existentes. Se você usava o filtro para incluir apenas pedidos de 2024 e definia o filtro de coluna para mostrar pedidos de 2022, o resultado seria uma amostra vazia.

Você pode classificar a amostra de dados por uma coluna específica. A classificação afetará apenas os dados de amostra existentes. Se você usava filtro para incluir apenas pedidos de 2024 e inverter a ordem de classificação, os dados de amostra ainda conterão apenas pedidos de 2024.

Usando macros para adaptar a consulta ao tipo de carregamento

Se a carga incremental for usada, você poderá usar Macros para adaptar a consulta para execução se uma carga inicial ou uma carga incremental for executada.

Selecione a macro e adicione a consulta dentro da respectiva cláusula.

  • Q_RUN_INCREMENTAL adiciona uma cláusula em que você pode colocar uma consulta que só é executada quando um carregamento inicial é executado.

  • Q_RUN_INITIAL_LOAD adiciona uma cláusula em que você pode colocar uma consulta que só é executada quando um carregamento inicial é executado.

Não é necessário especificar a consulta completa com cada macro. Você pode ajustar ou adicionar código com base no seu caso de uso.

Caso de uso: filtro incremental usando intervalo de datas:

Neste caso de uso, um conjunto de dados de pedidos precisa ser transformado com SQL personalizado. Como este é um conjunto de dados grande, você deseja incluir filtragem incremental para garantir que a carga incremental considere apenas os pedidos das últimas 12 horas.

Esta é a 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 é o filtro a ser aplicado durante a execução incremental, onde você considera apenas os pedidos que foram adicionados nas últimas 12 horas:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
Nota de dicaAo implementar uma tabela baseada em SQL, é recomendado substituir os nomes das tabelas pela notação ${TABLE}. Isso evita a codificação permanente de bancos de dados e nomes de esquemas que podem mudar de ambiente para ambiente, por exemplo, ao passar do desenvolvimento para a produção.

Esta é a consulta completa, usando a macro de filtro e com os nomes das tabelas substituídos pela notação ${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}}

Isso resulta em uma consulta de carregamento 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

E uma consulta de carregamento 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 usando dados no alvo:

Neste caso de uso, um conjunto de dados de pedidos precisa ser transformado com SQL personalizado. Como os pedidos são um grande conjunto de dados, você deseja incluir filtragem incremental para garantir que a carga incremental considere apenas registros de detalhes do pedido mais recentes que os dados na tabela de destino. Você também deseja marcar se uma linha foi processada pelo carregamento inicial ou por um carregamento incremental.

Nota informativaComo você pode ver neste exemplo, as macros podem ser usadas para ajustar qualquer parte da consulta para carregamento inicial ou carregamento incremental.

Esta é a 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 é o filtro a ser aplicado durante a execução incremental. “ORDERS_DERIVED” é o nome do conjunto de dados de destino.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”.”myTrasformTask”.”ORDERS_DERIVED” )
Nota de dicaO carregamento incremental também pode mapear uma notação ${TABLE} para os objetos de destino criados pela tarefa de transformação.

Esta é a consulta completa, usando a macro de filtro e com os nomes das tabelas substituídos pela notação ${TABLE}. LOADED_BY é definido como INIT se o carregamento for inicial e INCR se o carregamento for 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}}

Isso resulta em uma consulta de carregamento 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

E uma consulta de carregamento 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ática recomendada

  • Quando você adiciona uma transformação SQL, uma chave primária não é definida automaticamente. Adicione uma chave ao conjunto de dados na guia Conjunto de dados.

  • Não crie cabeçalhos de coluna na saída transformada manualmente.

  • Evite usar SELECT com *, pois isso pode retornar colunas diferentes todas as vezes que a consulta for executada. Se houve alteração no esquema, altere a consulta de acordo e execute Descrever tabela de novo. Em seguida, você poderá editar colunas e ajustar tabelas.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!