Copie e transforme dados no Banco de Dados do Azure para MySQL usando o Azure Data Factory ou o Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

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

Este artigo descreve como usar a atividade Copy nos pipelines do Azure Data Factory ou Synapse Analytics para copiar dados de e para o Banco de Dados do Azure para MySQL e como usar o Fluxo de Dados para transformar dados no Banco de Dados do Azure para PostgreSQL. Para saber mais, leia o artigo introdutório do Azure Data Factory e do Synapse Analytics.

Este conector é especializado para

Para copiar dados do banco de dados MySQL genérico localizado localmente ou na nuvem, use o conector do MySQL.

Pré-requisitos

Este guia de início rápido exige os seguintes recursos e configurações mencionados abaixo como ponto de partida:

  • Um banco de dados do Azure existente para Servidor Único do MySQL ou Servidor Flexível do MySQL com acesso público ou ponto final privado.
  • Habilitar Permitir acesso público em qualquer serviço do Azure no Azure para este servidor na página de rede do servidor MySQL. Isso permitirá que você use o Data Factory Studio.

Funcionalidades com suporte

Este conector do Banco de Dados do Azure para MySQL é compatível com as seguintes funcionalidades:

Funcionalidades com suporte IR Ponto de extremidade privado gerenciado
Atividade de cópia (origem/coletor) 6/6
Fluxo de dados de mapeamento (origem/coletor) 2
Atividade de pesquisa 6/6

① Runtime de integração do Azure ② Runtime de integração auto-hospedada

Introdução

Para executar a atividade de Cópia com um pipeline, será possível usar as ferramentas ou os SDKs abaixo:

Criar um serviço vinculado para o Banco de Dados do Azure para MySQL usando a interface do usuário

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

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

  2. Procure por MySQL e selecione o conector do Banco de Dados do Azure para MySQL.

    Select the Azure Database for MySQL connector.

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

    Configure a linked service to Azure Database for MySQL.

Detalhes da configuração do conector

As seções que se seguem fornecem detalhes sobre as propriedades que são usadas para definir entidades do Data Factory específicas ao conector do Banco de Dados do Azure para MySQL.

Propriedades do serviço vinculado

As propriedades a seguir têm suporte no serviço vinculado do Banco de Dados do Azure para MySQL:

Propriedade Descrição Obrigatório
type A tipo da propriedade deve ser definida como: AzureMySql Sim
connectionString Obtenha as informações de conexão necessárias para se conectar ao Banco de Dados do Azure para MySQL.
Você também pode colocar uma senha no Azure Key Vault e extrair a configuração password da cadeia de conexão. Confira os exemplos a seguir e o artigo Armazenar credenciais no Azure Key Vault com mais detalhes.
Sim
connectVia O Integration Runtime a ser usado para se conectar ao armazenamento de dados. Você pode usar o Integration Runtime do Azure ou o Integration Runtime auto-hospedado (se o armazenamento de dados estiver localizado em uma rede privada). Se não for especificado, ele usa o Integration Runtime padrão do Azure. Não

Uma cadeia de conexão válida é Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>. Mais propriedades que podem ser definidas para seu caso:

Propriedade Descrição Opções Obrigatório
SSLMode Esta opção especifica se o driver usa criptografia e verificação TLS ao se conectar ao MySQL. Por exemplo, SSLMode=<0/1/2/3/4> DESATIVADO (0) / PREFERENCIAL (1) (padrão) / NECESSÁRIO (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4) Não
UseSystemTrustStore Esta opção especifica se deve usar um certificado de autoridade de certificação do repositório de confiança de sistema ou de um arquivo PEM especificado. Por exemplo, UseSystemTrustStore=<0/1>; Ativado (1) / Desativado (0) (Padrão) Não

Exemplo:

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: armazenar a senha no Azure Key Vault

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriedades do conjunto de dados

Para obter uma lista completa das seções e propriedades disponíveis para definir os conjuntos de dados, confira o artigo sobre conjuntos de dados. Esta seção fornece uma lista das propriedades com suporte pelo conjunto de dados do Banco de Dados do Azure para MySQL.

Para copiar dados de/para o Banco de Dados do Azure para MySQL, defina o tipo da propriedade do conjunto de dados como AzureMySqlTable. Há suporte para as seguintes propriedades:

Propriedade Descrição Obrigatório
type O tipo da propriedade do conjunto de dados deve ser definida como: AzureMySqlTable Sim
tableName Nome da tabela no banco de dados MySQL. Não (se "query" na fonte da atividade for especificada)

Exemplo

{
    "name": "AzureMySQLDataset",
    "properties": {
        "type": "AzureMySqlTable",
        "linkedServiceName": {
            "referenceName": "<Azure MySQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "<table name>"
        }
    }
}

