Partilhar via


Copiar e transformar dados no Snowflake V2 usando o Azure Data Factory ou o Azure 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!

Este artigo descreve como usar a atividade Copiar no Azure Data Factory e nos pipelines do Azure Synapse para copiar dados de e para o Snowflake e usar o Fluxo de Dados para transformar dados no Snowflake. Para obter mais informações, consulte o artigo introdutório do Data Factory ou do Azure Synapse Analytics.

Importante

O conector Snowflake V2 fornece suporte nativo melhorado para Snowflake. Se você estiver usando o conector Snowflake V1 em sua solução, é recomendável atualizar seu conector Snowflake antes de 30 de junho de 2025. Consulte esta seção para obter detalhes sobre a diferença entre V2 e V1.

Capacidades suportadas

Este conector Snowflake é suportado para as seguintes funcionalidades:

Capacidades suportadas Imposto de Renda
Atividade de cópia (origem/destino) (1) (2)
Mapeamento do fluxo de dados (origem/destino) (1)
Atividade de Pesquisa (1) (2)
Atividade de script (Aplicar a versão 1.1 (Visualização) quando se utiliza o parâmetro script) (1) (2)

(1) Tempo de execução de integração do Azure (2) Tempo de execução de integração auto-hospedado

Para a atividade Copiar, este conector Snowflake suporta as seguintes funções:

  • Copie dados do Snowflake que utilizam o comando COPY do Snowflake para [location] para obter o melhor desempenho.
  • Copie dados para o Snowflake que aproveita o comando COPY do Snowflake para [table] para obter o melhor desempenho. Ele suporta Snowflake no Azure.
  • Se um proxy for necessário para se conectar ao Snowflake a partir de um Integration Runtime auto-hospedado, você deverá configurar as variáveis de ambiente para HTTP_PROXY e HTTPS_PROXY no host do Integration Runtime.

Pré-requisitos

Se seu armazenamento de dados estiver localizado dentro de uma rede local, uma rede virtual do Azure ou a Amazon Virtual Private Cloud, você precisará configurar um tempo de execução de integração auto-hospedado para se conectar a ele. Certifique-se de adicionar os endereços IP que o runtime de integração auto-hospedado usa à lista permitida.

Se o seu armazenamento de dados for um serviço de dados de nuvem gerenciado, você poderá usar o Tempo de Execução de Integração do Azure. Se o acesso for restrito a IPs aprovados nas regras de firewall, pode adicionar IPs do Azure Integration Runtime à lista de permissões.

A conta Snowflake usada para Source ou Sink deve ter o acesso necessário USAGE no banco de dados e acesso de leitura/gravação no esquema e nas tabelas/exibições sob ele. Além disso, ele também deve ter CREATE STAGE no esquema para ser capaz de criar o estágio externo com SAS URI.

Os seguintes valores de propriedades de conta devem ser definidos

Propriedade Descrição Necessário Predefinição
EXIGIR INTEGRAÇÃO DE ARMAZENAMENTO PARA CRIAÇÃO DE ESTÁGIO Especifica se um objeto de integração de armazenamento deve ser exigido como credenciais de nuvem ao criar um estágio externo nomeado (usando CREATE STAGE) para acessar um local de armazenamento em nuvem privada. FALSO FALSO
NECESSÁRIO INTEGRAR ARMAZENAMENTO PARA OPERAÇÃO DE FASE Especifica se deve ser necessário usar um estágio externo nomeado que faça referência a um objeto de integração de armazenamento como credenciais de nuvem ao carregar ou descarregar dados de um local de armazenamento em nuvem privada. FALSO FALSO

Para obter mais informações sobre os mecanismos de segurança de rede e as opções suportadas pelo Data Factory, consulte Estratégias de acesso a dados.

Começar agora

Para executar a atividade Copiar com um pipeline, você pode usar uma das seguintes ferramentas ou SDKs:

Criar um serviço vinculado ao Snowflake usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado ao Snowflake na interface do usuário do portal do Azure.

  1. Navegue até a guia Gerenciar em seu espaço de trabalho do Azure Data Factory ou Synapse e selecione Serviços Vinculados e clique em Novo:

  2. Procure por Snowflake e selecione o conector Snowflake.

    Screenshot do conector Snowflake.

  3. Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.

    Captura de tela da configuração do serviço vinculado para Snowflake.

Detalhes de configuração do conector

As seções a seguir fornecem detalhes sobre propriedades que definem entidades específicas para um conector Snowflake.

Propriedades do serviço vinculado

Estas propriedades genéricas são suportadas para o serviço vinculado Snowflake:

