Condividi tramite


Configurare un database SQL in un'attività di copia (Anteprima)

Questo articolo illustra come usare l'attività di copia nella pipeline di dati per copiare dati da e nel database SQL.

Configurazione supportata

Per la configurazione di ogni scheda nell'attività di copia, vai rispettivamente alle sezioni seguenti.

Generale

Fare riferimento alle impostazioni generali indicazioni per configurare la scheda Impostazioni generale .

Fonte

Le proprietà seguenti sono supportate per il database SQL nella scheda Sorgente di un'attività di copia.

Screenshot che mostra la scheda di origine e l'elenco delle proprietà.

Le proprietà seguenti sono necessarie:

  • Connection: Seleziona un database SQL esistente facendo riferimento al passaggio in questo articolo .

  • UsareQuery: è possibile scegliere Tabella, Queryo Stored Procedure. L'elenco seguente descrive la configurazione di ogni impostazione:

    • Tabella: specificare il nome del database SQL per leggere i dati. Scegliere una tabella esistente dall'elenco a discesa oppure selezionare Immettere manualmente per immettere lo schema e il nome della tabella.

    • Query: Specificare la query SQL personalizzata per leggere i dati. Un esempio è select * from MyTable. In alternativa, selezionare l'icona a forma di matita da modificare nell'editor di codice.

      Screenshot che mostra la scelta della query.

    • Stored Procedure: Selezionare la Stored Procedure dall'elenco a discesa.

In advancedè possibile specificare i campi seguenti:

  • timeout query (minuti): specificare il timeout per l'esecuzione del comando di query, il valore predefinito è 120 minuti. Se un parametro è impostato per questa proprietà, i valori consentiti sono l'intervallo di tempo, ad esempio "02:00:00" (120 minuti).

    Screenshot che mostra le impostazioni di timeout della query.

  • livello di isolamento: specifica il comportamento di blocco delle transazioni per l'origine SQL. I valori consentiti sono: Lettura confermata (Read committed), Lettura non confermata (Read uncommitted), Lettura ripetibile (Repeatable read), Serializzabile (Serializable), oppure Snapshot. Per ulteriori dettagli, fare riferimento a IsolationLevel Enum.

    Screenshot che mostra le impostazioni del livello di isolamento.

  • Opzione di partizionamento: Specificate le opzioni di partizionamento dei dati utilizzate per il caricamento dei dati dal database SQL. I valori consentiti sono: Nessuna (impostazione predefinita), Partizioni fisiche della tabellae Intervallo dinamico. Quando un'opzione di partizione è abilitata (ovvero non Nessuna), il grado di parallelismo per il caricamento simultaneo dei dati da un database SQL è controllato da Grado di parallelismo di copia nella scheda Impostazioni dell'attività di copia.

    • Nessuna: scegliere questa impostazione per non usare una partizione.

    • Partizioni fisiche della tabella: quando si usa una partizione fisica, la colonna e il meccanismo di partizione vengono determinati automaticamente in base alla definizione della tabella fisica.

    • intervallo dinamico: quando si usa la query con la funzionalità parallela abilitata, è necessario il parametro di partizione di intervallo(?DfDynamicRangePartitionCondition). Query di esempio: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition.

      • Nome della colonna di partizione: Specificare il nome della colonna di origine di tipo integer o date/datetime (int, smallint, bigint, date, smalldatetime, datetime, datetime2o datetimeoffset) utilizzato dal partizionamento dell'intervallo per la copia parallela. Se non specificato, l'indice o la chiave primaria della tabella vengono rilevati automaticamente e usati come colonna di partizione.

        Se si utilizza una query per recuperare i dati di origine, collegare ?DfDynamicRangePartitionCondition nella clausola WHERE. Per un esempio specifico, vedere la sezione Copia parallela dal database SQL.

      • Limite superiore della partizione: specificare il valore massimo della colonna di partizione per la suddivisione dell'intervallo di partizioni. Questo valore viene usato per decidere il passo della partizione, non per filtrare le righe nella tabella. Tutte le righe nella tabella o nel risultato della query verranno partizionate e copiate. Se non specificato, l'attività di copia rileva il valore automaticamente. Per un esempio, vedere la sezione Copia parallela dal database SQL.

      • Limite inferiore della partizione: Specificare il valore minimo della colonna di partizione per la suddivisione della gamma di partizioni. Questo valore viene usato per decidere il passo della partizione, non per filtrare le righe nella tabella. Tutte le righe nella tabella o nel risultato della query verranno partizionate e copiate. Se non specificato, l'attività di copia rileva automaticamente il valore. Per un esempio, consultare la sezione Copia parallela dal database SQL.

  • Colonne aggiuntive: aggiungere altre colonne di dati per archiviare il percorso relativo o il valore statico dei file di origine. L'espressione è supportata per quest'ultima. Per altre informazioni, vedere Aggiungere altre colonne durante il processo di copia.

Destinazione

Le proprietà seguenti sono supportate per il database SQL nella scheda destinazione sotto la scheda di un'attività di copia.

Screenshot che mostra la scheda Destinazione.

Le proprietà seguenti sono necessarie:

  • Connection: selezionare un database SQL esistente facendo riferimento al passaggio riportato in questo articolo .

  • opzione Tabella: selezionare da Usa tabella esistente o creare tabella automaticamente.

    • Se si seleziona Usaesistente:

      • Tabella: specificare il nome del database SQL su cui scrivere i dati. Scegliere una tabella esistente dall'elenco a discesa oppure selezionare Immettere manualmente per immettere lo schema e il nome della tabella.
    • Se si seleziona Creazione automatica tabella:

      • tabella: crea automaticamente la tabella (se inesistente) nello schema di origine, che non è supportata quando la stored procedure viene usata come comportamento di scrittura.

In advancedè possibile specificare i campi seguenti:

  • Comportamento di scrittura: definisce il comportamento di scrittura quando l'origine dei dati è costituita da file provenienti da un archivio dati basato su file. È possibile scegliere Inserisci, Upsert o Stored Procedure.

    Schermata della scheda di comportamento di scrittura.

    • Inserisci: scegli quest'opzione se i dati di origine contengono inserzioni.

    • Upsert: scegliere questa opzione se i dati di origine hanno sia inserimenti che aggiornamenti.

      • Usare TempDB: specificare se si desidera utilizzare una tabella temporanea globale o una tabella fisica come tabella provvisoria per un'operazione di upsert. Per impostazione predefinita, il servizio usa la tabella temporanea globale come tabella provvisoria e questa casella di controllo è selezionata.
        Se si inseriscono elevate quantità di dati nel database SQL, deselezionare questa opzione e specificare un nome di schema sotto cui Data Factory creerà una tabella di staging per caricare i dati upstream e effettuare la pulizia automatica al termine. Assicurarsi che l'utente disponga dell'autorizzazione a creare tabelle nel database e l'autorizzazione a modificare lo schema. Se non specificato, viene usata una tabella temporanea globale come staging.

        Screenshot che mostra l'opzione Usa TempDB.

      • Selezionare lo schema del database utente: Quando il Usa TempDB non è selezionato, specificare un nome di schema sotto il quale Data Factory creerà una tabella di staging per caricare i dati upstream e ripulirli automaticamente al termine. Assicurati di avere l'autorizzazione a creare tabelle nel database e l'autorizzazione a modificare lo schema.

        Nota

        È necessario disporre dell'autorizzazione per la creazione e l'eliminazione di tabelle. Per impostazione predefinita, una tabella provvisoria condividerà lo stesso schema di una tabella di destinazione.

        Screenshot che mostra di non selezionare Usa TempDB.

      • Colonne chiave: scegliere quale colonna viene usata per determinare se una riga dall'origine corrisponde a una riga dalla destinazione.

    • Nome della stored procedure: Selezionare la stored procedure dall'elenco a discesa.

  • Blocco di tabella di inserimento bulk: scegliere o No. Utilizzare questa impostazione per migliorare le prestazioni di copia durante un'operazione di inserimento bulk in una tabella senza indici da più client. Per altre informazioni, vedere BULK INSERT (Transact-SQL)

  • script di pre-copia: Specificare uno script per l'esecuzione dell'attività di copia prima di scrivere i dati in una tabella di destinazione in ogni esecuzione. È possibile utilizzare questa proprietà per ripulire i dati precaricati.

  • timeout inserimento batch: Specificare l'intervallo di tempo di attesa per il completamento dell'operazione di inserimento batch prima che si verifichi la scadenza. Il valore consentito è l'intervallo di tempo. Il valore predefinito è "00:30:00" (30 minuti).

  • Dimensioni batch di scrittura: specificare il numero di righe da inserire nella tabella SQL per batch. Il valore consentito è integer (numero di righe). Per impostazione predefinita, il servizio determina in modo dinamico le dimensioni del batch appropriate in base alle dimensioni della riga.

  • Numero massimo di connessioni simultanee: specificare il limite massimo di connessioni simultanee stabilite all'archivio dati durante l'esecuzione dell'attività. Specificare un valore solo quando si desidera limitare le connessioni simultanee.

Mappatura

Per la configurazione della scheda Mapping , se non usi il database SQL con opzione di creazione automatica della tabella come destinazione, vai a Mapping.

Se si utilizza un database SQL che crea automaticamente le tabelle come destinazione, ad eccezione della configurazione in Mapping, è possibile modificare il tipo delle colonne di destinazione. Dopo aver selezionato Importa schemi, è possibile specificare il tipo di colonna della destinazione.

Ad esempio, il tipo di colonna per ID nell'origine è int ed è possibile modificarlo a tipo float durante il mapping alla colonna di destinazione.

Screenshot della mappatura della colonna di destinazione.

Impostazioni

Per Configurazione della scheda Impostazioni, passare a Configurare le altre impostazioni nella scheda impostazioni.

Copia parallela dal database SQL

Il connettore di database SQL nell'attività di copia fornisce il partizionamento dei dati predefinito per copiare i dati in parallelo. È possibile trovare le opzioni di partizionamento dei dati nella scheda origine dell'attività di copia.

Quando si abilita la copia partizionata, l'attività di copia esegue query parallele sull'origine del database SQL per caricare i dati in base alle partizioni. Il grado parallelo è controllato dal grado di parallelismo di copia nella scheda delle impostazioni dell'attività di copia. Ad esempio, se si imposta grado di parallelismo di copia su quattro, il servizio genera ed esegue simultaneamente quattro query in base all'opzione e alle impostazioni di partizione specificate e ogni query recupera una parte di dati dal database SQL.

È consigliabile abilitare la copia parallela con il partizionamento dei dati, soprattutto quando si caricano grandi quantità di dati dal database SQL. Di seguito sono riportate le configurazioni consigliate per diversi scenari. Quando si copiano dati in un archivio dati basato su file, è consigliabile scrivere in una cartella come più file (specificare solo il nome della cartella), nel qual caso le prestazioni sono migliori rispetto alla scrittura in un singolo file.

Scenario Impostazioni suggerite
Caricamento completo da tabelle di grandi dimensioni, con partizioni fisiche. opzione partizione: partizioni fisiche della tabella.

Durante l'esecuzione, il servizio rileva automaticamente le partizioni fisiche e copia i dati in base alle partizioni.

Per verificare se la tabella include o meno una partizione fisica, è possibile fare riferimento a questa query.
Caricamento completo da una grande tabella, senza partizioni fisiche, utilizzando una colonna di tipo integer o datetime per il partizionamento dei dati. opzioni di partizione: partizione di intervallo dinamico.
Colonna di partizione (facoltativo): Specificare la colonna utilizzata per la partizione dei dati. Se non specificato, viene utilizzata la colonna indice o chiave primaria.
limite superiore della partizione e limite inferiore della partizione (facoltativo): Specificare se si desidera determinare lo stride della partizione. Non si tratta di filtrare le righe nella tabella, tutte le righe della tabella verranno partizionate e copiate. Se non specificato, l'attività di copia rileva automaticamente i valori e può richiedere molto tempo a seconda dei valori MIN e MAX. È consigliabile specificare un limite superiore e un limite inferiore.

Ad esempio, se la colonna di partizione "ID" include valori compresi tra 1 e 100 e si imposta il limite inferiore su 20 e il limite superiore come 80, con copia parallela come 4, il servizio recupera i dati per 4 partizioni- ID nell'intervallo <=20, [21, 50], [51, 80], e >=81 rispettivamente.
Caricare una grande quantità di dati utilizzando una query personalizzata, senza partizioni fisiche, ma usando una colonna di tipo integer o date/datetime per il partizionamento dei dati. opzioni di partizione: partizione di intervallo dinamico.
query: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>.
Colonna di partizione: specificare la colonna utilizzata per partizionare i dati.
Limite della partizione superiore e limite della partizione inferiore (facoltativo): Specificare se si desidera determinare lo stride della partizione. Non si tratta di filtrare le righe nella tabella, tutte le righe nel risultato della query verranno partizionate e copiate. Se non specificato, l'attività di copia rileva automaticamente il valore.

Ad esempio, se la colonna di partizione "ID" include valori compresi tra 1 e 100 e si imposta il limite inferiore su 20 e il limite superiore come 80, con copia parallela come 4, il servizio recupera i dati rispettivamente per 4 partizioni- ID nell'intervallo <=20, [21, 50], [51, 80], e >=81.

Di seguito sono riportate altre query di esempio per diversi scenari:
• Eseguire una query sull'intera tabella:
SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
• Eseguire una query da una tabella con la selezione di colonne e filtri aggiuntivi di clausola where:
SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• Query con sottoquery:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• Eseguire query con partizione nella sottoquery:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T

Procedure consigliate per caricare i dati con l'opzione di partizione:

  • Scegliere una colonna distintiva come colonna di partizione (ad esempio chiave primaria o chiave univoca) per evitare l'asimmetria dei dati.
  • Se la tabella include una partizione predefinita, usare l'opzione di partizione Partizioni fisiche della tabella per ottenere prestazioni migliori.

Query di esempio per controllare la partizione fisica

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 la tabella contiene una partizione fisica, sarà visualizzato "HasPartition" come "sì", come mostrato di seguito.

Screenshot del risultato di una query SQL.

Riepilogo tabella

Le tabelle seguenti contengono altre informazioni sull'attività di copia nel database SQL.

Fonte

Nome Descrizione Valore Obbligatorio Proprietà dello script JSON
Connessione Connessione all'archivio dati di origine. <la tua connessione> connessione
Usa la query Modalità di lettura dei dati. Applica Tabella per leggere i dati dalla tabella specificata o applica Query SQL per leggere i dati usando query SQL. tabella
query
Procedura memorizzata
/
per tabella
nome dello schema Nome dello schema. < il nome dello schema > No schema
nome tabella Nome della tabella. < il nome della tabella > No tavolo
Per query
query Specificare la query SQL personalizzata per leggere i dati. Ad esempio: SELECT * FROM MyTable. < query SQL > No sqlReaderQuery
per procedura memorizzata
nome procedura memorizzata Nome della stored procedure. < il nome della stored procedure > No sqlReaderStoredProcedureName
Timeout query (minuti) Il timeout per l'esecuzione del comando di query, il valore predefinito è 120 minuti. Se il parametro è impostato per questa proprietà, i valori consentiti sono intervalli di tempo, ad esempio "02:00:00" (120 minuti). intervallo di tempo No queryTimeout
livello di isolamento Specifica il comportamento di blocco delle transazioni per l'origine SQL. • Lettura confermata
• Lettura non confermata
• Lettura ripetibile
•Serializzabile
•Istantanea
No livelloDiIsolamento
• ReadCommitted
• ReadUncommitted
• RepeatableRead
•Serializzabile
•Istantanea
opzione Partizione Opzioni di partizionamento dei dati usate per caricare dati dal database SQL. •Nessuno
• Partizioni fisiche della tabella
• Intervallo dinamico
No partitionOption:
• PartizioniFisicheDellaTabella
• DynamicRange
Per intervallo dinamico
nome della colonna di partizione Il nome della colonna di origine in di tipo integer o date/datetime (int, smallint, bigint, date, smalldatetime, datetime, datetime2o datetimeoffset) utilizzato dal partizionamento per range per la copia parallela. Se non specificato, l'indice o la chiave primaria della tabella vengono rilevati automaticamente e usati come colonna di partizione. Se usi una query per recuperare i dati di origine, inserisci ?DfDynamicRangePartitionCondition nella clausola WHERE. < i nomi delle colonne di partizione > No partitionColumnName
limite superiore della partizione Valore massimo della colonna di partizione per la suddivisione dell'intervallo di partizioni. Questo valore è utilizzato per decidere lo stride della partizione, e non per filtrare le righe nella tabella. Tutte le righe nella tabella o nel risultato della query verranno partizionate e copiate. Se non specificato, l'attività di copia rileva automaticamente il valore. < > limite superiore della partizione No partitionUpperBound
limite inferiore della partizione Valore minimo della colonna di partizione per la suddivisione dell'intervallo di partizioni. Questo valore viene utilizzato per determinare lo stride della partizione, non per filtrare le righe nella tabella. Tutte le righe nella tabella o nel risultato della query verranno partizionate e copiate. Se non specificato, l'attività di copia rileva automaticamente il valore. < limite inferiore della partizione > No partitionLowerBound
colonne aggiuntive Aggiungere altre colonne di dati per archiviare il percorso relativo o il valore statico dei file di origine. L'espressione è supportata per quest'ultima. •Nome
•Valore
No colonne aggiuntive:
• nome
•valore

