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
- origine
- Destinazione
- Mappatura
- Impostazioni
Generale
Fare riferimento alle
Fonte
Le proprietà seguenti sono supportate per il database SQL nella scheda Sorgente di un'attività di copia.
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.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).
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.
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
,datetime2
odatetimeoffset
) 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.
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.
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.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.
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 Sì 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 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.
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.
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> | Sì | 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 |
Sì | / |
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 , datetime2 o 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 > | Sì | connessione |
opzione tabella | Tabella dati di destinazione Seleziona da Usa esistenti o Crea automaticamente tabella. | Usa l'esistente • Creazione automatica della tabella |
Sì | 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 |