Propriedade Descrição Necessário
tipo A propriedade type deve ser definida como SnowflakeV2. Sim
versão A versão que especificares. Recomendo atualizar para a versão mais recente para aproveitar os aprimoramentos mais recentes. Sim para a versão 1.1 (Pré-visualização)
identificador de conta O nome da conta juntamente com a sua organização. Por exemplo, myorg-account123. Sim
base de dados O banco de dados padrão usado para a sessão após a conexão. Sim
armazém O armazém virtual padrão usado para a sessão após a conexão. Sim
tipo de autenticação Tipo de autenticação usado para se conectar ao serviço Snowflake. Os valores permitidos são: Basic (Default) e KeyPair. Consulte as seções correspondentes abaixo sobre mais propriedades e exemplos, respectivamente. Não
função A função de segurança padrão usada para a sessão após a conexão. Não
anfitrião O nome do host da conta Snowflake. Por exemplo: contoso.snowflakecomputing.com. .cn também é suportado. Não
ConecteVia O integration runtime que é usado para se conectar ao repositório de dados. Você pode usar o tempo de execução de integração do Azure ou um tempo de execução de integração auto-hospedado (se seu armazenamento de dados estiver localizado em uma rede privada). Se não for especificado, ele usará o tempo de execução de integração padrão do Azure. Não

Este conector Snowflake suporta os seguintes tipos de autenticação. Consulte as seções correspondentes para obter detalhes.

Autenticação básica

Para usar a autenticação básica , além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:

Propriedade Descrição Necessário
Utilizador Nome de login para o usuário do Snowflake. Sim
palavra-passe A senha para o usuário do Snowflake. Marque este campo como um tipo SecureString para armazená-lo com segurança. Você também pode fazer referência a um segredo armazenado no Cofre da Chave do Azure. Sim

Exemplo:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "role": "<role>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Palavra-passe no Cofre de Chaves do Azure:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                }, 
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Autenticação de par de chaves

Para usar a autenticação de par de chaves, você precisa configurar e criar um usuário de autenticação de par de chaves no Snowflake consultando Autenticação de par de chaves & Rotação de par de chaves. Depois, anote a chave privada e a senha (opcional), que você usa para definir o serviço vinculado.

Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:

Propriedade Descrição Necessário
Utilizador Nome de login para o usuário do Snowflake. Sim
chave privada A chave privada usada para a autenticação do par de chaves.

Para garantir que a chave privada seja válida quando enviada para o Azure Data Factory, e considerando que o arquivo privateKey inclui caracteres de nova linha (\n), é essencial formatar corretamente o conteúdo privateKey em sua forma literal de cadeia de caracteres. Esse processo envolve a adição de \n explicitamente a cada nova linha.
Sim
frase-passe da chave privada A frase secreta usada para desencriptar a chave privada, se estiver encriptada. Não

Exemplo:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "KeyPair",
            "user": "<username>",
            "privateKey": {
                "type": "SecureString",
                "value": "<privateKey>"
            },
            "privateKeyPassphrase": { 
                "type": "SecureString",
                "value": "<privateKeyPassphrase>"
            },
            "role": "<role>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Nota

Para mapear fluxos de dados, recomendamos gerar uma nova chave privada RSA usando o padrão PKCS#8 no formato PEM (arquivo .p8).

Propriedades do conjunto de dados

Para obter uma lista completa de seções e propriedades disponíveis para definir conjuntos de dados, consulte o artigo Conjuntos de dados.

As propriedades a seguir são suportadas para o conjunto de dados Snowflake.

Propriedade Descrição Necessário
tipo A propriedade type do conjunto de dados deve ser definida como SnowflakeV2Table. Sim
esquema Nome do esquema. Observe que o nome do esquema diferencia maiúsculas de minúsculas. Não para a fonte, sim para a pia
mesa Nome da tabela/vista. Observe que o nome da tabela diferencia maiúsculas de minúsculas. Não para a fonte, sim para a pia

Exemplo:

{
    "name": "SnowflakeV2Dataset",
    "properties": {
        "type": "SnowflakeV2Table",
        "typeProperties": {
            "schema": "<Schema name for your Snowflake database>",
            "table": "<Table name for your Snowflake database>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

Propriedades da atividade de copiar

Para obter uma lista completa de seções e propriedades disponíveis para definir atividades, consulte o artigo Pipelines . Esta seção fornece uma lista de propriedades suportadas pela fonte e pelo coletor de flocos de neve.

Floco de neve como fonte

O conector Snowflake utiliza o comando do Snowflake COPY into [location] para obter o melhor desempenho.

Se o armazenamento de dados e o formato do coletor forem suportados nativamente pelo comando Snowflake COPY, você poderá usar a atividade Copiar para copiar diretamente do Snowflake para o sink. Para obter detalhes, consulte Cópia direta do Snowflake. Caso contrário, use a cópia Staged interna do Snowflake.

Para copiar dados do Snowflake, as seguintes propriedades são suportadas na secção source da atividade de cópia.

Propriedade Descrição Necessário
tipo A propriedade type da fonte de atividade Copy deve ser definida como SnowflakeV2Source. Sim
consulta Especifica a consulta SQL para ler dados do Snowflake. Se os nomes do esquema, da tabela e das colunas contiverem minúsculas, cite o identificador do objeto na consulta, por exemplo. select * from "schema"."myTable"
Não há suporte para a execução de procedimento armazenado.
Não
configurações de exportação Configurações avançadas usadas para recuperar dados do Snowflake. Você pode configurar os suportados pelo comando COPY into que o serviço passará quando você invocar a instrução. Sim
Em exportSettings:
tipo O tipo de comando export, definido como SnowflakeExportCopyCommand. Sim
storageIntegração Especifique o nome da integração de armazenamento que você criou no Snowflake. Para obter as etapas de pré-requisito de uso da integração de armazenamento, consulte Configurando uma integração de armazenamento Snowflake. Não
opções adicionais de cópia Opções de cópia adicionais, fornecidas como um dicionário de pares chave-valor. Exemplos: MAX_FILE_SIZE, OVERWRITE. Para obter mais informações, consulte Snowflake Copy Options. Não
opçõesAdicionaisDeFormato Opções de formato de arquivo adicionais que são fornecidas ao comando COPY como um dicionário de pares chave-valor. Exemplos: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT NULL_IF. Para obter mais informações, consulte Opções de Tipos de Formato Snowflake.

Quando você usa NULL_IF, o valor NULL em Snowflake é convertido para o valor especificado (que precisa ser aspas simples) ao gravar no arquivo de texto delimitado no armazenamento de preparo. Esse valor especificado é tratado como NULL ao ler do ficheiro temporário para o armazenamento de destino. O valor predefinido é 'NULL'.
Não

Nota

Verifique se você tem permissão para executar o seguinte comando e acessar o esquema INFORMATION_SCHEMA e as colunas da tabela.

  • COPY INTO <location>

Cópia direta de Snowflake

Se o armazenamento de dados e o formato do coletor atenderem aos critérios descritos nesta seção, você poderá usar a atividade Copiar para copiar diretamente do Snowflake para o coletor. O serviço verifica as configurações e falha na execução da atividade Copiar se os seguintes critérios não forem atendidos:

  • Quando você especifica storageIntegration na fonte:

    O repositório de dados de destino é o Armazenamento de Blobs do Azure referido no estágio externo do Snowflake. Você precisa concluir as seguintes etapas antes de copiar dados:

    1. Crie um serviço vinculado de Armazenamento de Blob do Azure para o destino Armazenamento de Blobs do Azure com quaisquer tipos de autenticação suportados.

    2. Conceda pelo menos a função de Colaborador de Dados de Blob de Armazenamento à entidade de serviço do Snowflake no coletor do Azure Blob Storage Access Control (IAM).

  • Quando você não especifica storageIntegration na fonte:

    O serviço vinculado ao coletor é Armazenamento Blob do Azure com autenticação com assinatura de acesso compartilhado. Se quiser copiar dados diretamente para o Azure Data Lake Storage Gen2 no seguinte formato suportado, pode criar um serviço vinculado ao Armazenamento de Blobs do Azure com autenticação SAS na sua conta do Azure Data Lake Storage Gen2, para evitar o uso da cópia em fases a partir do Snowflake.

  • O formato de dados do coletor é Parquet, texto delimitado ou JSON com as seguintes configurações:

    • Para formato Parquet, o codec de compressão é None, Snappy ou Lzo.
    • Para texto delimitado formato:
      • rowDelimiter é \r\n, ou qualquer caractere único.
      • compression pode ser sem compressão, gzip, bzip2 ou deflate.
      • encodingName é deixado como padrão ou definido como utf-8.
      • quoteChar é aspa dupla, aspa simples ou string vazia (sem aspas char).
    • Para o formato JSON, a cópia direta suporta apenas o caso de a tabela Snowflake de origem ou o resultado da consulta ter apenas uma coluna e o tipo de dados dessa coluna ser VARIANT, OBJECT ou ARRAY.
      • compression pode ser sem compressão, gzip, bzip2 ou deflate.
      • encodingName é deixado como padrão ou definido como utf-8.
      • filePattern no coletor de atividade de cópia é deixado como padrão ou definido como setOfObjects.
  • Na fonte da atividade de cópia, additionalColumns não é especificado.

  • O mapeamento de colunas não é especificado.

Exemplo:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",
                "query": "SELECT * FROM MYTABLE",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "additionalCopyOptions": {
                        "MAX_FILE_SIZE": "64000000",
                        "OVERWRITE": true
                    },
                    "additionalFormatOptions": {
                        "DATE_FORMAT": "'MM/DD/YYYY'"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Cópia encenada de Snowflake

Quando o repositório de dados de destino ou o formato não forem compatíveis nativamente com o comando COPY do Snowflake, conforme mencionado na última seção, habilite a cópia interna em estágios usando uma instância provisória de Azure Blob Storage. O recurso de cópia em estágios também oferece uma melhor taxa de transferência. O serviço exporta dados do Snowflake para o armazenamento de preparação, copia os dados para o destino e, finalmente, limpa os dados temporários do armazenamento de preparação. Consulte Cópia em etapas para obter detalhes sobre como copiar dados usando staging.

Para usar esse recurso, crie um serviço vinculado de armazenamento de Blob do Azure que se refira à conta de armazenamento do Azure como o preparo provisório. Em seguida, especifique as enableStaging propriedades e stagingSettings na atividade Copiar.

  • Ao especificar storageIntegration na origem, o Armazenamento de Blobs de Azure temporário deve ser aquele mencionado no estágio externo no Snowflake. Certifique-se de criar um serviço vinculado do Armazenamento de Blobs do Azure para ele com qualquer autenticação com suporte ao usar o tempo de execução de integração do Azure ou com chave de conta anônima, assinatura de acesso compartilhado ou autenticação principal de serviço ao usar o tempo de execução de integração auto-hospedado. Além disso, conceda pelo menos a função de Colaborador de Dados de Blob de Armazenamento à entidade de serviço Snowflake no Controle de Acesso de Armazenamento de Blob (IAM) do Azure de preparação.

  • Quando não especificas storageIntegration na origem, o serviço associado de Armazenamento de Blobs do Azure de preparação deve usar a autenticação de assinatura de acesso partilhado, conforme exigido pelo comando Snowflake COPY. Certifique-se de conceder ao Snowflake a permissão de acesso adequada no armazenamento de preparação do Azure Blob Storage. Para saber mais sobre isso, consulte este artigo.

Exemplo:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",               
                "query": "SELECT * FROM MyTable",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"                    
                }
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Ao executar uma cópia em estágios do Snowflake, é crucial definir o comportamento de cópia do coletor como mesclar arquivos. Essa configuração garante que todos os arquivos particionados sejam manipulados e mesclados corretamente, evitando o problema em que apenas o último arquivo particionado é copiado.

Exemplo de configuração

{
    "type": "Copy",
    "source": {
        "type": "SnowflakeSource",
        "query": "SELECT * FROM my_table"
    },
    "sink": {
        "type": "AzureBlobStorage",
        "copyBehavior": "MergeFiles"
    }
}

Nota

A falha ao definir o comportamento de cópia do coletor para mesclar arquivos pode resultar em apenas o último arquivo particionado sendo copiado.

Floco de neve como pia

O conector Snowflake utiliza o comando COPY into [table] do Snowflake para obter o melhor desempenho. Ele dá suporte à gravação de dados no Snowflake no Azure.

Se o armazenamento de dados de origem e o formato forem suportados nativamente pelo comando Snowflake COPY, você poderá usar a atividade Copiar para copiar diretamente da origem para o Snowflake. Para obter detalhes, consulte Cópia direta para Snowflake. Caso contrário, use a cópia integrada em etapas para o Snowflake.

Para copiar dados para o Snowflake, as seguintes propriedades são suportadas na seção Copiar coletor de atividade.

Propriedade Descrição Necessário
tipo A propriedade type do coletor de atividade Copy, definida como SnowflakeV2Sink. Sim
pré-CopyScript Especifique uma consulta SQL para que a atividade Copy seja executada antes de gravar dados no Snowflake em cada execução. Use essa propriedade para limpar os dados pré-carregados. Não
configurações de importação Configurações avançadas usadas para gravar dados no Snowflake. Você pode configurar os suportados pelo comando COPY into que o serviço passará quando você invocar a instrução. Sim
Em importSettings:
tipo O tipo de comando import, definido como SnowflakeImportCopyCommand. Sim
storageIntegração Especifique o nome da integração de armazenamento que você criou no Snowflake. Para obter as etapas de pré-requisito de uso da integração de armazenamento, consulte Configurando uma integração de armazenamento Snowflake. Não
opções adicionais de cópia Opções de cópia adicionais, fornecidas como um dicionário de pares chave-valor. Exemplos: ON_ERROR, FORCE, LOAD_UNCERTAIN_FILES. Para obter mais informações, consulte Snowflake Copy Options. Não
opçõesAdicionaisDeFormato Opções adicionais de formato de arquivo fornecidas ao comando COPY, fornecidas como um dicionário de pares chave-valor. Exemplos: DATE_FORMAT, TIME_FORMAT TIMESTAMP_FORMAT. Para obter mais informações, consulte Opções de Tipos de Formato Snowflake. Não

Nota

Verifique se você tem permissão para executar o seguinte comando e acessar o esquema INFORMATION_SCHEMA e as colunas da tabela.

  • SELECT CURRENT_REGION()
  • COPY INTO <table>
  • SHOW REGIONS
  • CREATE OR REPLACE STAGE
  • DROP STAGE

Cópia direta para Snowflake

Se o armazenamento e o formato de dados de origem atenderem aos critérios descritos nesta seção, você poderá usar a atividade Copiar para copiar diretamente da fonte para o Snowflake. O serviço verifica as configurações e falha na execução da atividade Copiar se os seguintes critérios não forem atendidos:

  • Quando você especifica storageIntegration no coletor:

    O armazenamento de dados de origem é o Armazenamento de Blob do Azure que você mencionou no estágio externo no Snowflake. Você precisa concluir as seguintes etapas antes de copiar dados:

    1. Crie um serviço vinculado do Armazenamento de Blobs do Azure para o Armazenamento de Blobs do Azure de origem com qualquer tipo de autenticação suportado.

    2. Conceda pelo menos a função de Leitor de Dados de Blob de Armazenamento à entidade de serviço Snowflake no IAM (Controle de Acesso de Armazenamento de Blob) do Azure de origem.

  • Quando não especificares storageIntegration na pia:

    O serviço de ligação de origem é o armazenamento Blob do Azure com autenticação por assinatura de acesso partilhado. Se pretender copiar dados diretamente do Azure Data Lake Storage Gen2 no seguinte formato com suporte, pode criar um serviço vinculado do Azure Blob Storage com autenticação SAS na sua conta do Azure Data Lake Storage Gen2, para evitar o uso de cópia em etapas para o Snowflake.

  • O formato de dados de origem é Parquet, texto delimitado ou JSON com as seguintes configurações:

    • Para o formato Parquet, o codec de compressão pode ser None ou Snappy.

    • Para o formato de texto delimitado:

      • rowDelimiter é \r\n, ou qualquer caractere único. Se o delimitador de linha não for "\r\n", firstRowAsHeader precisará ser false e skipLineCount não será especificado.
      • compression pode ser sem compressão, gzip, bzip2 ou deflate.
      • encodingName é deixado como padrão ou definido como "UTF-8", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "BIG5", "EUC-JP", "EUC-KR", "GB18030", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255".
      • quoteChar é aspa dupla, aspa simples ou string vazia (sem aspas char).
    • Para formato JSON, a cópia direta suporta apenas o caso em que a tabela de destino Snowflake tem uma única coluna e o tipo de dados dessa coluna é VARIANT, OBJECT ou ARRAY.

      • compression pode ser sem compressão, gzip, bzip2 ou deflate.
      • encodingName é deixado como padrão ou definido como utf-8.
      • O mapeamento de colunas não é especificado.
  • Na fonte da atividade Copiar:

    • additionalColumns não é especificado.
    • Se a origem for uma pasta, recursive será definida como true.
    • prefix, modifiedDateTimeStart, modifiedDateTimeEnd, e enablePartitionDiscovery não são especificados.

Exemplo:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "copyOptions": {
                        "FORCE": "TRUE",
                        "ON_ERROR": "SKIP_FILE"
                    },
                    "fileFormatOptions": {
                        "DATE_FORMAT": "YYYY-MM-DD"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            }
        }
    }
]