Destinazione

Nome Descrizione Valore Obbligatorio Proprietà script JSON
Connessione La tua connessione all'archivio dati di destinazione. <la tua connessione > connessione
opzione tabella Tabella dati di destinazione Seleziona da Usa esistenti o Crea automaticamente tabella. Usa l'esistente
• Creazione automatica della tabella
schema
tavolo
comportamento di scrittura Definisce il comportamento di scrittura quando l'origine è file da un archivio dati basato su file. • Inserire
• Upsert (operazione di inserimento o aggiornamento)
• Procedura memorizzata
No writeBehavior:
•inserire
• inserimento o aggiornamento
• sqlWriterStoredProcedureName
blocco tabella per inserimento in blocco Utilizzare questa impostazione per migliorare l'efficienza di copia durante un'operazione di inserimento di massa in una tabella senza indice da più client. Sì o No (impostazione predefinita) No sqlWriterUseTableLock:
true o false (impostazione predefinita)
Per Upsert
Utilizzare TempDB Indica se usare una tabella temporanea globale o una tabella fisica come tabella provvisoria per upsert. selezionato (impostazione predefinita) o deselezionato No useTempDB:
true (impostazione predefinita) o false
colonne chiave Scegliere la colonna utilizzata per determinare se una riga dall'origine corrisponde a una riga dalla destinazione. < la colonna chiave> No Chiavi
per procedura memorizzata
nome stored procedure Questa proprietà indica il nome della stored procedure che legge i dati dalla tabella di origine. L'ultima istruzione SQL deve essere un'istruzione SELECT nella procedura memorizzata. < nome della stored procedure > No sqlWriterStoredProcedureName
script di pre-copia Uno script per l'attività di copia, da eseguire prima di scrivere i dati in una tabella di destinazione ad ogni esecuzione. È possibile utilizzare questa proprietà per ripulire i dati precaricati. <script di pre-copiazione>
(string)
No preCopyScript
Timeout di scrittura batch Tempo di attesa per il completamento dell'operazione di inserimento batch prima del timeout. Il valore consentito è intervallo di tempo. Il valore predefinito è "00:30:00" (30 minuti). intervallo di tempo No writeBatchTimeout
dimensione del lotto di scrittura Numero di righe da inserire nella tabella SQL per batch. Per impostazione predefinita, il servizio determina in modo dinamico le dimensioni del batch appropriate in base alle dimensioni della riga. <numero di righe>
(intero)
No writeBatchSize
Numero massimo di connessioni simultanee Limite massimo di connessioni simultanee stabilite all'archivio dati durante l'esecuzione di un'attività. Specificare un valore solo quando si desidera limitare le connessioni simultanee. <limite massimo di connessioni simultanee>
(intero)
No maxConcurrentConnections