Configurar uma base de dados SQL numa atividade de cópia (Pré-visualização)
Este artigo descreve como usar a atividade de cópia no pipeline de dados para copiar dados de e para o banco de dados SQL.
Configuração suportada
Para a configuração de cada separador na atividade de cópia, vá respetivamente para as seguintes seções.
- Geral
- de origem
- Destino
- Mapeamento
- Configurações
Geral
Consulte as definições orientações sobre Geral do
Fonte
As propriedades a seguir têm suporte para o banco de dados SQL na guia de origem de uma atividade de cópia.
As seguintes propriedades são necessárias:
Connection: Selecione um banco de dados SQL existente referente à etapa neste artigo.
Usar a consulta: Você pode escolher Tabela, Consultaou Procedimento armazenado. A lista a seguir descreve a configuração de cada configuração:
Tabela: Especifique o nome do banco de dados SQL para ler dados. Escolha uma tabela existente na lista suspensa ou selecione Introduzir manualmente para inserir a estrutura e o nome da tabela.
Query: especifique a consulta SQL personalizada para ler dados. Um exemplo é
select * from MyTable
. Ou selecione o ícone de lápis para editar no editor de códigos.Procedimento armazenado: Selecione o procedimento armazenado na lista suspensa.
Em Avançado , você pode especificar os seguintes campos:
Tempo limite da consulta (minutos): Especifique o tempo limite para a execução do comando de consulta, o padrão é 120 minutos. Se o parâmetro for definido para essa propriedade, os valores permitidos serão de intervalo de tempo, como "02:00:00" (120 minutos).
Nível de isolamento: Especifica o comportamento de bloqueio de transação para a fonte SQL. Os valores permitidos são: Leitura confirmada, Leitura não confirmada, Leitura repetível, Serializável, ou Snapshot. Consulte Enum IsolationLevel para obter mais detalhes.
Opção de Partição: especifique as opções de particionamento de dados usadas para carregar dados da base de dados SQL. Os valores permitidos são: Nenhum (padrão), Partições físicas da tabelae Intervalo dinâmico. Quando uma opção de partição está habilitada (ou seja, não Nenhum), o grau de paralelismo para carregar simultaneamente dados de um banco de dados SQL é controlado por Grau de paralelismo de cópia na guia Configurações de atividade de cópia.
Nenhum: Escolha esta configuração para não usar uma partição.
Partições físicas da tabela: Ao usar uma partição física, a coluna e o mecanismo da partição são determinados automaticamente com base na sua definição de tabela física.
Dynamic range: Ao usar a consulta com a opção de paralelismo ativada, é necessário especificar o parâmetro de partição de intervalo (
?DfDynamicRangePartitionCondition
). Exemplo de consulta:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
.Nome da coluna de partição: Especifique o nome da coluna de origem em inteiro ou data/data/hora tipo (
int
,smallint
,bigint
,date
,smalldatetime
,datetime
,datetime2
oudatetimeoffset
) que é usado pelo particionamento de intervalo para cópia paralela. Se não for especificado, o índice ou a chave primária da tabela será detetado automaticamente e usado como a coluna de partição.Se utilizares uma consulta para recuperar os dados de origem, liga o
?DfDynamicRangePartitionCondition
na cláusula WHERE. Para obter um exemplo, consulte a seção cópia paralela do banco de dados SQL.Partition upper bound: Especifique o valor máximo da coluna de partição para divisão do intervalo de partições. Esse valor é usado para determinar o passo da partição, não para filtrar as linhas na tabela. Todas as linhas na tabela ou no resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detetará automaticamente o valor. Para obter um exemplo, consulte a seção cópia paralela do banco de dados SQL.
Partition lower bound: Especifique o valor mínimo da coluna de partição para divisão do intervalo de particionamento. Esse valor é usado para decidir o ritmo da partição, não para filtrar as linhas na tabela. Todas as linhas na tabela ou no resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detetará automaticamente o valor. Para obter um exemplo, consulte a seção cópia paralela de um banco de dados SQL.
Colunas adicionais: Adicione mais colunas de dados para armazenar o caminho relativo ou o valor estático dos arquivos de origem. A expressão é suportada para este último. Para obter mais informações, vá para Adicionar colunas adicionais durante a cópia.
Destino
As seguintes propriedades são suportadas para o banco de dados SQL na aba "Destino" de uma atividade de cópia.
As seguintes propriedades são necessárias:
Connection: Selecione um banco de dados SQL existente referindo-se à etapa neste artigo.
opção Tabela: Selecione a partir de Usar existente ou Criar tabela automaticamente.
Se você selecionar Usarexistente :
- Tabela: Especifique o nome do banco de dados SQL para gravar dados. Escolha uma tabela existente na lista suspensa ou selecione Introduzir manualmente para inserir o esquema e o nome da tabela.
Se você selecionar criar tabela automaticamente:
- Tabela: A tabela é criada automaticamente (se não existir) no esquema de origem, o que não é possível quando se utiliza um procedimento armazenado como comportamento de escrita.
Em Avançado , você pode especificar os seguintes campos:
Comportamento de gravação: define o comportamento de gravação quando a origem são arquivos de um armazenamento de dados baseado em arquivo. Você pode escolher Inserir, Upsert ou Procedimento Armazenado.
Inserir: Escolha esta opção se os dados de origem tiverem inserções.
Upsert: Escolha esta opção se os dados de origem tiverem inserções e atualizações.
Use TempDB: Especifique se deseja usar uma tabela temporária global ou uma 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 e essa caixa de seleção está marcada.
Se você gravar uma grande quantidade de dados no banco de dados SQL, desmarque isso e especifique um nome de esquema sob o qual o Data Factory criará uma tabela de preparo para carregar dados upstream e limpar automaticamente após a conclusão. Verifique se o usuário tem permissão para criar tabela no banco de dados e alterar permissão no esquema. Se não for especificado, uma tabela temporária global será usada como etapa intermédia.Selecionar esquema de banco de dados do usuário: Quando a Usar TempDB não estiver selecionada, especifique um nome de esquema sob o qual o Data Factory criará uma tabela de preparo para carregar dados upstream e limpá-los automaticamente após a conclusão. Verifique se você tem permissão para criar tabela no banco de dados e alterar permissão no esquema.
Observação
Você deve ter permissão para criar e excluir tabelas. Por padrão, uma tabela provisória compartilhará o mesmo esquema que uma tabela de destino.
Colunas de chave: Escolha qual coluna é usada para determinar se uma linha da origem corresponde a uma linha do destino.
Nome do procedimento armazenado: Selecione o procedimento armazenado na lista suspensa.
Bloqueio de tabela de inserção em massa: Escolha Sim ou Não. Use essa configuração para melhorar o desempenho da cópia durante uma operação de inserção em massa em uma tabela sem índice de vários clientes. Para obter mais informações, vá para BULK INSERT (Transact-SQL)
Script de pré-cópia: especifique um script para a atividade de cópia para ser executada antes de gravar os dados na tabela de destino em cada execução. Você pode usar essa propriedade para limpar os dados pré-carregados.
Write batch timeout: Especifique o tempo de espera para que a operação de inserção em lote termine antes que ela atinja o tempo limite. O valor permitido é intervalo de tempo. O valor padrão é "00:30:00" (30 minutos).
Write batch size: especifique o 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 de lote apropriado com base no tamanho da linha.
Max conexões simultâneas: Especifique o limite superior de conexões simultâneas estabelecido para a armazenagem de dados durante a execução da atividade. Especifique um valor somente quando quiser limitar conexões simultâneas.
Mapeamento
Para a configuração do separador Mapeamento de, se não utilizar um banco de dados SQL com criação automática de tabela como destino, vá para de Mapeamento.
Se aplicar o banco de dados SQL com como destino a tabela de criação automática, exceto a configuração em Mapeamento, pode editar o tipo das colunas de destino. Depois de selecionar Importar esquemas, você pode especificar o tipo de coluna em seu destino.
Por exemplo, o tipo para ID coluna na origem é int, e você pode alterá-lo para float type ao mapear para a coluna de destino.
Configurações
Para Configurações configuração da guia, vá para Configurar suas outras configurações na guia Configurações.
Cópia paralela do banco de dados SQL
O conector do banco de dados SQL na atividade de cópia fornece particionamento de dados interno para copiar dados em paralelo. Você pode encontrar opções de particionamento de dados no separador Fonte da atividade de cópia.
Quando você habilita a cópia particionada, a atividade de cópia executa consultas paralelas na fonte do banco de dados SQL para carregar dados por partições. O grau paralelo é controlado pelo Grau de paralelismo de cópia na guia de configurações de atividade de cópia. Por exemplo, se você definir Grau de paralelismo de cópia para quatro, o serviço gerará e executará simultaneamente quatro consultas com base na opção e nas configurações de partição especificadas, e cada consulta recuperará uma parte dos dados do banco de dados SQL.
Sugere-se que habilite a cópia paralela com particionamento de dados, especialmente quando você carrega uma grande quantidade de dados do banco de dados SQL. A seguir estão sugeridas configurações para diferentes cenários. Ao copiar dados para o armazenamento de dados baseado em arquivo, é recomendável gravar em uma pasta como vários arquivos (especifique apenas o nome da pasta), caso em que o desempenho é melhor do que gravar em um único arquivo.
Cenário | Configurações sugeridas |
---|---|
Carga completa a partir de uma mesa grande, com divisórias físicas. |
Partition option: Partições físicas de tabela. Durante a execução, o serviço deteta automaticamente as partições físicas e copia os dados por partições. Para verificar se a sua tabela tem ou não partição física, pode consultar esta consulta. |
Carga completa a partir de uma tabela grande, sem partições físicas, utilizando uma coluna inteira ou de datetime para particionamento de dados. |
Opções de partição: Partição de faixa dinâmica. Coluna de partição (opcional): especifique a coluna usada para particionar dados. Se não for especificado, o índice ou a coluna de chave primária será usado. de limite superior da partição e de limite inferior da partição (opcional): especifique se deseja determinar o passo da partição. Isso não é para filtrar as linhas na tabela, todas as linhas na tabela serão particionadas e copiadas. Se não for especificado, a atividade de cópia deteta automaticamente os valores e pode levar muito tempo, dependendo dos valores MIN e MAX. Recomenda-se fornecer limite superior e limite inferior. Por exemplo, se a coluna de partição "ID" tiver valores que variam de 1 a 100, e você definir o limite inferior como 20 e o limite superior como 80, com cópia paralela como 4, o serviço recuperará dados por 4 partições - IDs no intervalo <=20, [21, 50], [51, 80] e >=81, respectivamente. |
Carregue uma grande quantidade de dados usando uma consulta personalizada, sem partições físicas, utilizando uma coluna inteira ou de data/data/hora para particionamento de dados. |
Opções de partição: Partição de faixa dinâmica. 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): Indique se pretende determinar o passo da partição. Isso não é para filtrar as linhas na tabela, todas as linhas no resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detetará automaticamente o valor. Por exemplo, se a coluna de partição "ID" tiver valores que variam de 1 a 100 e você definir o limite inferior como 20 e o limite superior como 80, com cópia paralela como 4, o serviço recuperará dados por 4 partições - IDs no intervalo <=20, [21, 50], [51, 80] e >=81, respectivamente. Aqui estão mais consultas de exemplo para diferentes cenários: • Consulte toda a tabela: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • Consulta de uma tabela com seleção de colunas e filtros adicionais de cláusula 'where': SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Consulta com subconsultas: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Consulta com partição em subconsulta: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
Práticas recomendadas para carregar dados com a opção de partição:
- Escolha uma coluna distinta como coluna de partição (como chave primária ou chave exclusiva) para evitar distorção de dados.
- Se a tabela tiver partição interna, use a opção de partição Partições físicas da tabela para obter um melhor desempenho.
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 partição física, você verá "HasPartition" como "sim" como a seguir.
Resumo da tabela
As tabelas a seguir contêm mais informações sobre a atividade de cópia no banco de dados SQL.
Fonte
Nome | Descrição | Valor | Necessário | Propriedade de script JSON |
---|---|---|---|---|
Conexão | A sua conexão com os repositórios de dados de origem. | <a sua ligação> | Sim | conexão |
Utilizar consulta | A maneira de ler dados. Aplique a Tabela para ler dados da tabela especificada ou aplique a Consulta para ler dados usando consultas SQL. | • Tabela • Consulta • Procedimento armazenado |
Sim | / |
Para Tabela | ||||
nome do esquema | Nome do esquema. | < o nome do seu esquema > | Não | Esquema |
nome da tabela | Nome da tabela. | < o nome da sua tabela > | Não | tabela |
para consulta | ||||
Consulta | Especifique a consulta SQL personalizada para ler dados. Por exemplo: SELECT * FROM MyTable . |
< consultas SQL > | Não | sqlReaderQuery |
Para procedimento armazenado | ||||
Nome do procedimento armazenado | Nome do procedimento armazenado. | < o nome do procedimento armazenado > | Não | sqlReaderStoredProcedureName |
Tempo limite da consulta (minutos) | O tempo limite para a execução do comando de consulta, padrão, é de 120 minutos. Se o parâmetro for definido para essa propriedade, os valores permitidos serão de intervalo de tempo, como "02:00:00" (120 minutos). | Período de tempo | Não | tempo de espera da consulta |
Nível de isolamento | Especifica o comportamento de bloqueio de transação para a fonte SQL. | • Leitura comprometida • Ler sem compromisso • Leitura repetível • Serializável • Instantâneo |
Não | Nível de Isolamento • ReadCommitted • ReadUncommitted (leitura não confirmada) • Leitura repetível • Serializável • Instantâneo |
Opção de partição | As opções de particionamento de dados usadas para carregar dados do banco de dados SQL. | • Nenhum • Divisórias físicas de mesa • Alcance dinâmico |
Não | opção de partição • PartiçõesFísicasDaTabela • Gama dinâmica |
Para Gama dinâmica | ||||
Nome da coluna da partição | O nome da coluna de origem em inteiro ou data/data/hora tipo (int , smallint , bigint , date , smalldatetime , datetime , datetime2 ou datetimeoffset ) que é usado pelo particionamento de intervalo para cópia paralela. Se não for especificado, o índice ou a chave primária da tabela será detetado automaticamente e usado como a coluna de partição. Se utilizar uma consulta para recuperar os dados de origem, utilize ?DfDynamicRangePartitionCondition na cláusula WHERE. |
< os nomes das colunas da partição > | Não | nomeDaColunaDePartição |
Partição limite superior | O valor máximo da coluna de partição para divisão dos intervalos de partições. Esse valor é usado para determinar a progressão da partição, não para filtrar as linhas na tabela. Todas as linhas na tabela ou no resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detetará automaticamente o valor. | < o limite superior da sua partição > | Não | partiçãoLimiteSuperior |
Partição de limite inferior | O valor mínimo da coluna de partição para a divisão do intervalo de partição. Esse valor é usado para determinar o intervalo da partição, não para filtrar as linhas na tabela. Todas as linhas na tabela ou no resultado da consulta serão particionadas e copiadas. Se não for especificado, a atividade de cópia detetará automaticamente o valor. | < o limite inferior da sua partição > | Não | partiçãoLimiteInferior |
Colunas adicionais | Adicione mais colunas de dados para armazenar o caminho relativo ou o valor estático dos arquivos de origem. A expressão é suportada para o último caso. | • Nome • Valor |
Não | colunas adicionais • nome • valor |
Destino
Nome | Descrição | Valor | Necessário | Propriedade de script JSON |
---|---|---|---|---|
Conexão | A sua ligação ao armazenamento de dados de destino. | <a sua ligação > | Sim | ligação |
opção Tabela | Sua tabela de dados de destino. Selecione de Usar tabela existente ou Criar tabelaautomaticamente. | Usar existente • Criação automática de tabelas |
Sim | Esquema mesa |
Comportamento de escrita | Define o comportamento de gravação quando a origem são arquivos de um armazenamento de dados baseado em arquivo. | • Inserir • Upsert (atualizar/inserir) • Procedimento armazenado |
Não | writeBehavior: • inserir • Atualizar ou inserir • Nome do Procedimento Armazenado sqlWriter |
Bloqueio de tabela de inserção em massa | Use essa configuração para melhorar o desempenho da cópia durante uma operação de inserção em massa em uma tabela sem índice de vários clientes. | Sim ou Não (padrão) | Não | sqlWriterUseTableLock: true ou false (padrão) |
Para Upsert | ||||
usar o TempDB | Se deve usar uma tabela temporária global ou uma tabela física como a tabela provisória para upsert. | selecionado (padrão) ou não selecionado | Não | useTempDB: verdadeiro (padrão) ou falso |
Colunas chave | Escolha qual coluna é usada para determinar se uma linha da origem corresponde a uma linha do destino. | < sua coluna principal> | Não | Teclas |
Para procedimento armazenado | ||||
Nome do procedimento armazenado | Esta propriedade é 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. | < nome do procedimento armazenado > | Não | sqlWriterStoredProcedureName |
Script de pré-cópia | Um script para a Atividade de Cópia executar antes de gravar dados numa tabela de destino em cada execução. Você pode usar essa propriedade para limpar os dados pré-carregados. |
<script de pré-cópia> (string) |
Não | pré-CopyScript |
Tempo limite de gravação em lote | O tempo de espera para que a operação de inserção em lote termine antes de atingir o tempo limite. O valor permitido é intervalo de tempo. O valor padrão é "00:30:00" (30 minutos). | Duração | Não | writeBatchTimeout |
Escrever o tamanho do lote | O número de linhas a serem inseridas na tabela SQL por lote. Por padrão, o serviço determina dinamicamente o tamanho de lote apropriado com base no tamanho da linha. |
<número de linhas> (inteiro) |
Não | writeBatchSize |
Máximo de conexões simultâneas | O limite superior de conexões simultâneas estabelecidas para o armazenamento de dados durante a execução da atividade. Especifique um valor somente quando quiser limitar conexões simultâneas. |
<limite superior de conexões simultâneas> (inteiro) |
Não | maxConcurrentConnections |