Cópia encenada para Snowflake

Quando o armazenamento ou formato de dados de origem não for nativamente compatível com o comando Snowflake COPY, conforme mencionado na última seção, habilite a cópia em estágios interna usando uma instância provisória de armazenamento de Blob do Azure. O recurso de cópia em estágios também oferece uma melhor taxa de transferência. O serviço converte automaticamente os dados para atender aos requisitos de formato de dados do Snowflake. Em seguida, ele invoca o comando COPY para carregar dados no Snowflake. Finalmente, ele limpa seus dados temporários do armazenamento de blob. Consulte Cópia em etapas para obter detalhes sobre como copiar dados usando encaminhamento.

Para usar esse recurso, crie um serviço vinculado de armazenamento de Blob do Azure que se refira à conta de armazenamento do Azure como o preparo provisório. Em seguida, especifique as enableStaging propriedades e stagingSettings na atividade Copiar.

  • Quando se especifica storageIntegration no destino, o armazenamento de Blob do Azure de preparo provisório deve ser aquele referido no estágio externo no Snowflake. Certifique-se de criar um serviço vinculado do Armazenamento de Blobs do Azure para ele com qualquer autenticação com suporte ao usar o tempo de execução de integração do Azure ou com chave de conta anônima, assinatura de acesso compartilhado ou autenticação principal de serviço ao usar o tempo de execução de integração auto-hospedado. Além disso, conceda pelo menos a função de Leitor de Dados de Blob de Armazenamento à entidade de serviço Snowflake no Controle de Acesso de Armazenamento de Blob (IAM) do Azure de preparação.

  • Quando não se especifica storageIntegration no coletor, o serviço de ligação para Armazenamento de Blob do Azure de preparação precisa usar autenticação por assinatura de acesso compartilhado, conforme exigido pelo comando COPY do Snowflake.

Exemplo:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Mapeando propriedades de fluxo de dados

Ao transformar dados no fluxo de mapeamento de dados, pode-se ler e escrever em tabelas no Snowflake. Para obter mais informações, consulte a transformação de origem e a transformação de consumidor no mapeamento de fluxos de dados. Você pode optar por usar um conjunto de dados Snowflake ou um conjunto de dados inline como tipo de fonte e destino.

Transformação da fonte

A tabela abaixo lista as propriedades suportadas pela fonte Snowflake. Você pode editar essas propriedades na guia opções de origem. O conector utiliza transferência de dados internos Snowflake.

Nome Descrição Necessário Valores permitidos Propriedade do script de fluxo de dados
Tabela Se você selecionar Tabela como entrada, o fluxo de dados buscará todos os dados da tabela especificada no conjunto de dados Snowflake ou nas opções de origem ao usar o conjunto de dados embutido. Não Cordão (apenas para conjunto de dados incorporado)
nome da tabela
nomeDoEsquema
Pergunta Se você selecionar Consulta como entrada, insira uma consulta para buscar dados do Snowflake. Essa configuração substitui qualquer tabela escolhida no conjunto de dados.
Se os nomes do esquema, da tabela e das colunas contiverem minúsculas, cite o identificador do objeto na consulta, por exemplo. select * from "schema"."myTable"
Não Cordão consulta
Ativar extração incremental (Pré-visualização) Use essa opção para informar ao ADF para processar somente linhas que foram alteradas desde a última vez que o pipeline foi executado. Não Booleano habilitarCdc
Coluna incremental Ao usar o recurso de extração incremental, você deve escolher a data/hora/coluna numérica que deseja usar como marca d'água na tabela de origem. Não Cordão coluna de marca d'água
Ativar o rastreamento de alterações do floco de neve (visualização) Essa opção permite que o ADF aproveite a tecnologia de captura de dados de alteração do Snowflake para processar apenas os dados delta desde a execução anterior do pipeline. Esta opção carrega automaticamente os dados delta com operações de inserção de linha, atualização e exclusão sem exigir nenhuma coluna incremental. Não Booleano enableNativeCdc
Alterações líquidas Ao usar o rastreamento de alterações de flocos de neve, você pode usar essa opção para obter linhas alteradas ou alterações exaustivas. As linhas alteradas com deduped mostrarão apenas as versões mais recentes das linhas que foram alteradas desde um determinado ponto no tempo, enquanto as alterações exaustivas mostrarão todas as versões de cada linha que foi alterada, incluindo as que foram excluídas ou atualizadas. Por exemplo, se você atualizar uma linha, verá uma versão de exclusão e uma versão de inserção em alterações exaustivas, mas apenas a versão de inserção em linhas alteradas dedupedadas. Dependendo do seu caso de uso, você pode escolher a opção que atenda às suas necessidades. A opção padrão é false, o que significa alterações exaustivas. Não Booleano netAlterações
Incluir colunas do sistema Ao usar o rastreamento de alterações de flocos de neve, você pode usar a opção systemColumns para controlar se as colunas de fluxo de metadados fornecidas pelo Snowflake são incluídas ou excluídas na saída de controle de alterações. Por padrão, systemColumns é definido como true, o que significa que as colunas de fluxo de metadados estão incluídas. Você pode definir systemColumns como false se quiser excluí-los. Não Booleano colunas do sistema
Comece a ler desde o início Definir essa opção com extração incremental e controle de alterações instruirá o ADF a ler todas as linhas na primeira execução de um pipeline com a extração incremental ativada. Não Booleano ignorarCargaInicial

Exemplos de script de origem do Snowflake

Quando você usa o conjunto de dados Snowflake como tipo de origem, o script de fluxo de dados associado é:

source(allowSchemaDrift: true,
	validateSchema: false,
	query: 'select * from MYTABLE',
	format: 'query') ~> SnowflakeSource

Se você usar o conjunto de dados embutido, o script de fluxo de dados associado será:

source(allowSchemaDrift: true,
	validateSchema: false,
	format: 'query',
	query: 'select * from MYTABLE',
	store: 'snowflake') ~> SnowflakeSource

Controlo de alterações nativo

O Azure Data Factory agora dá suporte a um recurso nativo no Snowflake conhecido como controle de alterações, que envolve o controle de alterações na forma de logs. Esse recurso do floco de neve nos permite acompanhar as mudanças nos dados ao longo do tempo, tornando-os úteis para o carregamento incremental de dados e para fins de auditoria. Para utilizar esse recurso, quando você habilita a captura de dados de alteração e seleciona o Rastreamento de alterações de floco de neve, criamos um objeto Stream para a tabela de origem que habilita o controle de alterações na tabela de flocos de neve de origem. Posteriormente, usamos a cláusula CHANGES em nossa consulta para buscar apenas os dados novos ou atualizados da tabela de origem. Além disso, é recomendável agendar o pipeline para que as alterações sejam consumidas dentro do intervalo do tempo de retenção de dados definido para a tabela de origem no Snowflake, caso contrário, o usuário poderá observar um comportamento inconsistente nas alterações capturadas.

Transformação do lavatório

A tabela abaixo lista as propriedades suportadas pelo Snowflake sink. Você pode editar essas propriedades na guia Configurações. Ao usar o conjunto de dados embutido, você verá configurações adicionais, que são as mesmas que as propriedades descritas na seção de propriedades do conjunto de dados. O conector utiliza a transferência interna de dados da Snowflake.

Nome Descrição Necessário Valores permitidos Propriedade do script de fluxo de dados
Método de atualização Especifique quais operações são permitidas em seu destino Snowflake.
Para atualizar, inserir ou excluir linhas, uma transformação Alter row é necessária para marcar linhas para essas ações.
Sim true ou false eliminável
inserível
atualizável
Atualizável
Colunas-chave Para atualizações, upserts e exclusões, uma ou mais colunas chave devem ser definidas para determinar qual linha alterar. Não Matriz chaves
Ação de tabela Determina se todas as linhas da tabela de destino devem ser recriadas ou removidas antes de escrever.
- Nenhum: Nenhuma ação será tomada em relação à tabela.
- Recriar: A tabela vai ser eliminada e recriada. É necessário se se criar uma nova tabela de forma dinâmica.
- Truncate: Todas as linhas da tabela de destino serão removidas.
Não true ou false recriar
truncar

Exemplos de script de destino Snowflake

Quando você usa o conjunto de dados Snowflake como tipo de coletor, o script de fluxo de dados associado é:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:false,
	keys:['movieId'],
	format: 'table',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

Se você usar o conjunto de dados embutido, o script de fluxo de dados associado será:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	format: 'table',
	tableName: 'table',
	schemaName: 'schema',
	deletable: true,
	insertable: true,
	updateable: true,
	upsertable: false,
	store: 'snowflake',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

Otimização do Query Pushdown

Ao definir o Nível de Log do pipeline como Nenhum, excluímos a transmissão de métricas de transformação intermediárias, evitando possíveis obstáculos às otimizações do Spark e permitindo a otimização de pushdown de consultas possibilitada pelo Snowflake. Essa otimização de pushdown permite melhorias substanciais de desempenho para grandes tabelas Snowflake com conjuntos de dados extensos.

Nota

Não suportamos tabelas temporárias no Snowflake, pois elas são locais para a sessão ou o usuário que as cria, tornando-as inacessíveis a outras sessões e propensas a serem substituídas como tabelas regulares pelo Snowflake. Embora o Snowflake ofereça tabelas transitórias como alternativa, que são acessíveis globalmente, elas exigem exclusão manual, contradizendo nosso objetivo principal de usar tabelas Temp, que é evitar quaisquer operações de exclusão no esquema de origem.

Mapeamento de tipo de dados para Snowflake V2

Quando você copia dados do Snowflake, os mapeamentos a seguir são usados de tipos de dados do Snowflake para tipos de dados provisórios dentro do serviço internamente. Para saber como a atividade de cópia mapeia o esquema de origem e o tipo de dados para o destino, consulte Mapeamentos de esquema e tipo de dados.

Tipo de dados Snowflake Tipo de dados provisórios de serviço
NÚMERO (p,0) Decimal
NÚMERO (p,s onde s>0) Decimal
FLUTUAR Duplo
VARCHAR Cordão
CHAR Cordão
BINÁRIO Byte[]
BOOLEANO Booleano
DATA Data e Hora
TEMPO Intervalo de tempo
TIMESTAMP_LTZ Desvio de Data e Hora
TIMESTAMP_NTZ Desvio de Data e Hora
TIMESTAMP_TZ Desvio de Data e Hora
VARIANTE Cordão
OBJETO Cordão
MATRIZ Cordão

Propriedades da atividade de consulta

Para obter mais informações sobre as propriedades, consulte Atividade de pesquisa.

Ciclo de vida e atualização do conector Snowflake

A tabela a seguir mostra a fase de lançamento e os registos de alterações para versões distintas do conector Snowflake.

Versão Fase de lançamento Registo de alterações
Floco de neve V1 Anunciado o fim do suporte /
Snowflake V2 (versão 1.0) Versão GA disponível • Adicione suporte para autenticação de par de chaves.

• Adicionar suporte para storageIntegration na atividade de cópia.

• As accountIdentifier, warehouse, database, schema e role propriedades são usadas para estabelecer uma conexão em vez da propriedade connectionstring.

• Adicione suporte para Decimal na atividade de pesquisa. O tipo NUMBER, conforme definido no Snowflake, será exibido como uma sequência de caracteres na atividade Lookup. Se quiser convertê-lo para o tipo numérico no V2, pode usar o parâmetro de pipeline com a função int ou a função float. Por exemplo, int(activity('lookup').output.firstRow.VALUE), float(activity('lookup').output.firstRow.VALUE)

