Transformar dados usando a atividade Script no Azure Data Factory ou Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Você usa atividades de transformação de dados em um pipeline do Data Factory ou Synapse para transformar e processar dados brutos em previsões e insights. A atividade Script é uma das atividades de transformação suportadas pelos pipelines. Este artigo baseia-se no artigo de transformação de dados, que apresenta uma visão geral da transformação de dados e das atividades de transformação suportadas.

Usando a atividade de script, você pode executar operações comuns com DML (Data Manipulation Language) e DDL (Data Definition Language). Instruções DML como INSERT, UPDATE, DELETE e SELECT permitem que os usuários insiram, modifiquem, excluam e recuperem dados no banco de dados. Instruções DDL como CREATE, ALTER e DROP permitem que um gerenciador de banco de dados crie, modifique e remova objetos de banco de dados, como tabelas, índices e usuários.

Você pode usar a atividade Script para invocar um script SQL em um dos seguintes armazenamentos de dados em sua empresa ou em uma máquina virtual (VM) do Azure:

  • Base de Dados SQL do Azure
  • Azure Synapse Analytics
  • Banco de dados SQL Server. Se você estiver usando o SQL Server, instale o tempo de execução de integração auto-hospedado na mesma máquina que hospeda o banco de dados ou em uma máquina separada que tenha acesso ao banco de dados. O tempo de execução de integração auto-hospedado é um componente que conecta fontes de dados locais/na VM do Azure com serviços de nuvem de forma segura e gerenciada. Consulte o artigo Self-hosted integration runtime para obter detalhes.
  • Oracle
  • Snowflake

O script pode conter uma única instrução SQL ou várias instruções SQL que são executadas sequencialmente. Você pode usar a tarefa Script para as seguintes finalidades:

  • Truncar uma tabela em preparação para inserir dados.
  • Crie, altere e solte objetos de banco de dados, como tabelas e exibições.
  • Recrie tabelas de fatos e dimensões antes de carregar dados nelas.
  • Execute procedimentos armazenados. Se a instrução SQL invocar um procedimento armazenado que retorna resultados de uma tabela temporária, use a opção WITH RESULT SETS para definir metadados para o conjunto de resultados.
  • Salve o conjunto de linhas retornado de uma consulta como saída de atividade para consumo downstream.

Detalhes da sintaxe

Aqui está o formato JSON para definir uma atividade de script:

{ 
   "name": "<activity name>", 
   "type": "Script", 
   "linkedServiceName": { 
      "referenceName": "<name>", 
      "type": "LinkedServiceReference" 
    }, 
   "typeProperties": { 
      "scripts" : [ 
         { 
            "text": "<Script Block>", 
            "type": "<Query> or <NonQuery>", 
            "parameters":[ 
               { 
                  "name": "<name>", 
                  "value": "<value>", 
                  "type": "<type>", 
                  "direction": "<Input> or <Output> or <InputOutput>", 
                  "size": 256 
               }, 
               ... 
            ] 
         }, 
         ... 
      ],     
         ... 
         ] 
      }, 
      "scriptBlockExecutionTimeout": "<time>",  
      "logSettings": { 
         "logDestination": "<ActivityOutput> or <ExternalStore>", 
         "logLocationSettings":{ 
            "linkedServiceName":{ 
               "referenceName": "<name>", 
               "type": "<LinkedServiceReference>" 
            }, 
            "path": "<folder path>" 
         } 
      } 
    } 
} 

A tabela a seguir descreve essas propriedades JSON:

