Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- A ferramenta Copiar dados
- O portal do Azure
- O SDK do .NET
- O SDK do Python
- Azure PowerShell
- A API REST
- O modelo do 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:
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:
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
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:
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
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 eskipLineCount
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
, eenablePartitionDiscovery
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:
- 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.
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.
Conteúdos relacionados
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.