• O tipo de dados timestamp em Snowflake é lido como o tipo de dados DateTimeOffset nas atividades de Lookup e Script. Se você ainda precisar usar o valor Datetime como um parâmetro em seu pipeline após a atualização para V2, poderá converter o tipo DateTimeOffset em tipo DateTime usando a função formatDateTime (recomendada) ou a função concat. Por exemplo: formatDateTime(activity('lookup').output.firstRow.DATETIMETYPE), concat(substring(activity('lookup').output.firstRow.DATETIMETYPE, 0, 19), 'Z')

• NUMBER (p,0) é interpretado como um tipo de dados Decimal.

• TIMESTAMP_LTZ, TIMESTAMP_NTZ e TIMESTAMP_TZ são lidos como tipo de dados DateTimeOffset.

• Os parâmetros de script não são suportados na atividade de script. Como alternativa, utilize expressões dinâmicas para parâmetros de script. Para obter mais informações, consulte Expressões e funções no Azure Data Factory e Azure Synapse Analytics.

• Não há suporte para a execução de várias instruções SQL na atividade Script.
Snowflake V2 (versão 1.1) Versão de pré-visualização disponível • Adicionar suporte para parâmetros de script.

• Adicionar suporte para execução de várias instruções na atividade de script.

Atualize o conector Snowflake de V1 para V2

Para atualizar o conector Snowflake de V1 para V2, pode fazer uma atualização paralela ou uma atualização no local.

Atualização simultânea

Para executar uma atualização lado a lado, conclua as seguintes etapas:

  1. Crie um novo serviço vinculado do Snowflake e configure-o consultando as propriedades do serviço vinculado V2.
  2. Crie um conjunto de dados com base no serviço vinculado Snowflake recém-criado.
  3. Substitua o novo serviço vinculado e o novo conjunto de dados pelos existentes nos pipelines destinados aos objetos V1.

Atualização no local

Para executar uma atualização in-loco, você precisa editar a carga útil do serviço vinculado existente e atualizar o conjunto de dados para usar o novo serviço vinculado.

  1. Atualize o tipo de Snowflake para SnowflakeV2.

  2. Altere o formato da carga útil do serviço associado de V1 para V2. Você pode preencher cada campo da interface do utilizador depois de alterar o tipo mencionado acima ou atualizar o payload diretamente pelo Editor JSON. Consulte a seção Propriedades do serviço vinculado neste artigo para obter as propriedades de conexão suportadas. Os exemplos a seguir mostram as diferenças na carga útil para os serviços vinculados V1 e V2 Snowflake:

    Carga JSON do serviço associado Snowflake V1:

      {
         "name": "Snowflake1",
         "type": "Microsoft.DataFactory/factories/linkedservices",
         "properties": {
             "annotations": [],
             "type": "Snowflake",
             "typeProperties": {
                 "authenticationType": "Basic",
                 "connectionString": "jdbc:snowflake://<fake_account>.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC",
                 "encryptedCredential": "<your_encrypted_credential_value>"
             },
             "connectVia": {
                 "referenceName": "AzureIntegrationRuntime",
                 "type": "IntegrationRuntimeReference"
             }
         }
     }
    

    Carga JSON do serviço associado Snowflake V2:

     {
         "name": "Snowflake2",
         "type": "Microsoft.DataFactory/factories/linkedservices",
         "properties": {
             "parameters": {
                 "schema": {
                     "type": "string",
                     "defaultValue": "PUBLIC"
                 }
             },
             "annotations": [],
             "type": "SnowflakeV2",
             "typeProperties": {
                 "authenticationType": "Basic",
                 "accountIdentifier": "<FAKE_Account>",
                 "user": "FAKE_USER",
                 "database": "FAKE_DB",
                 "warehouse": "FAKE_DW",
                 "encryptedCredential": "<placeholder>"
             },
             "connectVia": {
                 "referenceName": "AutoResolveIntegrationRuntime",
                 "type": "IntegrationRuntimeReference"
             }
         }
     }
    
  3. Atualize o conjunto de dados para usar o novo serviço vinculado. Você pode criar um novo conjunto de dados com base no serviço vinculado recém-criado ou atualizar a propriedade type de um conjunto de dados existente de SnowflakeTable para SnowflakeV2Table.

Nota

Ao fazer a transição de serviços vinculados, a seção de parâmetros de modelo de substituição pode exibir apenas as propriedades do banco de dados. Você pode resolver isso editando manualmente os parâmetros. Depois disso, a seção Substituir parâmetros do modelo mostrará as cadeias de conexão.

Atualize o conector Snowflake V2 da versão 1.0 para a versão 1.1 (Preview)

Na página Editar serviço vinculado , selecione 1.1 para a versão. Para obter mais informações, consulte Propriedades do serviço vinculado.

Para obter uma lista de armazenamentos de dados suportados como fontes e destinos pela atividade de cópia, consulte Armazenamentos de dados e formatos suportados.