Copiar e transformar dados no Banco de Dados SQL do Azure usando o Azure Data Factory ou o Azure 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 em pipelines do Azure Data Factory ou do Azure Synapse para copiar dados de e para o Banco de Dados SQL do Azure, e como usar o Fluxo de Dados para transformar dados no Banco de Dados SQL do Azure. Para saber mais, leia o artigo introdutório do Azure Data Factory ou do Azure Synapse Analytics.
Funcionalidades com suporte
Este conector do Banco de Dados SQL do Azure é 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 | ① ② | ✓ |
Atividade GetMetadata | ① ② | ✓ |
Atividade de Script | ① ② | ✓ |
Stored procedure activity (Atividade de procedimento armazenado) | ① ② | ✓ |
① Runtime de integração do Azure ② Runtime de integração auto-hospedada
Para a atividade Copy, este conector do Banco de Dados SQL do Azure dá suporte a estas funções:
- Copiar dados usando a autenticação de token do Microsoft Entra e autenticação do SQL com uma entidade de serviço ou identidades gerenciadas para os recursos do Azure.
- Como uma origem, recuperar dados usando uma consulta SQL ou um procedimento armazenado. Você também pode optar por copiar paralelamente de uma fonte do Banco de Dados SQL do Azure, confira a seção Cópia paralela do banco de dados SQL para obter detalhes.
- Como coletor, criar automaticamente a tabela de destino, se não existir, com base no esquema de origem, acrescentar dados a uma tabela ou invocar um procedimento armazenado com lógica personalizada durante a cópia.
Se você usar a camada sem servidor do Banco de Dados SQL do Azure, observe que quando o servidor estiver pausado, a execução da atividade falhará em vez de esperar que a retomada automática esteja pronta. Você pode adicionar uma repetição de atividade ou encadear outras atividades para garantir que o servidor esteja ativo na execução real.
Importante
Se você copiar dados usando o runtime de integração do Azure, configure uma regra de firewall no nível do servidor para que os serviços do Azure possam acessar o servidor. Se você copiar dados usando um runtime de integração auto-hospedada, configure o firewall para permitir o intervalo de IP apropriado. Esse intervalo inclui o IP da máquina usado para se conectar ao Banco de Dados SQL do Azure.
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 do Banco de Dados SQL do Azure usando a interface do usuário
Siga as etapas abaixo para criar um serviço vinculado do Banco de Dados SQL do Azure na interface de usuário do portal do Azure.
Navegue até a guia Gerenciar no workspace do Azure Data Factory ou do Synapse, selecione Serviços Vinculados e clique em Novo:
Pesquise SQL e selecione o conector do Banco de Dados SQL do Azure.
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 a seguir fornecem detalhes sobre as propriedades usadas para definir entidades de pipeline do Azure Data Factory ou do Azure Synapse específicas de um conector do Banco de Dados SQL do Azure.
Propriedades do serviço vinculado
A versão recomendada do conector do Banco de Dados SQL do Azure dá suporte ao TLS 1.3. Consulte esta seção para atualizar a versão do conector do Banco de Dados SQL do Azure daquele Herdado. Para obter os detalhes da propriedade, consulte as seções correspondentes.
Dica
Se você encontrar erro com o código de erro "UserErrorFailedToConnectToSqlServer" e uma mensagem como "O limite da sessão para o banco de dados é XXX e foi atingido," adicione Pooling=false
à cadeia de conexão e tente novamente. Pooling=false
também é recomendado para a configuração de serviço vinculado do tipo SHIR (Runtime de Integração Auto-Hospedada). O pooling e outros parâmetros de conexão podem ser adicionados como novos nomes de parâmetro e valores na seção Propriedades de conexão adicionais do formulário de criação de serviço vinculado.
Versão recomendada
Essas propriedades genéricas têm suporte para um serviço vinculado do Banco de Dados SQL do Azure quando você aplica a versão recomendada:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade tipo deve ser definida como AzureSqlDatabase. | Yes |
Servidor | O nome ou o endereço de rede da instância de servidor SQL à qual você deseja se conectar. | Yes |
Banco de Dados | O nome do banco de dados. | Yes |
authenticationType | O tipo usado para autenticação. Os valores permitidos são SQL (padrão), ServicePrincipal, SystemAssignedManagedIdentity, UserAssignedManagedIdentity. Acesse a seção de autenticação relevante em propriedades e pré-requisitos específicos. | Yes |
alwaysEncryptedSettings | Especifique as informações alwaysencryptedsettings necessárias para habilitar o Always Encrypted e proteger dados confidenciais armazenados em um SQL Server usando a identidade gerenciada ou a entidade de serviço. Para obter mais informações, confira o exemplo JSON após a tabela e a seção Usar o Always Encrypted. Se não for especificada, a configuração padrão sempre criptografada estará desabilitada. | Não |
criptografar | Indique se a criptografia TLS é necessária em todos os dados enviados entre o cliente e o servidor. Opções: obrigatória (para true, padrão)/opcional (para false)/strict. | Não |
trustServerCertificate | Indica se o canal será criptografado ao passar pela cadeia de certificados para validar a confiança. | Não |
hostNameInCertificate | O nome do host a ser usado ao validar o certificado do servidor para a conexão. Quando não é especificado, o nome do servidor é usado para validação de certificado. | Não |
connectVia | Esse Integration Runtime é usado para se conectar ao armazenamento de dados. Você poderá usar o runtime de integração do Azure ou um runtime de integração auto-hospedada se o seu armazenamento de dados estiver localizado em uma rede privada. Se não especificado, o Azure Integration Runtime padrão será usado. | Não |
Consulte a tabela abaixo para obter as propriedades de conexão adicionais:
Propriedade | Descrição | Obrigatório |
---|---|---|
applicationIntent | O tipo de carga de trabalho de aplicativo ao conectar-se a um servidor. Os valores permitidos são ReadOnly e ReadWrite . |
Não |
connectTimeout | O período time (em segundos) a aguardar para uma conexão ao servidor antes de terminar a tentativa e gerar um erro. | Não |
connectRetryCount | O número de tentativas de reconexões após identificar uma falha por conexão ociosa. O valor deve ser um número inteiro entre 0 e 255. | Não |
connectRetryInterval | O tempo (em segundos) entre cada tentativa de reconexão após identificar uma falha por conexão ociosa. O valor deve ser um número inteiro entre 1 e 60. | Não |
loadBalanceTimeout | O tempo mínimo (em segundos) para que a conexão resida no pool de conexões antes da conexão ser destruída. | Não |
commandTimeout | Define o tempo de espera (em segundos) antes de encerrar a tentativa de executar um comando e antes de gerar um erro. | Não |
integratedSecurity | Os valores permitidos são true e false . Ao especificar false , indique se userName e password estão especificados na conexão. Ao especificar true , indica se as credenciais atuais da conta do Windows são usadas para autenticação. |
Não |
failoverPartner | O nome ou endereço do servidor parceiro ao qual se conectar se o servidor primário estiver inativo. | Não |
maxPoolSize | O número máximo de conexões permitidas no pool de conexões para a conexão específica. | Não |
minPoolSize | O número mínimo de conexões permitidas no pool de conexões para a conexão específica. | Não |
multipleActiveResultSets | Os valores permitidos são true e false . Ao especificar true , um aplicativo pode manter vários conjuntos de resultados ativos múltiplos (MARS). Ao você especificar false , um aplicativo deve processar ou cancelar todos os conjuntos de resultados de um lote antes de poder executar outros lotes nessa conexão. |
Não |
multiSubnetFailover | Os valores permitidos são true e false . Se o aplicativo estiver se conectando a um AG (grupo de disponibilidade) AlwaysOn em diferentes sub-redes, definir true como true fornece uma detecção e uma conexão mais rápida ao servidor atualmente ativo. |
Não |
packetSize | Tamanho em bytes dos pacotes de rede usados para comunicar-se com uma instância de servidor. | Não |
pooling | Os valores permitidos são true e false . Ao especificar true , a conexão será colocada em pool. Ao especificar false , a conexão será aberta explicitamente toda vez que a conexão for solicitada. |
Não |
Autenticação do SQL
Para usar a autenticação SQL, além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
userName | O nome de usuário usado para se conectar ao servidor. | Yes |
password | A senha do nome de usuário. Marque esse campo como SecureString para armazená-lo com segurança. Você também pode referenciar um segredo armazenado no Azure Key Vault. | Yes |
Exemplo: uso de autenticação SQL
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exemplo: senha no Azure Key Vault
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exemplo: Usar o Always Encrypted
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SQL",
"userName": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"alwaysEncryptedSettings": {
"alwaysEncryptedAkvAuthType": "ServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalKey": {
"type": "SecureString",
"value": "<service principal key>"
}
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Autenticação de entidade de serviço
Para usar a autenticação de entidade de serviço, além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
servicePrincipalId | Especifique a ID do cliente do aplicativo. | Yes |
servicePrincipalCredential | A credencial da entidade de serviço. Especifique a chave do aplicativo. Marque este campo como um SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. | Yes |
locatário | Especifique as informações de locatário, como nome de domínio ou ID do locatário, em que o aplicativo reside. Recupere-as passando o mouse no canto superior direito do Portal do Azure. | Sim |
azureCloudType | Para autenticação da entidade de serviço, especifique o tipo de ambiente em nuvem do Azure em que seu aplicativo do Microsoft Entra está registrado. Os valores permitidos são AzurePublic, AzureChina, AzureUsGovernment e AzureGermany. Por padrão, o data factory ou o ambiente de nuvem do pipeline do Synapse é usado. |
Não |
Você também precisa seguir as etapas abaixo:
Crie um aplicativo do Microsoft Entra no portal do Azure. Anote o nome do aplicativo e os seguintes valores que definem o serviço vinculado:
- ID do aplicativo
- Chave do aplicativo
- ID do locatário
Provisione um administrador do Microsoft Entra para o servidor no portal do Azure, caso ainda não tenha feito isso. O administrador do Microsoft Entra deve ser um usuário do Microsoft Entra ou um grupo do Microsoft Entra, mas não pode ser uma entidade de serviço. Essa etapa é feita para que, na próxima etapa, você possa usar uma identidade do Microsoft Entra para criar um usuário de banco de dados contido para a entidade de serviço.
Crie usuários de banco de dados contidos para o diretor de serviços. Conecte-se ao banco de dados do qual ou para o qual deseja copiar dados usando ferramentas como o SQL Server Management Studio, com uma identidade do Microsoft Entra que tenha, pelo menos, a permissão ALTER ANY USER. Execute o seguinte T-SQL:
CREATE USER [your application name] FROM EXTERNAL PROVIDER;
Conceda ao principal de serviço as permissões necessárias, como faria normalmente para usuários do SQL ou outros. Execute o código a seguir. Para mais opções, confira este documento.
ALTER ROLE [role name] ADD MEMBER [your application name];
Configure um serviço vinculado do Banco de Dados SQL do Azure em um espaço de trabalho do Azure Data Factory ou do Synapse.
Exemplo de serviço vinculado que usa autenticação principal de serviço
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"hostNameInCertificate": "<host name>",
"authenticationType": "ServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalCredential": {
"type": "SecureString",
"value": "<application key>"
},
"tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Autenticação de identidade gerenciada atribuída pelo sistema
É possível associar um data factory ou um workspace do Synapse a uma identidade gerenciada atribuída para o sistema para recursos do Azure que representa o serviço ao autenticar em outros recursos do Azure. Você pode usar essa identidade gerenciada para autenticação do Banco de Dados SQL do Azure. Usando essa identidade, o alocador ou o espaço de trabalho do Synapse designados podem acessar e copiar dados de e para o seu banco de dados.
Para usar a autenticação de identidade gerenciada atribuída pelo sistema, especifique as propriedades genéricas descritas na seção anterior e siga estas etapas.
Provisione um administrador do Microsoft Entra para o servidor no portal do Azure, caso ainda não tenha feito isso. O administrador do Microsoft Entra pode ser um usuário do Microsoft Entra ou um grupo do Microsoft Entra. Se você conceder uma função de administrador ao grupo com a identidade gerenciada, ignore as etapas 3 e 4. O administrador tem acesso completo ao banco de dados.
Crie usuários de bancos de dados independentes para a identidade gerenciada. Conecte-se ao banco de dados do qual ou para o qual deseja copiar dados usando ferramentas como o SQL Server Management Studio, com uma identidade do Microsoft Entra que tenha, pelo menos, a permissão ALTER ANY USER. Execute o seguinte T-SQL:
CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
Conceda à identidade gerenciada as permissões necessárias como você faria normalmente para usuários de SQL e outros. Execute o código a seguir. Para mais opções, confira este documento.
ALTER ROLE [role name] ADD MEMBER [your_resource_name];
Configure um serviço vinculado do Banco de Dados SQL do Azure.
Exemplo
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "SystemAssignedManagedIdentity"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Autenticação de identidade gerenciada atribuída pelo usuário
É possível associar um data factory ou um workspace do Synapse a uma identidade gerenciada atribuída pelo usuário que representa o serviço ao autenticar em outros recursos do Azure. Você pode usar essa identidade gerenciada para autenticação do Banco de Dados SQL do Azure. Usando essa identidade, o alocador ou o espaço de trabalho do Synapse designados podem acessar e copiar dados de e para o seu banco de dados.
Para usar a autenticação de identidade gerenciada atribuída pelo usuário, além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
credenciais | Especifique a identidade gerenciada atribuída pelo usuário como o objeto da credencial. | Sim |
Você também precisa seguir as etapas abaixo:
Provisione um administrador do Microsoft Entra para o servidor no portal do Azure, caso ainda não tenha feito isso. O administrador do Microsoft Entra pode ser um usuário do Microsoft Entra ou um grupo do Microsoft Entra. Se você conceder uma função de administrador ao grupo com a identidade gerenciada atribuída pelo usuário, ignore a etapa 3. O administrador tem acesso completo ao banco de dados.
Crie usuários de banco de dados contidos para a identidade gerenciada atribuída pelo usuário. Conecte-se ao banco de dados do qual ou para o qual deseja copiar dados usando ferramentas como o SQL Server Management Studio, com uma identidade do Microsoft Entra que tenha, pelo menos, a permissão ALTER ANY USER. Execute o seguinte T-SQL:
CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
Crie uma ou várias identidades gerenciadas atribuídas pelo usuário e conceda à identidade gerenciada atribuída pelo usuário as permissões necessárias como você normalmente faz para SQL usuários e outros. Execute o código a seguir. Para mais opções, confira este documento.
ALTER ROLE [role name] ADD MEMBER [your_resource_name];
Atribua uma ou várias identidades gerenciadas atribuídas pelo usuário a seu data factory e crie credenciais para cada identidade gerenciada atribuída pelo usuário.
Configure um serviço vinculado do Banco de Dados SQL do Azure.
Exemplo
{
"name": "AzureSqlDbLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"server": "<name or network address of the SQL server instance>",
"database": "<database name>",
"encrypt": "<encrypt>",
"trustServerCertificate": false,
"authenticationType": "UserAssignedManagedIdentity",
"credential": {
"referenceName": "credential1",
"type": "CredentialReference"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Versão herdada
Essas propriedades genéricas têm suporte de um serviço vinculado do Banco de Dados SQL do Azure quando você aplica a versão herdada:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade tipo deve ser definida como AzureSqlDatabase. | Sim |
connectionString | Especifique as informações necessárias para se conectar à instância do Banco de Dados SQL do Azure para a propriedade connectionString. Você também pode colocar uma senha ou chave de entidade de serviço no Azure Key Vault. Se a autenticação for SQL, extraia a configuração password da cadeia de conexão. Para obter mais informações, confira Armazenar credenciais no Azure Key Vault. |
Yes |
alwaysEncryptedSettings | Especifique as informações alwaysencryptedsettings necessárias para habilitar o Always Encrypted e proteger dados confidenciais armazenados em um SQL Server usando a identidade gerenciada ou a entidade de serviço. Para saber mais, confira a seção Usar Always Encrypted. Se não for especificada, a configuração padrão sempre criptografada estará desabilitada. | Não |
connectVia | Esse Integration Runtime é usado para se conectar ao armazenamento de dados. Você poderá usar o runtime de integração do Azure ou um runtime de integração auto-hospedada se o seu armazenamento de dados estiver localizado em uma rede privada. Se não especificado, o Azure Integration Runtime padrão será usado. | Não |
Para diferentes tipos de autenticação, consulte as seguintes seções sobre propriedades específicas e pré-requisitos, respectivamente:
- Autenticação SQL para a versão herdada
- Autenticação da entidade de serviço para a versão herdada
- Autenticação de identidade gerenciada atribuída pelo sistema para a versão herdada
- Autenticação de identidade gerenciada atribuída pelo usuário para a versão herdada
Autenticação SQL para a versão herdada
Para usar a autenticação SQL, especifique as propriedades genéricas descritas na seção anterior.
Autenticação da entidade de serviço para a versão herdada
Para usar a autenticação de entidade de serviço, além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
servicePrincipalId | Especifique a ID do cliente do aplicativo. | Sim |
servicePrincipalKey | Especifique a chave do aplicativo. Marque este campo como um SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. | Sim |
locatário | Especifique as informações de locatário, como nome de domínio ou ID do locatário, em que o aplicativo reside. Recupere-as passando o mouse no canto superior direito do Portal do Azure. | Sim |
azureCloudType | Para autenticação da entidade de serviço, especifique o tipo de ambiente em nuvem do Azure em que seu aplicativo do Microsoft Entra está registrado. Os valores permitidos são AzurePublic, AzureChina, AzureUsGovernment e AzureGermany. Por padrão, o data factory ou o ambiente de nuvem do pipeline do Synapse é usado. |
Não |
Você também precisa seguir as etapas na autenticação da entidade de serviço para conceder a permissão correspondente.
Autenticação de identidade gerenciada atribuída pelo sistema para a versão herdada
Para usar a autenticação de identidade gerenciada atribuída pelo sistema, siga a mesma etapa para a versão recomendada na autenticação de identidade gerenciada atribuída pelo sistema.
Autenticação de identidade gerenciada atribuída pelo usuário para versão herdada
Para usar a autenticação de identidade gerenciada atribuída pelo usuário, siga a mesma etapa para a versão recomendada na autenticação de identidade gerenciada atribuída pelo usuário.
Propriedades do conjunto de dados
Para obter uma lista completa das seções e propriedades disponíveis para definir os conjuntos de dados, confira Conjuntos de dados.
As propriedades a seguir têm suporte no conjunto de dados do Banco de Dados SQL do Azure:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade tipo do conjunto de dados deve ser definida como AzureSqlTable. | Sim |
esquema | Nome do esquema. | Não para fonte, Sim para o coletor |
tabela | Nome da tabela/exibição. | Não para fonte, Sim para o coletor |
tableName | Nome da tabela/exibição com esquema. Essa propriedade é compatível com versões anteriores. Para uma nova carga de trabalho, use schema e table . |
Não para fonte, Sim para o coletor |
Exemplo de propriedades do conjunto de dados
{
"name": "AzureSQLDbDataset",
"properties":
{
"type": "AzureSqlTable",
"linkedServiceName": {
"referenceName": "<Azure SQL Database linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, retrievable during authoring > ],
"typeProperties": {
"schema": "<schema_name>",
"table": "<table_name>"
}
}
}
Propriedades da atividade de cópia
Para obter uma lista completa das seções e propriedades disponíveis para definir as atividades, veja Pipelines. Esta seção fornece uma lista de propriedades suportadas pela origem e pelo coletor do Banco de Dados SQL do Azure.
Banco de Dados SQL do Azure como a origem
Dica
Para carregar dados do Banco de Dados SQL do Azure com eficiência usando o particionamento de dados, saiba mais na seção Cópia paralela no banco de dados SQL.
Para copiar dados do Banco de Dados SQL do Azure, há suporte para as seguintes propriedades na seção origem da atividade Copy:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade type da origem da atividade Copy deve ser definida como AzureSqlSource. O tipo "SqlSource" ainda tem suporte para compatibilidade com versões anteriores. | Sim |
sqlReaderQuery | Essa propriedade usa a consulta SQL personalizada para ler dados. Um exemplo é select * from MyTable . |
Não |
sqlReaderStoredProcedureName | O nome do procedimento armazenado que lê dados da tabela de origem. A última instrução SQL deve ser uma instrução SELECT no procedimento armazenado. | Não |
storedProcedureParameters | Parâmetros para o procedimento armazenado. Valores permitidos são pares de nome ou valor. Os nomes e o uso de maiúsculas e minúsculas de parâmetros devem corresponder aos nomes e o uso de maiúsculas e minúsculas dos parâmetros do procedimento armazenado. |
Não |
isolationLevel | Especifica o comportamento de bloqueio de transação para a origem do SQL. Os valores permitidos são: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Se não for especificado, o nível de isolamento padrão do banco de dados será usado. Veja este documento para obter mais detalhes. | Não |
partitionOptions | Especifica as opções de particionamento de dados usadas para carregar dados do Banco de Dados SQL do Azure. Os valores permitidos são: None (padrão), PhysicalPartitionsOfTable e DynamicRange. Quando uma opção de partição está habilitada (ou seja, não None ), o grau de paralelismo para carregar dados simultaneamente do Banco de Dados SQL do Azure é controlado pela configuração parallelCopies na atividade Copy. |
Não |
partitionSettings | Especifique o grupo de configurações para o particionamento de dados. Aplicar quando a opção de partição não for None . |
No |
Em partitionSettings : |
||
partitionColumnName | Especifique o nome da coluna de origem no tipo inteiro ou data/datetime (int , smallint , bigint , date , smalldatetime , datetime , datetime2 ou datetimeoffset ) que será usado pelo particionamento de intervalo para cópia paralela. Se não especificado, o índice chave primária da tabela será detectada automaticamente e usado como a coluna de partição.Aplicar quando a opção de partição for DynamicRange . Se você usar uma consulta para recuperar os dados de origem, conecte ?DfDynamicRangePartitionCondition na cláusula WHERE. Para ver um exemplo, confira a seção Cópia paralela do banco de dados SQL. |
Não |
partitionUpperBound | O valor máximo da coluna de partição para divisão do intervalo de partição. Esse valor é usado para decidir o stride da partição, e não para filtrar as linhas na tabela. Todas as linhas da tabela ou do resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detectará o valor automaticamente. Aplicar quando a opção de partição for DynamicRange . Para ver um exemplo, confira a seção Cópia paralela do banco de dados SQL. |
Não |
partitionLowerBound | O valor mínimo da coluna de partição para divisão do intervalo de partição. Esse valor é usado para decidir o stride da partição, e não para filtrar as linhas na tabela. Todas as linhas da tabela ou do resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detectará o valor automaticamente. Aplicar quando a opção de partição for DynamicRange . Para ver um exemplo, confira a seção Cópia paralela do banco de dados SQL. |
No |
Observe os seguintes pontos:
- Se sqlReaderQuery for especificado para AzureSqlSource, a atividade Copy executa essa consulta em relação à fonte do Banco de Dados SQL do Azure para obter os dados. Você também pode especificar um procedimento armazenado especificando o sqlReaderStoredProcedureName e o storedProcedureParameters se o procedimento armazenado usa parâmetros.
- ao usar um procedimento armazenado na origem para recuperar dados, observe que, se o procedimento armazenado for projetado para retornar um esquema diferente quando um valor de parâmetro diferente for passado, você poderá ter uma falha ou um resultado inesperado ao importar o esquema da interface do usuário ou ao copiar dados para o banco de dados SQL com a criação automática de tabela.
Exemplo de consulta SQL
"activities":[
{
"name": "CopyFromAzureSQLDatabase",
"type": "Copy",
"inputs": [
{
"referenceName": "<Azure SQL Database input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "AzureSqlSource",
"sqlReaderQuery": "SELECT * FROM MyTable"
},
"sink": {
"type": "<sink type>"
}
}
}
]
Exemplo de procedimento armazenado
"activities":[
{
"name": "CopyFromAzureSQLDatabase",
"type": "Copy",
"inputs": [
{
"referenceName": "<Azure SQL Database input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "AzureSqlSource",
"sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
"storedProcedureParameters": {
"stringData": { "value": "str3" },
"identifier": { "value": "$$Text.Format('{0:yyyy}', <datetime parameter>)", "type": "Int"}
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
Definição do procedimento armazenado
CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
@stringData varchar(20),
@identifier int
)
AS
SET NOCOUNT ON;
BEGIN
select *
from dbo.UnitTestSrcTable
where dbo.UnitTestSrcTable.stringData != stringData
and dbo.UnitTestSrcTable.identifier != identifier
END
GO
Banco de Dados SQL do Azure como o coletor
Dica
Saiba mais sobre os comportamentos, as configurações e as melhores práticas de gravação com suporte na seção Melhor prática para carregar dados no Banco de Dados SQL do Azure.
Para copiar dados para o Banco de Dados SQL do Azure, há suporte para as seguintes propriedades na seção coletor da atividade Copy:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade type do coletor da atividade Copy deve ser definida como AzureSqlSink. O tipo "SqlSink" ainda tem suporte para compatibilidade com versões anteriores. | Sim |
preCopyScript | Especifique uma consulta SQL para que a atividade Copy seja executada antes de gravar dados no Banco de Dados SQL do Azure. É chamado apenas uma vez por execução de cópia. Use essa propriedade para limpar os dados pré-carregados. | Não |
tableOption | Especifica se a tabela do coletor deve ser criada automaticamente caso ela não exista com base no esquema de origem. Não há suporte para a criação de tabela automática quando o coletor especifica o procedimento armazenado. Os valores permitidos são none (padrão) e autoCreate . |
Não |
sqlWriterStoredProcedureName | O nome do procedimento armazenado que define como aplicar dados de origem em uma tabela de destino. Este procedimento armazenado é chamado por lote. Para operações executadas apenas uma vez e que não tenham relação alguma com os dados de origem, por exemplo, excluir ou truncar, use a propriedade preCopyScript .Confira o exemplo em Invocar um procedimento armazenado de um coletor SQL. |
Não |
storedProcedureTableTypeParameterName | O nome do parâmetro do tipo de tabela especificado no procedimento armazenado. | No |
sqlWriterTableType | O nome do tipo de tabela a ser usado no procedimento armazenado. A atividade de cópia disponibiliza aqueles dados sendo movidos em uma tabela temporária com esse tipo de tabela. O código de procedimento armazenado pode mesclar os dados que estão sendo copiados com os dados existentes. | Não |
storedProcedureParameters | Parâmetros para o procedimento armazenado. Valores permitidos são pares de nome e valor. Nomes e uso de maiúsculas e minúsculas de parâmetros devem corresponder aos nomes e o uso de maiúsculas e minúsculas dos parâmetros do procedimento armazenado. |
Não |
writeBatchSize | Número de linhas a serem inseridas na tabela SQL por lote. O valor permitido é inteiro (número de linhas). Por padrão, o serviço determina dinamicamente o tamanho do lote apropriado com base no tamanho da linha. |
No |
writeBatchTimeout | O tempo de espera para que a operação de inserção, upsert e procedimento armazenado seja concluída antes de atingir o tempo limite. Os valores permitidos são para o timespan. Um exemplo é "00:30:00" por 30 minutos. Se nenhum valor for especificado, o tempo limite padrão será "00:30:00". |
Não |
disableMetricsCollection | O serviço coleta métricas como DTUs do Banco de Dados SQL do Azure para otimização e recomendações de desempenho de cópia, o que introduz acesso mestre adicional ao banco de dados. Se você estiver preocupado com esse comportamento, especifique true para desativá-lo. |
Não (o padrão é false ) |
maxConcurrentConnections | O limite superior de conexões simultâneas estabelecidas com o armazenamento de dados durante a execução da atividade. Especifique um valor somente quando desejar limitar as conexões simultâneas. | Nenhum |
WriteBehavior | Especifique o comportamento de gravação da atividade de cópia para carregar dados Banco de Dados SQL do Azure. O valor permitido é insert e upsert. Por padrão, o serviço usa insert para carregar dados. |
Não |
upsertSettings | Especifique o grupo de configurações para comportamento de gravação. Aplicar quando a opção WriteBehavior for Upsert . |
Não |
Em upsertSettings : |
||
useTempDB | Especifique se deseja usar a tabela temporária global ou a tabela física como a tabela provisória para upsert. Por padrão, o serviço usa a tabela temporária global como a tabela provisória. O valor é true . |
Não |
interimSchemaName | Especifique o esquema provisório para criar a tabela provisória se a tabela física for usada. Observação: o usuário precisa ter a permissão para criar e excluir a tabela. Por padrão, a tabela provisória compartilhará o mesmo esquema que a tabela de coletor. Aplicar quando a opção useTempDB for False . |
Não |
chaves | Especifique os nomes de coluna para identificação de linha exclusiva. Uma única chave ou uma série de chaves pode ser usada. Se não for especificada, a chave primária será usada. | Não |
Exemplo 1: acrescentar dados
"activities":[
{
"name": "CopyToAzureSQLDatabase",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure SQL Database output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzureSqlSink",
"tableOption": "autoCreate",
"writeBatchSize": 100000
}
}
}
]
Exemplo 2: invocar um procedimento armazenado durante a cópia
Saiba mais detalhes em Invocar um procedimento armazenado de um coletor SQL.
"activities":[
{
"name": "CopyToAzureSQLDatabase",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure SQL Database output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzureSqlSink",
"sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
"storedProcedureTableTypeParameterName": "MyTable",
"sqlWriterTableType": "MyTableType",
"storedProcedureParameters": {
"identifier": { "value": "1", "type": "Int" },
"stringData": { "value": "str1" }
}
}
}
}
]
Exemplo 3: dados upsert
"activities":[
{
"name": "CopyToAzureSQLDatabase",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure SQL Database output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "AzureSqlSink",
"tableOption": "autoCreate",
"writeBehavior": "upsert",
"upsertSettings": {
"useTempDB": true,
"keys": [
"<column name>"
]
},
}
}
}
]
Cópia paralela do banco de dados SQL
O conector do Banco de Dados SQL do Azure na atividade Copy fornece particionamento de dados interno para copiar dados em paralelo. Você pode encontrar opções de particionamento de dados na guia Origem da atividade de cópia.
Quando você habilita a cópia particionada, a atividade Copy executa consultas paralelas com relação à sua origem do Banco de Dados SQL do Azure para carregar dados por partições. O grau paralelo é controlado pela configuração do parallelCopies
na atividade de cópia. Por exemplo, ao definir parallelCopies
como quatro, o serviço gera e executa simultaneamente quatro consultas com base na opção de partição e nas configurações especificadas. Cada consulta recupera uma parte dos dados do Banco de Dados SQL do Azure.
É recomendável habilitar a cópia paralela com o particionamento de dados, especialmente quando você carrega grandes quantidades de dados do Banco de Dados SQL do Azure. Veja a seguir as configurações sugeridas para cenários diferentes. Ao copiar dados para o armazenamento de dados baseado em arquivo, recomendamos gravá-los em uma pasta como vários arquivos (apenas especifique o nome da pasta) para ter um desempenho melhor do que gravar em um arquivo.
Cenário | Configurações sugeridas |
---|---|
Carregamento completo de uma tabela grande com partições físicas. | Opção de partição: partições físicas da tabela. Durante a execução, o serviço detecta automaticamente as partições físicas e copia os dados por partição. Para verificar se a tabela tem partição física, confira esta consulta. |
Carregamento completo de uma tabela grande, sem partições físicas e com uma coluna de inteiro ou de datetime para o particionamento de dados. | Opções de partição: partição de intervalo dinâmico. Coluna de partição (opcional): especifique a coluna usada para particionar dados. Se não for especificada, a coluna de chave primária ou de índice será usada. Limite superior da partição e limite inferior da partição (opcional): especifique se deseja determinar o stride da partição. A finalidade não é filtrar as linhas na tabela, todas as linhas da tabela serão particionadas e copiadas. Se não for especificado, a atividade Copy detectará os valores automaticamente. Por exemplo, se a “ID” da coluna de partição tiver valores no intervalo de 1 a 100 e você definir o limite inferior como 20 e o limite superior como 80, com a cópia paralela definida como 4, o serviço recuperará dados por 4 IDs de partição no intervalo <=20, [21, 50], [51, 80], e >=81, respectivamente. |
Carregar uma grande quantidade de dados usando uma consulta personalizada, sem partições físicas, com uma coluna de inteiro ou data/datetime para o particionamento de dados. | Opções de partição: partição de intervalo dinâmico. Consulta: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> .Coluna de partição: especifique a coluna usada para particionar dados. Limite superior da partição e limite inferior da partição (opcional): especifique se deseja determinar o stride da partição. A finalidade não é filtrar as linhas na tabela, todas as linhas na consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detectará o valor automaticamente. Por exemplo, se a “ID” da coluna de partição tiver valores no intervalo de 1 a 100 e você definir o limite inferior como 20 e o limite superior como 80, com a cópia paralela definida como 4, o serviço recuperará dados por 4 IDs de partição no intervalo <=20, [21, 50], [51, 80], e >=81, respectivamente. Veja mais exemplos de consultas para diferentes cenários: 1. Consultar a tabela inteira: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition 2. Consultar em uma tabela com seleção de coluna e filtros de cláusula "where" adicionais: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> 3. Consultar com sub-consultas: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> 4. Consultar com partição na sub-consulta: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
Melhores práticas para carregar dados com a opção de partição:
- Escolha a coluna distinta como coluna de partição (como chave primária ou chave exclusiva) para evitar a distorção de dados.
- Se a tabela tiver uma partição interna, use a opção de partição "Partições físicas da tabela" para ter um melhor desempenho.
- Se você usa o Azure Integration Runtime para copiar dados, pode definir "DIUs (unidades de integração de dados)" maiores (>4) para utilizar mais recursos de computação. Verifique os cenários aplicáveis.
- O "grau de paralelismo de cópia" controla os números de partições. Às vezes, definir um número muito grande afeta o desempenho; é recomendável definir esse número como (DIU ou número de nós de IR auto-hospedados) * (2 a 4).
Exemplo: carregamento completo de uma tabela grande com partições físicas
"source": {
"type": "AzureSqlSource",
"partitionOption": "PhysicalPartitionsOfTable"
}
Exemplo: consulta com a partição do intervalo dinâmico
"source": {
"type": "AzureSqlSource",
"query": "SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>",
"partitionOption": "DynamicRange",
"partitionSettings": {
"partitionColumnName": "<partition_column_name>",
"partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
"partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
}
}
Exemplo de consulta para verificar a partição física
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
Se a tabela tiver uma partição física, você verá "HasPartition" como "yes" conforme segue.
Melhor prática para carregar dados no Banco de Dados SQL do Azure
Quando você copia dados para o Banco de Dados SQL do Azure, talvez um comportamento de gravação diferente seja necessário:
- Acrescentar: meus dados de origem só têm registros novos.
- Upsert: meus dados de origem têm inserções e atualizações.
- Substituir: quero recarregar uma tabela de dimensão inteira a cada vez.
- Gravar com lógica personalizada: preciso de processamento adicional antes da inserção final na tabela de destino.
Veja as respectivas seções sobre como configurar no serviço, incluindo as melhores práticas.
Acrescentar dados
Acrescentar dados é o comportamento padrão desse conector de coletor do Banco de Dados SQL do Azure. O serviço faz uma inserção em massa para gravar na tabela de maneira eficiente. Você pode configurar a origem e o coletor de acordo com a atividade Copy.
Upsert data
A atividade Copy agora dá suporte ao carregamento nativo de dados em uma tabela temporária de banco de dados e, em seguida, atualize os dados na tabela de coletor se a chave existir e, caso contrário, insira novos dados. Para saber mais sobre as configurações de upsert em atividades de cópia, confira Banco de Dados SQL do Azure como coletor.
Substituir a tabela inteira
Você pode configurar a propriedade preCopyScript no coletor da atividade Copy. Nesse caso, para cada atividade Copy executada, o serviço executa primeiro o script. Em seguida, ele executa a cópia para inserir os dados. Por exemplo, para substituir a tabela inteira pelos dados mais recentes, especifique um script para excluir primeiro todos os registros, antes de carregar em massa os novos dados da origem.
Gravar dados com lógica personalizada
As etapas para gravar dados com lógica personalizada são semelhantes às descritas na seção Executar upsert de dados. Quando você precisa aplicar processamento adicional antes da inserção final dos dados de origem na tabela de destino, pode carregar em uma tabela de preparo e, em seguida, invocar a atividade de procedimento armazenado ou invocar um procedimento armazenado no coletor da atividade Copy para aplicar os dados ou usar o fluxo de dados de mapeamento.
Invocar um procedimento armazenado de um coletor SQL
Quando você copiar dados para o Banco de Dados SQL do Azure, você também pode configurar e invocar um procedimento armazenado especificado pelo usuário com parâmetros adicionais em cada lote da tabela de origem. O recurso de procedimento armazenado se beneficia de parâmetros com valores de tabela.
Você pode usar um procedimento armazenado quando os mecanismos internos de cópia não atendem à finalidade. Um exemplo é quando você deseja aplicar processamento adicional antes da inserção final dos dados de origem na tabela de destino. Alguns exemplos de processamento adicional são colunas de mesclagem, pesquisa de outros valores e inserção em mais de uma tabela.
A amostra a seguir mostra como usar um procedimento armazenado para fazer um upsert em uma tabela no Banco de Dados SQL do Azure. Suponha que os dados de entrada e a tabela Marketing de recebimento tenham três colunas: ID do perfil, Estado e Categoria. Faça o upsert com base na coluna ProfileID e aplique-o apenas a uma categoria específica denominada "ProductA".
No banco de dados, defina o tipo de tabela com o mesmo nome que sqlWriterTableType. O esquema do tipo de tabela é o mesmo que o esquema retornado pelos dados de entrada.
CREATE TYPE [dbo].[MarketingType] AS TABLE( [ProfileID] [varchar](256) NOT NULL, [State] [varchar](256) NOT NULL, [Category] [varchar](256) NOT NULL )
No banco de dados, defina o procedimento armazenado com o mesmo nome que sqlWriterStoredProcedureName. Ele manipula os dados de entrada da sua origem especificada e mescla na tabela de saída. O nome do parâmetro do tipo de tabela no procedimento armazenado deve ser o mesmo que o tableName definido no conjunto de dados.
CREATE PROCEDURE spOverwriteMarketing @Marketing [dbo].[MarketingType] READONLY, @category varchar(256) AS BEGIN MERGE [dbo].[Marketing] AS target USING @Marketing AS source ON (target.ProfileID = source.ProfileID and target.Category = @category) WHEN MATCHED THEN UPDATE SET State = source.State WHEN NOT MATCHED THEN INSERT (ProfileID, State, Category) VALUES (source.ProfileID, source.State, source.Category); END
Na pipeline do Azure Data Factory ou do Synapse, defina a seção Coletor do SQL na atividade Copy da seguinte maneira:
"sink": { "type": "AzureSqlSink", "sqlWriterStoredProcedureName": "spOverwriteMarketing", "storedProcedureTableTypeParameterName": "Marketing", "sqlWriterTableType": "MarketingType", "storedProcedureParameters": { "category": { "value": "ProductA" } } }
Ao gravar dados no Banco de Dados SQL do Azure usando o procedimento armazenado, o coletor divide os dados de origem em minilotes e, em seguida, faz a inserção para que a consulta extra no procedimento armazenado possa ser executada várias vezes. Se você tiver a consulta para que a atividade de cópia seja executada antes de gravar dados no Banco de Dados SQL do Azure, não é recomendável adicioná-la ao procedimento armazenado, adicione-a na caixa Script de pré-cópia.
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 SQL do Azure. Para obter mais informações, confira transformação de origem e transformação do coletor nos fluxos de dados de mapeamento.
Transformação de origem
As configurações específicas para o Banco de Dados SQL do Azure estão disponíveis na guia Opções de Origem da transformação de origem.
Entrada: selecione se você apontar sua origem em uma tabela (equivalente a Select * from <table-name>
) ou inserir uma consulta SQL personalizada.
Consulta: se você selecionar Consulta no campo de entrada, insira uma consulta SQL para sua origem. Essa configuração substitui qualquer tabela que você tenha escolhido no conjunto de dados. Cláusulas Order By não são compatíveis 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. Essa consulta produzirá uma tabela de origem que você pode usar em seu fluxo de dados. O uso de consultas também é uma ótima maneira de reduzir linhas para testes ou pesquisas.
Dica
A CTE (expressão de tabela comum) no SQL não é compatível com o modo Consulta do fluxo de dados de mapeamento, pois o pré-requisito de uso desse modo é que as consultas possam ser usadas na cláusula FROM da consulta SQL, mas as CTEs não podem fazer isso. Para usar CTEs, você precisa criar um procedimento armazenado usando a seguinte consulta:
CREATE PROC CTESP @query nvarchar(max)
AS
BEGIN
EXECUTE sp_executesql @query;
END
Depois, use o modo Procedimento armazenado na transformação de origem do fluxo de dados de mapeamento e defina o @query
como o exemplo with CTE as (select 'test' as a) select * from CTE
. Depois, você poderá usar CTEs conforme o esperado.
Procedimento armazenado: escolha esta opção se desejar gerar uma projeção e dados de origem de um procedimento armazenado executado no banco de dado de origem. Você pode digitar o esquema, o nome do procedimento e os parâmetros ou clicar em atualizar para solicitar que o serviço descubra os esquemas e os nomes dos procedimentos. Em seguida, você pode clicar em Importar para importar todos os parâmetros de procedimento usando o formulário @paraName
.
- Exemplo do SQL:
Select * from MyTable where customerId > 1000 and customerId < 2000
- Exemplo de SQL parametrizado:
"select * from {$tablename} where orderyear > {$year}"
Tamanho do lote: insira um tamanho de lote para dividir dados grandes em leituras.
Nível de isolamento: o padrão para as origens SQL no fluxo de dados de mapeamento é leitura não confirmada. Você pode alterar o nível de isolamento aqui para um destes valores:
- Leitura Confirmada
- Leitura Não Confirmada
- Leitura repetida
- Serializável
- Nenhum (ignorar o nível de isolamento)
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. Para habilitar a extração incremental com descompasso de esquema, escolha tabelas baseadas em colunas Incrementais/Marca d'água em vez de tabelas habilitadas para Captura de Dados de Alteração Nativa.
Coluna 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.
Habilitar a captura de dados de alterações nativas (versão prévia): use essa opção para informar ao ADF para processar apenas os dados delta capturados pela tecnologia de captura de dados de alterações do SQL desde a última vez que o pipeline executou. Com essa opção, os dados delta, incluindo a inserção, atualização e exclusão de linha, serão carregados automaticamente sem a necessidade de nenhuma coluna incremental. Será necessário habilitar a captura de dados de alterações no BD do SQL do Azure antes de usar essa opção no ADF. Para obter mais informações sobre essa opção no ADF, consulte captura de dados de alterações nativas.
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.
Transformação de coletor
As configurações específicas para o Banco de Dados SQL do Azure estão disponíveis na guia Configurações da transformação de coletor.
Método Update: determina 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. Para atualizações, upserts e exclusões, é necessário selecionar uma coluna de chave ou colunas para determinar qual linha alterar.
O nome da coluna escolhida como a chave será usado pelo serviço como parte da atualização, execução de upsert e exclusão subsequentes. Portanto, você deve escolher uma coluna existente no mapeamento do coletor. Se você não quiser gravar o valor nessa coluna de chave, clique em "Ignorar a gravação de colunas de chave".
Você pode parametrizar a coluna de chave usada aqui para atualizar a tabela do Banco de Dados SQL do Azure de destino. Se você tiver várias colunas para uma chave composta, clique em "Expressão Personalizada" e você poderá adicionar conteúdo dinâmico usando a linguagem de expressão do fluxo de dados, que pode incluir uma matriz de cadeias de caracteres com nomes de coluna para uma chave composta.
Ação de tabela: determina se deve-se recriar ou remover todas as linhas da tabela de destino antes da gravação.
- Nenhuma: nenhuma ação será feita na tabela.
- Recriar: a tabela será descartada e recriada. Necessário ao criar uma tabela dinamicamente.
- Truncar: todas as linhas da tabela de destino serão removidas.
Tamanho do lote: controla quantas linhas estão sendo gravadas em cada bucket. 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.
Usar TempDB: por padrão, o serviço usará uma tabela temporária global para armazenar dados como parte do processo de carregamento. Como alternativa, você pode desmarcar a opção "Usar TempDB" e, em vez disso, solicitar ao serviço para armazenar a tabela temporária em um banco de dados de usuário localizado no banco de dados usado para esse coletor.
Scripts SQL prévios e posteriores: Insira scripts SQL de várias linhas que serão executados antes (pré-processamento) e após (pós-processamento) os dados serem gravados no banco de dados do coletor
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
Tratamento da linha de erros
Ao gravar no Banco de Dados SQL do Azure, determinadas linhas de dados podem falhar devido a restrições definidas pelo destino. Alguns erros comuns incluem:
- Cadeia de caracteres ou dados de binário seriam truncados na tabela
- Não é possível inserir o valor NULL na coluna
- A instrução INSERT está em conflito com a restrição CHECK
Por padrão, uma execução de fluxo de dados falhará no primeiro erro obtido. É possível optar por continuar se houver erro que permite que o fluxo de dados seja concluído mesmo se as linhas individuais tiverem erros. O serviço fornece opções diferentes para você identificar essas linhas de erro.
Confirmação de transação: escolha se os dados são gravados em uma única transação ou em lotes. Uma única transação proporciona um desempenho pior, mas os dados gravados não ficarão visíveis para outras pessoas até que a transação seja concluída.
Dados rejeitados na saída: se esta opção estiver habilitada, você poderá gerar as linhas de erro em um arquivo CSV no Armazenamento de Blobs do Azure ou em uma conta do Azure Data Lake Storage Gen2 de sua escolha. Isso gravará as linhas de erro com três colunas adicionais: a operação SQL como INSERT ou UPDATE, o código de erro do fluxo de dados e a mensagem de erro na linha.
Relatar sucesso no erro: se esta opção estiver habilitada, o fluxo de dados será marcado como sucesso, mesmo que linhas de erro sejam encontradas.
Mapeamento do tipo de dados do Banco de Dados SQL do Azure
Quando os dados são copiados no Banco de Dados SQL do Azure, os seguintes mapeamentos são usados dos tipos de dados do Banco de Dados SQL do Azure para os tipos de dados temporários do Azure Data Factory. Os mesmos mapeamentos são usados pelo recurso de pipeline do Synapse, que implementa o Azure Data Factory diretamente. Para saber mais sobre como a atividade de cópia mapeia o tipo de dados e esquema de origem para o coletor, consulte Mapeamentos de tipo de dados e esquema.
Tipo de dados do Banco de Dados SQL do Azure | Tipo de dados provisório do Data Factory |
---|---|
BIGINT | Int64 |
binary | Byte[] |
bit | Boolean |
char | String, Char[] |
date | Datetime |
Datetime | Datetime |
datetime2 | Datetime |
Datetimeoffset | DateTimeOffset |
Decimal | Decimal |
FILESTREAM attribute (varbinary(max)) | Byte[] |
Float | Double |
image | Byte[] |
INT | Int32 |
money | Decimal |
NCHAR | String, Char[] |
ntext | String, Char[] |
numeric | Decimal |
NVARCHAR | String, Char[] |
real | Single |
rowversion | Byte[] |
smalldatetime | Datetime |
SMALLINT | Int16 |
SMALLMONEY | Decimal |
sql_variant | Objeto |
text | String, Char[] |
time | TimeSpan |
timestamp | Byte[] |
TINYINT | Byte |
UNIQUEIDENTIFIER | Guid |
varbinary | Byte[] |
varchar | String, Char[] |
Xml | String |
Observação
Para tipos de dados que mapeiam para o tipo provisório Decimal, no momento, a atividade Copy dá suporte à precisão de até 28. Se você tiver dados com precisão maior do que 28, converta para uma cadeia de caracteres na consulta SQL.
Pesquisar propriedades de atividade
Para saber detalhes sobre as propriedades, verifique Atividade de pesquisa.
Propriedades de atividade GetMetadata
Para saber detalhes sobre as propriedades, verifique Atividade GetMetadata
Como usar o Always Encrypted
Ao copiar dados de/para o Banco de Dados SQL do Azure com o Always Encrypted, siga as etapas abaixo:
Armazene a chave mestra de coluna (CMK) em um Azure Key Vault. Saiba mais sobre como configurar o Always Encrypted usando o Azure Key Vault
Obtenha acesso ao cofre de chaves em que a CMK (Chave Mestra da Coluna)é armazenada. Veja este artigo para obter as permissões necessárias.
Crie um serviço vinculado para se conectar ao banco de dados SQL e habilite a função “Always Encrypted” usando a identidade gerenciada ou a entidade de serviço.
Observação
O Banco de Dados SQL do Azure Always Encrypted dá suporte aos cenários abaixo:
- Os armazenamentos de dados de origem ou do coletor estão usando a identidade gerenciada ou a entidade de serviço como o tipo de autenticação do provedor de chaves.
- Os armazenamentos de dados de origem e do coletor estão usando a identidade gerenciada como o tipo de autenticação do provedor de chaves.
- Os armazenamentos de dados de origem e do coletor estão usando a mesma entidade de serviço como o tipo de autenticação do provedor de chaves.
Observação
Atualmente, o Banco de Dados SQL do Azure Always Encrypted tem suporte apenas para transformação de origem em fluxos de dados de mapeamento.
Captura de dados de alterações nativas
O Azure Data Factory pode dar suporte a recursos de captura de dados de alterações nativas para SQL Server, BD do SQL do Azure e MI do SQL do Azure. Os dados alterados, incluindo a inserção, atualização e exclusão de linha em armazenamentos SQL, poderão ser detectados e extraídos automaticamente pelo fluxo de dados de mapeamento do ADF. Com a experiência sem código no mapeamento de fluxo de dados, os usuários poderão obter facilmente o cenário de replicação de dados de repositórios SQL anexando um banco de dados como o repositório de destino. Além disso, os usuários também poderão redigir qualquer lógica de transformação de dados para obter um cenário de ETL incremental a partir de repositórios SQL.
Mantenha o pipeline e o nome da atividade inalterados para que o ponto de verificação possa ser registrado pelo ADF para que você receba automaticamente os dados alterados da última execução. Se você alterar o nome do pipeline ou da atividade, o ponto de verificação será redefinido, o que fará com que você comece do início ou receba alterações a partir de agora na próxima execução. Se você quiser alterar o nome do pipeline ou da atividade, mas ainda manter o ponto de verificação para obter os dados alterados da última execução automaticamente, use sua própria chave de ponto de verificação na atividade do fluxo de dados para conseguir isso.
Ao depurar o pipeline, esse recurso funcionará da mesma forma. Tenha em mente que o ponto de verificação será redefinido quando você atualizar o navegador durante a execução da depuração. Depois que estiver satisfeito com o resultado do pipeline da sequência de depuração, você poderá publicar e disparar o pipeline. Ao disparar pela primeira vez o pipeline publicado, ele será reiniciado automaticamente do início ou passará a obter alterações desse momento em diante.
Na seção de monitoramento, sempre existe a possibilidade de reexecutar um pipeline. Ao fazer isso, os dados alterados sempre serão capturados do ponto de verificação anterior da sua versão de pipeline selecionada.
Exemplo 1:
Ao encadear diretamente uma transformação de origem referenciada ao conjunto de dados habilitado para CDA do SQL com uma transformação de coletor referenciada a um banco de dados em um fluxo de dados de mapeamento, as alterações ocorridas na origem do SQL serão aplicadas automaticamente ao banco de dados de destino para que seja possível obter facilmente o cenário de replicação de dados entre bancos de dados. É possível usar o método de atualização na transformação do coletor para selecionar se você quer permitir inserção, permitir atualização ou permitir exclusão no banco de dados de destino. O script de exemplo no fluxo de dados de mapeamento é conforme abaixo.
source(output(
id as integer,
name as string
),
allowSchemaDrift: true,
validateSchema: false,
enableNativeCdc: true,
netChanges: true,
skipInitialLoad: false,
isolationLevel: 'READ_UNCOMMITTED',
format: 'table') ~> source1
source1 sink(allowSchemaDrift: true,
validateSchema: false,
deletable:true,
insertable:true,
updateable:true,
upsertable:true,
keys:['id'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true,
errorHandlingOption: 'stopOnFirstError') ~> sink1
Exemplo 2:
Se você quiser habilitar o cenário de ETL, em vez de replicação de dados entre banco de dados por meio de CDA do SQL, poderá usar expressões no fluxo de dados de mapeamento incluindo isInsert(1), isUpdate(1) e isDelete(1) para diferenciar as linhas com diferentes tipos de operação. A seguir é apresentado um dos scripts de exemplo para mapear o fluxo de dados ao derivar uma coluna com o valor: 1 para indicar as linhas inseridas, 2 para indicar as linhas atualizadas e 3 para indicar as linhas excluídas para transformações downstream para processar os dados delta.
source(output(
id as integer,
name as string
),
allowSchemaDrift: true,
validateSchema: false,
enableNativeCdc: true,
netChanges: true,
skipInitialLoad: false,
isolationLevel: 'READ_UNCOMMITTED',
format: 'table') ~> source1
source1 derive(operationType = iif(isInsert(1), 1, iif(isUpdate(1), 2, 3))) ~> derivedColumn1
derivedColumn1 sink(allowSchemaDrift: true,
validateSchema: false,
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> sink1
Limitação conhecida:
- Apenas as alterações líquidas da CDA do SQL serão carregadas pelo ADF por meio de cdc.fn_cdc_get_net_changes_.
Atualizar a versão do Banco de Dados SQL do Azure
Para atualizar a versão do Banco de Dados SQL do Azure, na página Editar serviço vinculado, selecione Recomendado em Versão e configure o serviço vinculado, referindo-se às propriedades do serviço vinculado para a versão recomendada.
Diferenças entre a versão recomendada e a versão herdada
A tabela abaixo mostra as diferenças entre o Banco de Dados SQL do Azure usando a versão recomendada e a versão herdada.
Versão recomendada | Versão herdada |
---|---|
Suporta TLS 1.3 via encrypt como strict . |
TLS 1.3 não é compatível. |
Conteúdo relacionado
Para obter uma lista de armazenamentos de dados com suporte como fontes e coletores por atividade Copy, consulte armazenamentos de dados e formatos compatíveis.