Property name Description Obrigatório
nome O nome da atividade. Sim
tipo O tipo de atividade, definido como "Script". Sim
typeProperties Especifique as propriedades para configurar a Atividade de Script. Sim
linkedServiceName O banco de dados de destino no qual o script é executado. Deve ser uma referência a um serviço ligado. Sim
scripts Uma matriz de objetos para representar o script. Não
scripts.texto O texto simples de um bloco de consultas. Não
scripts.type O tipo do bloco de consultas. Pode ser Query ou NonQuery. Padrão: Consulta. Não
scripts.parâmetro A matriz de parâmetros do script. Não
scripts.parameter.name O nome do parâmetro. Não
scripts.parâmetro.value O valor do parâmetro. Não
scripts.parameter.type O tipo de dados do parâmetro. O tipo é lógico e segue o mapeamento de tipo de cada conector. Não
scripts.parameter.direction A direção do parâmetro. Pode ser Input, Output, InputOutput. O valor será ignorado se a direção for Output. O tipo ReturnValue não é suportado. Defina o valor de retorno do SP como um parâmetro de saída para recuperá-lo. Não
scripts.parâmetro.size O tamanho máximo do parâmetro. Aplica-se apenas ao parâmetro de direção Output/InputOutput do tipo string/byte[]. Não
scriptBlockExecutionTimeout O tempo de espera para que a operação de execução do bloco de script seja concluída antes que ela atinja o tempo limite. Não
logSettings As configurações para armazenar os logs de saída. Se não for especificado, o log de script será desabilitado. Não
logSettings.logDestino O destino da saída de log. Pode ser ActivityOutput ou ExternalStore. Padrão: ActivityOutput. Não
logSettings.logLocationSettings As configurações do local de destino se logDestination for ExternalStore. Não
logSettiongs.logLocationSettings.linkedServiceName O serviço vinculado do local de destino. Apenas o armazenamento de blob é suportado. Não
logSettings.logLocationSettings.path O caminho da pasta sob a qual os logs serão armazenados. Não

Resultados da atividade

Saída de exemplo:

{ 
    "resultSetCount": 2, 
    "resultSets": [ 
        { 
            "rowCount": 10, 
            "rows":[ 
                { 
                    "<columnName1>": "<value1>", 
                    "<columnName2>": "<value2>", 
                    ... 
                } 
            ] 
        }, 
        ... 
    ], 
    "recordsAffected": 123, 
    "outputParameters":{ 
        "<parameterName1>": "<value1>", 
        "<parameterName2>": "<value2>" 
    }, 
    "outputLogs": "<logs>", 
    "outputLogsLocation": "<folder path>", 
    "outputTruncated": true, 
    ... 
} 
Property name Description Condição
resultSetCount A contagem de conjuntos de resultados retornados pelo script. Sempre
resultSets A matriz que contém todos os conjuntos de resultados. Sempre
resultSets.rowCount Total de linhas no conjunto de resultados. Sempre
resultSets.rows A matriz de linhas no conjunto de resultados. Sempre
registrosAfetados A contagem de linhas afetadas pelo script. Se scriptType for NonQuery.
outputParameters Os parâmetros de saída do script. Se o tipo de parâmetro for Output ou InputOutput.
outputLogs Os logs escritos pelo script, por exemplo, print statement. Se connector suportar a instrução log e enableScriptLogs for true e logLocationSettings não for fornecido.
outputLogsPath O caminho completo do arquivo de log. Se enableScriptLogs for true e logLocationSettings for fornecido.
outputTruncado Indicador de se a saída excede os limites e fica truncada. Se a saída exceder os limites.

Nota

  • A saída é coletada toda vez que um bloco de script é executado. A saída final é o resultado mesclado de todas as saídas de bloco de script. O parâmetro de saída com o mesmo nome em um bloco de script diferente será substituído.
  • Uma vez que a saída tem limitação de tamanho / linhas, a saída será truncada na seguinte ordem: logs - parâmetros ->> linhas. Observe que isso se aplica a um único bloco de script, o que significa que as linhas de saída do próximo bloco de script não removerão logs anteriores.
  • Qualquer erro causado pelo log não falhará na atividade.
  • Para consumir resultados de saída de atividadeDefine em atividade a jusante, consulte a documentação de resultados da atividade de pesquisa.
  • Use outputLogs quando estiver usando instruções 'PRINT' para fins de registro. Se a consulta retornar resultSets, ela estará disponível na saída da atividade e será limitada a 5000 linhas / limite de tamanho de 4MB.

Configurar a atividade de script usando a interface do usuário

Script embutido

Screenshot showing the UI to configure an inline script.

Os scripts embutidos integram-se bem com o Pipeline CI/CD, uma vez que o script é armazenado como parte dos metadados do pipeline.

Registo

Screenshot showing the UI for the logging settings for a script.

Opções de registo:

  • Desativar - Nenhuma saída de execução é registrada.
  • Saída da atividade - A saída da execução do script é anexada à saída da atividade. Pode ser consumido por atividades a jusante. O tamanho da saída é limitado a 4MB.
  • Armazenamento externo - Persiste a saída para o armazenamento. Use esta opção se o tamanho da saída for maior que 2MB ou se você quiser persistir explicitamente a saída em sua conta de armazenamento.

Nota

Faturamento - A atividade de Script será cobrada como atividades de Pipeline.

Consulte os seguintes artigos que explicam como transformar dados de outras maneiras: