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
- Servidor Único do Banco de Dados do Azure para MySQL
- Servidor Flexível do Banco de Dados do Azure para MySQL
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) | ① ② | ✓ |
Fluxo de dados de mapeamento (origem/coletor) | ① | ✓ |
Atividade de pesquisa | ① ② | ✓ |
① 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:
- A ferramenta Copiar Dados
- O portal do Azure
- O SDK do .NET
- O SDK do Python
- PowerShell do Azure
- A API REST
- O modelo do Azure Resource Manager
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.
Navegue até a guia Gerenciar em seu workspace do Azure Data Factory ou do Synapse, selecione Serviços Vinculados e clique em Novo:
Procure por MySQL e selecione o conector do Banco de Dados do Azure para MySQL.
Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.
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
- É recomendável quebrar scripts de lote únicos com vários comandos em vários lotes.
- 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 |
Conteúdo relacionado
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.