Propriedades da atividade de cópia

Para obter uma lista completa das seções e propriedades disponíveis para definir atividades, confia o artigo Pipelines. Esta seção apresenta uma lista das propriedades permitidas pela fonte e pelo coletor do Banco de Dados do Azure para MySQL.

Banco de Dados do Azure para MySQL como fonte

Para copiar dados do Banco de Dados do Azure para MySQL, há suporte para as seguintes propriedades na seção origem da atividade Copy:

Propriedade Descrição Obrigatório
type A propriedade type da fonte da atividade de cópia deve ser definida como: AzureMySqlSource Sim
Consulta Utiliza a consulta SQL personalizada para ler os dados. Por exemplo: "SELECT * FROM MyTable". Não (se "tableName" no conjunto de dados for especificado)
queryCommandTimeout O tempo de espera antes da expiração da solicitação de consulta. O padrão é 120 minutos (02:00:00) Não

Exemplo:

"activities":[
    {
        "name": "CopyFromAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure MySQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureMySqlSource",
                "query": "<custom query e.g. SELECT * FROM MyTable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Banco de Dados do Azure para MySQL como coletor

Para copiar dados para o Banco de Dados do Azure para MySQL, são permitidas as seguintes propriedades na seção coletor da atividade Copy:

Propriedade Descrição Obrigatório
type A propriedade type do coletor da atividade Copy precisa ser definida como: AzureMySqlSink Sim
preCopyScript Especifica uma consulta SQL para a atividade de cópia, a ser executada antes de gravar dados no Banco de Dados do Azure para MySQL em cada execução. Você pode usar essa propriedade para limpar os dados previamente carregados. Não
writeBatchSize Insere dados na tabela do Banco de Dados do Azure para MySQL quando o tamanho do buffer atinge writeBatchSize.
O valor permitido é um inteiro que representa o número de linhas.
Não (o padrão é 10.000)
writeBatchTimeout Tempo de espera para a operação de inserção em lotes ser concluída antes de atingir o tempo limite.
Os valores permitidos são período. Um exemplo é 00:30:00 (30 minutos).
Não, o padrão é 00:00:30

Exemplo:

"activities":[
    {
        "name": "CopyToAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure MySQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureMySqlSink",
                "preCopyScript": "<custom SQL script>",
                "writeBatchSize": 100000
            }
        }
    }
]

Propriedades do fluxo de dados de mapeamento

Ao transformar dados no fluxo de dados de mapeamento, você pode ler e gravar em tabelas do Banco de Dados do Azure para MySQL. Para obter mais informações, confira transformação de origem e transformação do coletor nos fluxos de dados de mapeamento. Você pode optar por usar um conjunto de dados do Banco de Dados do Azure para MySQL ou um conjunto de dados em linha como fonte e tipo de coletor.

Transformação de origem

A tabela abaixo lista as propriedades compatíveis com a fonte do Banco de Dados do Azure para MySQL. Você pode editar essas propriedades na guia Opções de origem.

Nome Descrição Obrigatório Valores permitidos Propriedade do script do 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. Não - (somente para o conjuntos de dados em linha)
tableName
Consulta Se você selecionar consulta como entrada, especifique uma consulta SQL para buscar dados da origem, o que substitui qualquer tabela que você especificar no conjunto de dados. O uso de consultas também é uma ótima maneira de reduzir linhas para testes ou pesquisas.

Não há suporte para a cláusula Ordenar por aqui, mas você pode definir uma instrução SELECT FROM completa. Também pode usar funções de tabela definidas pelo usuário. select * from udfGetData() é um UDF no SQL que retorna uma tabela que você pode usar no fluxo de dados.
Exemplo de consulta: select * from mytable where customerId > 1000 and customerId < 2000 ou select * from "MyTable".
Não String Consulta
Procedimento armazenado Se você selecionar o procedimento armazenado como entrada, especifique um nome do procedimento armazenado para ler dados na tabela de origem ou selecione Atualizar para solicitar ao serviço que descubra os nomes dos procedimentos. Sim (se você selecionar o procedimento armazenado como entrada) String procedureName
Parâmetros de procedimento Se você selecionar o procedimento armazenado como entrada, especifique os parâmetros de entrada para o procedimento armazenado na ordem definida no procedimento ou selecione Importar para importar todos os parâmetros de procedimento usando o formulário @paraName. Não Array entradas
Tamanho do lote Especifique um tamanho de lote para dividir em partes os dados grandes em lotes. Não Integer batchSize
Nível de Isolamento Escolha um dos seguintes níveis de isolamento:
- Leitura confirmada
- Leitura não confirmada (padrão)
- Leitura repetida
- Serializável
- Nenhum (ignorar o nível de isolamento)
No READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
NONE
isolationLevel

Exemplo de script de fonte do Banco de Dados do Azure para MySQL

Quando você usa o Banco de Dados do Azure para MySQL como tipo de origem, o script de fluxo de dados associado é:

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzureMySQLSource

Transformação de coletor

A tabela abaixo lista as propriedades compatíveis com o coletor do Banco de Dados do Azure para MySQL. Você pode editar essas propriedades na guia Opções do coletor.

Nome Descrição Obrigatório Valores permitidos Propriedade do script do Fluxo de Dados
Método Update Especifique quais operações são permitidas no destino do banco de dados. O padrão é permitir apenas inserções.
Para atualizar, fazer upsert ou excluir linhas, uma transformação Alter row é necessária para marcar as linhas para essas ações.
Sim true ou false deletable
insertable
Pode ser atualizado
upsertable
Colunas de chaves Para atualizações, upserts e exclusões, coluna(s) de chave devem ser definidas para determinar qual linha alterar.
O nome da coluna que você escolhe como chave será usado como parte da atualização, upsert, exclusão seguinte. Portanto, você deve escolher uma coluna que exista no mapeamento de coletor.
Não Array chaves
Ignorar colunas de chave de gravação Se você não quiser gravar o valor na coluna de chave, selecione "Ignorar gravação de colunas de chave". No true ou false skipKeyWrites
Ação tabela determina se deve-se recriar ou remover todas as linhas da tabela de destino antes da gravação.
- None: nenhuma ação será feita na tabela.
- Recreate: a tabela será descartada e recriada. Necessário ao criar uma tabela dinamicamente.
- Truncate: todas as linhas da tabela de destino serão removidas.
Não true ou false recreate
truncate
Tamanho do lote Especifique quantas linhas estão sendo gravadas em cada lote. Tamanhos de lote maiores aprimoram a compactação e a otimização de memória, mas geram risco de exceções de memória insuficiente ao armazenar dados em cache. No Integer batchSize
Pré-scripts e Pós-scripts SQL Especifique scripts SQL multilinhas que serão executados antes (pré-processamento) e após (pós-processamento) os dados serem gravados no banco de dados do coletor. Não String preSQLs
postSQLs

Dica

  1. É recomendável quebrar scripts de lote únicos com vários comandos em vários lotes.
  2. Apenas as instruções DDL (linguagem de definição de dados) e DML (linguagem de manipulação de dados) que retornam uma contagem de atualização simples podem ser executadas como parte de um lote. Saiba mais sobre Executando operações em lote
  • Habilitar extração incremental: use essa opção para dizer ao ADF para processar apenas as linhas que foram alteradas desde a última vez em que o pipeline foi executado.

  • Coluna de data incremental: ao usar o recurso de extração incremental, escolha a coluna data/hora ou numérica que você deseja usar como marca d'água na tabela de origem.

  • Comece a ler desde o início: definir essa opção com a extração incremental dirá ao ADF para ler todas as linhas na primeira execução de um pipeline com a extração incremental ativada.

Exemplo de script de coletor do Banco de Dados do Azure para MySQL

Quando você usa o Banco de Dados do Azure para MySQL como tipo de fonte, o script de fluxo de dados associado é:

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

Pesquisar propriedades de atividade

Para saber detalhes sobre as propriedades, verifique Atividade de pesquisa.

Mapeamento do tipo de dados do Banco de Dados do Azure para MySQL

Ao copiar dados do Banco de Dados do Azure para MySQL, os seguintes mapeamentos são usados de tipos de dados do MySQL para tipos de dados provisórios usados internamente com o serviço. Consulte Mapeamentos de tipo de dados e esquema para saber mais sobre como a atividade de cópia mapeia o tipo de dados e esquema de origem para o coletor.

Tipos de dados de Banco de Dados do Azure para MySQL Tipo de dados provisório do serviço
bigint Int64
bigint unsigned Decimal
bit Boolean
bit(M), M>1 Byte[]
blob Byte[]
bool Int16
char String
date Datetime
datetime Datetime
decimal Decimal, String
double Double
double precision Double
enum String
float Single
int Int32
int unsigned Int64
integer Int32
integer unsigned Int64
long varbinary Byte[]
long varchar String
longblob Byte[]
longtext String
mediumblob Byte[]
mediumint Int32
mediumint unsigned Int64
mediumtext String
numeric Decimal
real Double
set String
smallint Int16
smallint unsigned Int32
text String
time TimeSpan
timestamp Datetime
tinyblob Byte[]
tinyint Int16
tinyint unsigned Int16
tinytext String
varchar String
year Int32

Para obter uma lista de armazenamentos de dados com suporte como coletores e fontes da atividade de cópia, confira os armazenamentos de dados com suporte.