Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
APLICA-SE A:
Azure Data Factory
Azure Synapse Analytics
Tip
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.
Important
O conector Snowflake V1 está em fase de remoção. Recomenda-se atualizar o conector Snowflake de V1 para V2.
Capacidades suportadas
Este conector Snowflake é suportado para as seguintes funcionalidades:
| Capacidades suportadas | IR |
|---|---|
| Atividade de cópia (origem/destino) | (1) (2) |
| Mapeamento do fluxo de dados (origem/destino) | ① |
| Atividade de pesquisa | (1) (2) |
| Atividade de script (Aplique a versão 1.1 quando você usa 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.
Prerequisites
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
| Property | Description | Required | Default |
|---|---|---|---|
| REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION | 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. | FALSE | FALSE |
| REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION | 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. | FALSE | FALSE |
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.
Introdução
Para executar a atividade de cópia com um pipeline, você pode usar uma das seguintes ferramentas ou SDKs:
- Ferramenta Copiar dados
- portal do Azure
- SDK do .NET
- Python SDK
- Azure PowerShell
- API REST
- Modelo Azure Resource Manager
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.
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:
Procure por Snowflake e selecione o conector Snowflake.
Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.
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:
| Property | Description | Required |
|---|---|---|
| tipo | A propriedade type deve ser definida como SnowflakeV2. | Yes |
| 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 |
| accountIdentifier | O nome da conta juntamente com a sua organização. Por exemplo, myorg-account123. | Yes |
| base de dados | O banco de dados padrão usado para a sessão após a conexão. | Yes |
| warehouse | O armazém virtual padrão usado para a sessão após a conexão. | Yes |
| authenticationType | 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. | No |
| função | A função de segurança padrão usada para a sessão após a conexão. | No |
| alojar | O nome do host da conta Snowflake. Por exemplo: contoso.snowflakecomputing.com.
.cn também é suportado. |
No |
| connectVia | 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. | No |
Você pode definir as seguintes propriedades de conexão adicionais no serviço vinculado, dependendo do seu caso.
| Property | Description | Required | Valor predefinido |
|---|---|---|---|
| UseUtcTimestamps | Especifique-o para false devolver o tipo TIMESTAMP_LTZ e o tipo TIMESTAMP_TZ no fuso horário correto, e o tipo TIMESTAMP_NTZ sem a informação do fuso horário. Especifique true para devolver todos os tipos de timestamp do Snowflake no UTC. |
No | false |
| esquema | Especifica o esquema para a sessão de consulta após a ligação. | No | / |
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:
| Property | Description | Required |
|---|---|---|
| utilizador | Nome de login para o usuário do Snowflake. | Yes |
| 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. | Yes |
Example:
{
"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:
| Property | Description | Required |
|---|---|---|
| utilizador | Nome de login para o usuário do Snowflake. | Yes |
| privateKey | 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. |
Yes |
| privateKeyPassphrase | A frase secreta usada para desencriptar a chave privada, se estiver encriptada. | No |
Example:
{
"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"
}
}
}
Note
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.
| Property | Description | Required |
|---|---|---|
| tipo | A propriedade type do conjunto de dados deve ser definida como SnowflakeV2Table. | Yes |
| 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 |
| tabela | 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 |
Example:
{
"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.
| Property | Description | Required |
|---|---|---|
| tipo | A propriedade type da fonte de atividade Copy deve ser definida como SnowflakeV2Source. | Yes |
| 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. |
No |
| exportSettings | 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. | Yes |
| tratarDecimalAsString | Especifique tratar o tipo decimal como uma cadeia de caracteres na pesquisa e na atividade de script. O valor predefinido é false.Esta propriedade só é suportada na versão 1.1. |
No |
Em exportSettings: |
||
| tipo | O tipo de comando export, definido como SnowflakeExportCopyCommand. | Yes |
| storageIntegration | 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. | No |
| additionalCopyOptions | 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. | No |
| additionalFormatOptions | 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'. |
No |
Note
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
storageIntegrationna 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:
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.
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
storageIntegrationna 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. -
compressionpode 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.
-
compressionpode ser sem compressão, gzip, bzip2 ou deflate. -
encodingNameé deixado como padrão ou definido como utf-8. -
filePatternno coletor de atividade de cópia é deixado como padrão ou definido como setOfObjects.
-
Na fonte da atividade de cópia,
additionalColumnsnão é especificado.O mapeamento de colunas não é especificado.
Example:
"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
storageIntegrationna 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
storageIntegrationna 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.
Example:
"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"
}
}
Note
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.
| Property | Description | Required |
|---|---|---|
| tipo | A propriedade type do coletor de atividade Copy, definida como SnowflakeV2Sink. | Yes |
| preCopyScript | 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. | No |
| importSettings | 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. | Yes |
Em importSettings: |
||
| tipo | O tipo de comando import, definido como SnowflakeImportCopyCommand. | Yes |
| storageIntegration | 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. | No |
| additionalCopyOptions | 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. | No |
| additionalFormatOptions | 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. | No |
Note
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 REGIONSCREATE OR REPLACE STAGEDROP 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
storageIntegrationno 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:
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.
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
storageIntegrationna 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",firstRowAsHeaderprecisará ser false eskipLineCountnão será especificado. -
compressionpode 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.
-
compressionpode 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:
-
additionalColumnsnão é especificado. - Se a origem for uma pasta,
recursiveserá definida como true. -
prefix,modifiedDateTimeStart,modifiedDateTimeEnd, eenablePartitionDiscoverynão são especificados.
-
Example:
"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
storageIntegrationno 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
storageIntegrationno 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.
Example:
"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.
| Name | Description | Required | Valores permitidos | Propriedade do script de fluxo de dados |
|---|---|---|---|---|
| Table | 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. | No | String |
(apenas para conjunto de dados incorporado) tableName schemaName |
| Query | 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" |
No | String | 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. | No | booleano | enableCdc |
| 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. | No | String | waterMarkColumn |
| 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. | No | 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. | No | booleano | netChanges |
| 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. | No | booleano | systemColumns |
| 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. | No | booleano | skipInitialLoad |
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.
| Name | Description | Required | 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. |
Yes |
true ou false |
deletable insertable updateable upsertable |
| Colunas-chave | Para atualizações, upserts e exclusões, uma ou mais colunas chave devem ser definidas para determinar qual linha alterar. | No | Array | keys |
| Ação na 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. |
No |
true ou false |
recreate 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.
Note
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 |
| FLOAT | Double |
| VARCHAR | String |
| CHAR | String |
| BINARY | Byte[] |
| BOOLEAN | booleano |
| DATE | DateTime |
| TIME | TimeSpan |
| TIMESTAMP_LTZ | DateTimeOffset |
| TIMESTAMP_NTZ | DateTimeOffset |
| TIMESTAMP_TZ | DateTimeOffset |
| VARIANT | String |
| OBJECT | String |
| ARRAY | String |
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.
| Version | Fase de lançamento | Registo de alterações |
|---|---|---|
| Floco de neve V1 | Removed | Não aplicável. |
| 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 GA disponível | • Adicionar suporte para parâmetros de script. • Adicionar suporte para execução de várias instruções na atividade de script. • Adicionar propriedade treatDecimalAsString na atividade de Pesquisa e Script. • Adicionar propriedade adicional de ligação UseUtcTimestamps. |
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 lado a lado
Para executar uma atualização lado a lado, conclua as seguintes etapas:
- Crie um novo serviço vinculado do Snowflake e configure-o consultando as propriedades do serviço vinculado V2.
- Crie um conjunto de dados com base no serviço vinculado Snowflake recém-criado.
- 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.
Atualize o tipo de Snowflake para SnowflakeV2.
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" } } }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.
Note
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
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.
Conteúdo relacionado
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.