Copiare dati da e in Azure SQL Data Warehouse tramite Azure Data FactoryCopy data to and from Azure SQL Data Warehouse using Azure Data Factory

Nota

Le informazioni di questo articolo sono valide per la versione 1 di Data Factory.This article applies to version 1 of Data Factory. Se si usa la versione corrente del servizio Data Factory, vedere le informazioni sul connettore Azure SQL Data Warehouse nella versione 2.If you are using the current version of the Data Factory service, see Azure SQL Data Warehouse connector in V2.

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per spostare i dati da e verso Azure SQL Data Warehouse.This article explains how to use the Copy Activity in Azure Data Factory to move data to/from Azure SQL Data Warehouse. Si basa sull'articolo relativo alle attività di spostamento dei dati, che offre una panoramica generale dello spostamento dei dati con l'attività di copia.It builds on the Data Movement Activities article, which presents a general overview of data movement with the copy activity.

Suggerimento

Per ottenere prestazioni ottimali, usare PolyBase per caricare i dati in Azure SQL Data Warehouse.To achieve best performance, use PolyBase to load data into Azure SQL Data Warehouse. Vedere la sezione Usare PolyBase per caricare dati in Azure SQL Data Warehouse per i dettagli.The Use PolyBase to load data into Azure SQL Data Warehouse section has details. Per la procedura dettagliata con un caso d'uso, vedere Caricare 1 TB di dati in Azure SQL Data Warehouse in meno di 15 minuti con Azure Data Factory.For a walkthrough with a use case, see Load 1 TB into Azure SQL Data Warehouse under 15 minutes with Azure Data Factory.

Scenari supportatiSupported scenarios

È possibile copiare i dati da Azure SQL Data Warehouse negli archivi di dati seguenti:You can copy data from Azure SQL Data Warehouse to the following data stores:

CategoryCategory Archivio datiData store
AzureAzure Archivio BLOB di AzureAzure Blob storage
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Database SQL di AzureAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Indice di Ricerca di AzureAzure Search Index
Archivio tabelle di AzureAzure Table storage
DatabaseDatabases SQL ServerSQL Server
OracleOracle
FileFile File systemFile system

È possibile copiare i dati dagli archivi dati seguenti ad Azure SQL Data Warehouse:You can copy data from the following data stores to Azure SQL Data Warehouse:

CategoryCategory Archivio datiData store
AzureAzure Archivio BLOB di AzureAzure Blob storage
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Database SQL di AzureAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Archivio tabelle di AzureAzure Table storage
DatabaseDatabases Amazon RedshiftAmazon Redshift
DB2DB2
MySQLMySQL
OracleOracle
PostgreSQLPostgreSQL
SAP Business WarehouseSAP Business Warehouse
SAP HANASAP HANA
SQL ServerSQL Server
SybaseSybase
TeradataTeradata
NoSQLNoSQL CassandraCassandra
MongoDBMongoDB
FileFile Amazon S3Amazon S3
File systemFile system
FTPFTP
HDFSHDFS
SFTPSFTP
AltroOthers HTTP genericoGeneric HTTP
OData genericoGeneric OData
ODBC genericoGeneric ODBC
SalesforceSalesforce
Tabella Web (tabella da HTML)Web table (table from HTML)

Suggerimento

Quando si copiano dati da SQL Server o da Database SQL di Azure in SQL Data Warehouse, se la tabella non esiste nell'archivio di destinazione, Data Factory la crea automaticamente in SQL Data Warehouse usando lo schema della tabella nell'archivio dati di origine.When copying data from SQL Server or Azure SQL Database to Azure SQL Data Warehouse, if the table does not exist in the destination store, Data Factory can automatically create the table in SQL Data Warehouse by using the schema of the table in the source data store. Per informazioni dettagliate vedere Creazione automatica della tabella.See Auto table creation for details.

Tipo di autenticazione supportatoSupported authentication type

È supportato il connettore Azure SQL Data Warehouse per l'autenticazione di base.Azure SQL Data Warehouse connector support basic authentication.

IntroduzioneGetting started

È possibile creare una pipeline con l'attività di copia che sposta i dati da e verso un Azure SQL Data Warehouse usando diversi strumenti/API.You can create a pipeline with a copy activity that moves data to/from an Azure SQL Data Warehouse by using different tools/APIs.

Il modo più semplice di creare una pipeline che copia i dati in/da Azure SQL Data Warehouse consiste nell'usare la procedura Copia di dati guidata.The easiest way to create a pipeline that copies data to/from Azure SQL Data Warehouse is to use the Copy data wizard. Per istruzioni dettagliate, vedere Esercitazione: Caricare i dati in SQL Data Warehouse con Data Factory per una procedura dettagliata rapida per la creazione di una pipeline tramite la procedura guidata di copia dati.See Tutorial: Load data into SQL Data Warehouse with Data Factory for a quick walkthrough on creating a pipeline using the Copy data wizard.

Per creare una pipeline, è anche possibile usare gli strumenti seguenti: Visual Studio, Azure PowerShell, modello Azure Resource Manager, API .NET, e API REST.You can also use the following tools to create a pipeline: Visual Studio, Azure PowerShell, Azure Resource Manager template, .NET API, and REST API. Vedere l'esercitazione sull'attività di copia per le istruzioni dettagliate sulla creazione di una pipeline con un'attività di copia.See Copy activity tutorial for step-by-step instructions to create a pipeline with a copy activity.

Se si usano gli strumenti o le API, eseguire la procedura seguente per creare una pipeline che sposta i dati da un archivio dati di origine a un archivio dati sink:Whether you use the tools or APIs, you perform the following steps to create a pipeline that moves data from a source data store to a sink data store:

  1. Creare una data factory.Create a data factory. Una data factory può contenere una o più pipeline.A data factory may contain one or more pipelines.
  2. Creare i servizi collegati per collegare gli archivi di dati di input e output alla data factory.Create linked services to link input and output data stores to your data factory. Ad esempio, se si copiano i dati da un'archiviazione BLOB di Azure in Azure SQL Data Warehouse si creano due servizi collegati per collegare l'account di archiviazione di Azure e Azure SQL Data Warehouse alla data factory.For example, if you are copying data from an Azure blob storage to an Azure SQL data warehouse, you create two linked services to link your Azure storage account and Azure SQL data warehouse to your data factory. Per le proprietà del servizio collegato specifiche per Azure SQL Data Warehouse, vedere la sezione sulle proprietà del servizio collegato.For linked service properties that are specific to Azure SQL Data Warehouse, see linked service properties section.
  3. Creare i set di dati per rappresentare i dati di input e di output per le operazioni di copia.Create datasets to represent input and output data for the copy operation. Nell'esempio citato nel passaggio precedente, si crea un set di dati per specificare un contenitore BLOB e la cartella che contiene i dati di input.In the example mentioned in the last step, you create a dataset to specify the blob container and folder that contains the input data. Si crea anche un altro set di dati per specificare la tabella SQL in Azure SQL Data Warehouse che contiene i dati copiati dall'archiviazione BLOB.And, you create another dataset to specify the table in the Azure SQL data warehouse that holds the data copied from the blob storage. Per le proprietà del set di dati specifiche per Azure SQL Data Warehouse, vedere la sezione sulle proprietà del set di dati.For dataset properties that are specific to Azure SQL Data Warehouse, see dataset properties section.
  4. Creare una pipeline con un'attività di copia che accetti un set di dati come input e un set di dati come output.Create a pipeline with a copy activity that takes a dataset as an input and a dataset as an output. Nell'esempio indicato in precedenza si usa BlobSource come origine e SqlDWSink come sink per l'attività di copia.In the example mentioned earlier, you use BlobSource as a source and SqlDWSink as a sink for the copy activity. Analogamente, se si esegue la copia da Azure SQL Data Warehouse nell'archiviazione BLOB di Azure, si usa SqlDWSource e BlobSink nell'attività di copia.Similarly, if you are copying from Azure SQL Data Warehouse to Azure Blob Storage, you use SqlDWSource and BlobSink in the copy activity. Per le proprietà dell'attività di copia specifiche per Azure SQL Data Warehouse, vedere la sezione sulle proprietà dell'attività di copia.For copy activity properties that are specific to Azure SQL Data Warehouse, see copy activity properties section. Per informazioni dettagliate su come usare un archivio dati come origine o come sink, fare clic sul collegamento nella sezione precedente per l'archivio dati.For details on how to use a data store as a source or a sink, click the link in the previous section for your data store.

Quando si usa la procedura guidata, le definizioni JSON per queste entità di data factory (servizi, set di dati e pipeline collegati) vengono create automaticamente.When you use the wizard, JSON definitions for these Data Factory entities (linked services, datasets, and the pipeline) are automatically created for you. Quando si usano gli strumenti o le API, ad eccezione delle API .NET, usare il formato JSON per definire le entità di data factory.When you use tools/APIs (except .NET API), you define these Data Factory entities by using the JSON format. Per esempi con definizioni JSON per entità di data factory utilizzate per copiare i dati da e verso un Azure SQL Data Warehouse, vedere la sezione degli esempi JSON in questo articolo.For samples with JSON definitions for Data Factory entities that are used to copy data to/from an Azure SQL Data Warehouse, see JSON examples section of this article.

Le sezioni seguenti riportano le informazioni dettagliate sulle proprietà JSON che vengono usate per definire entità di data factory specifiche di un Azure SQL Data Warehouse:The following sections provide details about JSON properties that are used to define Data Factory entities specific to Azure SQL Data Warehouse:

Proprietà del servizio collegatoLinked service properties

La tabella seguente fornisce la descrizione degli elementi JSON specifici del servizio collegato di Azure SQL Data WarehouseThe following table provides description for JSON elements specific to Azure SQL Data Warehouse linked service.

ProprietàProperty DescrizioneDescription ObbligatoriaRequired
typetype La proprietà type deve essere impostata su: AzureSqlDWThe type property must be set to: AzureSqlDW Yes
connectionStringconnectionString Specificare le informazioni necessarie per connettersi all'istanza di Azure SQL Data Warehouse per la proprietà connectionString.Specify information needed to connect to the Azure SQL Data Warehouse instance for the connectionString property. È supportata solo l'autenticazione di base.Only basic authentication is supported. Yes

Importante

Configurare il firewall del database SQL di Azure e il server di database in modo da consentire ai servizi di Azure di accedere al server.Configure Azure SQL Database Firewall and the database server to allow Azure Services to access the server. Se si copiano dati in Azure SQL Data Warehouse dall'esterno di Azure e da origini dati locali con gateway di data factory, configurare anche un intervallo di indirizzi IP appropriato per il computer che invia dati ad Azure SQL Data Warehouse.Additionally, if you are copying data to Azure SQL Data Warehouse from outside Azure including from on-premises data sources with data factory gateway, configure appropriate IP address range for the machine that is sending data to Azure SQL Data Warehouse.

Proprietà del set di datiDataset properties

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione di set di dati, vedere l'articolo sulla creazione di set di dati.For a full list of sections & properties available for defining datasets, see the Creating datasets article. Le sezioni come struttura, disponibilità e criteri di un set di dati JSON sono simili per tutti i tipi di set di dati, ad esempio Azure SQL, BLOB di Azure, tabelle di Azure e così via.Sections such as structure, availability, and policy of a dataset JSON are similar for all dataset types (Azure SQL, Azure blob, Azure table, etc.).

La sezione typeProperties è diversa per ogni tipo di set di dati e contiene informazioni sulla posizione dei dati nell'archivio dati.The typeProperties section is different for each type of dataset and provides information about the location of the data in the data store. La sezione typeProperties per il set di dati di tipo AzureSqlDWTable presenta le proprietà seguenti:The typeProperties section for the dataset of type AzureSqlDWTable has the following properties:

ProprietàProperty DescrizioneDescription ObbligatorioRequired
tableNametableName Nome della tabella o della visualizzazione nell'istanza del database SQL Data Warehouse di Azure a cui fa riferimento il servizio collegato.Name of the table or view in the Azure SQL Data Warehouse database that the linked service refers to. Yes

Proprietà dell'attività di copiaCopy activity properties

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, fare riferimento all'articolo Creazione di pipeline.For a full list of sections & properties available for defining activities, see the Creating Pipelines article. Per tutti i tipi di attività sono disponibili proprietà come nome, descrizione, tabelle di input e output e criteri.Properties such as name, description, input and output tables, and policy are available for all types of activities.

Nota

L'attività di copia accetta solo un input e produce solo un output.The Copy Activity takes only one input and produces only one output.

Le proprietà disponibili nella sezione typeProperties dell'attività variano invece in base al tipo di attività.Whereas, properties available in the typeProperties section of the activity vary with each activity type. Per l'attività di copia variano in base ai tipi di origine e sink.For Copy activity, they vary depending on the types of sources and sinks.

SqlDWSourceSqlDWSource

In caso di origine di tipo SqlDWSource, nella sezione typeProperties sono disponibili le proprietà seguenti:When source is of type SqlDWSource, the following properties are available in typeProperties section:

ProprietàProperty DESCRIZIONEDescription Valori consentitiAllowed values ObbligatorioRequired
sqlReaderQuerysqlReaderQuery Usare la query personalizzata per leggere i dati.Use the custom query to read data. Stringa di query SQL.SQL query string. Ad esempio: selezionare * da MyTable.For example: select * from MyTable. NoNo
sqlReaderStoredProcedureNamesqlReaderStoredProcedureName Nome della stored procedure che legge i dati dalla tabella di origine.Name of the stored procedure that reads data from the source table. Nome della stored procedure.Name of the stored procedure. L'ultima istruzione SQL deve essere un'istruzione SELECT nella stored procedure.The last SQL statement must be a SELECT statement in the stored procedure. NoNo
storedProcedureParametersstoredProcedureParameters Parametri per la stored procedure.Parameters for the stored procedure. Coppie nome/valore.Name/value pairs. I nomi e le maiuscole e minuscole dei parametri devono corrispondere ai nomi e alle maiuscole e minuscole dei parametri della stored procedure.Names and casing of parameters must match the names and casing of the stored procedure parameters. NoNo

Se la proprietà sqlReaderQuery è specificata per SqlDWSource, l'attività di copia esegue questa query nell'origine SQL Data Warehouse di Azure per ottenere i dati.If the sqlReaderQuery is specified for the SqlDWSource, the Copy Activity runs this query against the Azure SQL Data Warehouse source to get the data.

In alternativa, è possibile specificare una stored procedure indicando i parametri sqlReaderStoredProcedureName e storedProcedureParameters (se la stored procedure accetta parametri).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Se non si specifica sqlReaderQuery o sqlReaderStoredProcedureName, le colonne definite nella sezione della struttura del set di dati JSON vengono usate per compilare una query da eseguire su Azure SQL Data Warehouse.If you do not specify either sqlReaderQuery or sqlReaderStoredProcedureName, the columns defined in the structure section of the dataset JSON are used to build a query to run against the Azure SQL Data Warehouse. Esempio: select column1, column2 from mytable.Example: select column1, column2 from mytable. Se la definizione del set di dati non dispone della struttura, vengono selezionate tutte le colonne della tabella.If the dataset definition does not have the structure, all columns are selected from the table.

Esempio SqlDWSourceSqlDWSource example

"source": {
    "type": "SqlDWSource",
    "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
    "storedProcedureParameters": {
        "stringData": { "value": "str3" },
        "identifier": { "value": "$$Text.Format('{0:yyyy}', SliceStart)", "type": "Int"}
    }
}

Definizione della stored procedure:The stored procedure definition:

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

SqlDWSinkSqlDWSink

SqlDWSink supporta le proprietà seguenti:SqlDWSink supports the following properties:

ProprietàProperty DESCRIZIONEDescription Valori consentitiAllowed values ObbligatorioRequired
sqlWriterCleanupScriptsqlWriterCleanupScript Specificare una query da eseguire nell'attività di copia per pulire i dati di una sezione specifica.Specify a query for Copy Activity to execute such that data of a specific slice is cleaned up. Per informazioni dettagliate, vedere la sezione relativa alla ripetibilità.For details, see repeatability section. Istruzione di query.A query statement. NoNo
allowPolyBaseallowPolyBase Indica se usare PolyBase, quando applicabile, invece del meccanismo BULKINSERT.Indicates whether to use PolyBase (when applicable) instead of BULKINSERT mechanism.

L'uso di PolyBase è il modo consigliato per caricare dati in SQL Data Warehouse.Using PolyBase is the recommended way to load data into SQL Data Warehouse. Per informazioni su vincoli e dettagli, vedere la sezione Usare PolyBase per caricare dati in Azure SQL Data Warehouse .See Use PolyBase to load data into Azure SQL Data Warehouse section for constraints and details.
TrueTrue
False (impostazione predefinita)False (default)
NoNo
polyBaseSettingspolyBaseSettings Gruppo di proprietà che è possibile specificare quando la proprietà allowPolybase è impostata su true.A group of properties that can be specified when the allowPolybase property is set to true.   NoNo
rejectValuerejectValue Specifica il numero o la percentuale di righe che è possibile rifiutare prima che la query abbia esito negativo.Specifies the number or percentage of rows that can be rejected before the query fails.

Per altre informazioni sulle opzioni di rifiuto di PolyBase, vedere la sezione Arguments (Argomenti) in CREATE EXTERNAL TABLE (Transact-SQL) .Learn more about the PolyBase’s reject options in the Arguments section of CREATE EXTERNAL TABLE (Transact-SQL) topic.
0 (impostazione predefinita), 1, 2, …0 (default), 1, 2, … NoNo
rejectTyperejectType Indica se l'opzione rejectValue viene specificata come valore letterale o come percentuale.Specifies whether the rejectValue option is specified as a literal value or a percentage. Value (impostazione predefinita), PercentageValue (default), Percentage NoNo
rejectSampleValuerejectSampleValue Determina il numero di righe da recuperare prima che PolyBase ricalcoli la percentuale di righe rifiutate.Determines the number of rows to retrieve before the PolyBase recalculates the percentage of rejected rows. 1, 2, …1, 2, … Sì se rejectType è percentageYes, if rejectType is percentage
useTypeDefaultuseTypeDefault Specifica come gestire i valori mancanti nei file con testo delimitato quando PolyBase recupera dati dal file di testo.Specifies how to handle missing values in delimited text files when PolyBase retrieves data from the text file.

Per altre informazioni su questa proprietà, vedere la sezione Arguments (Argomenti) in CREATE EXTERNAL FILE FORMAT (Transact-SQL).Learn more about this property from the Arguments section in CREATE EXTERNAL FILE FORMAT (Transact-SQL).
True, False (valore predefinito)True, False (default) NoNo
writeBatchSizewriteBatchSize Inserisce dati nella tabella SQL quando la dimensione del buffer raggiunge writeBatchSize.Inserts data into the SQL table when the buffer size reaches writeBatchSize Numero intero (numero di righe)Integer (number of rows) No (valore predefinito: 10.000)No (default: 10000)
writeBatchTimeoutwriteBatchTimeout Tempo di attesa per l'operazione di inserimento batch da completare prima del timeout.Wait time for the batch insert operation to complete before it times out. Intervallo di tempotimespan

Esempio: "00:30:00" (30 minuti).Example: “00:30:00” (30 minutes).
NoNo

Esempio SqlDWSinkSqlDWSink example

"sink": {
    "type": "SqlDWSink",
    "allowPolyBase": true
}

Usare PolyBase per caricare dati in Azure SQL Data WarehouseUse PolyBase to load data into Azure SQL Data Warehouse

PolyBase consente di caricare con efficacia grandi quantità di dati in Azure SQL Data Warehouse con una velocità effettiva elevata.Using PolyBase is an efficient way of loading large amount of data into Azure SQL Data Warehouse with high throughput. L'uso di PolyBase consente un miglioramento significativo della velocità effettiva rispetto al meccanismo BULKINSERT predefinito.You can see a large gain in the throughput by using PolyBase instead of the default BULKINSERT mechanism. Vedere Copiare il numero di riferimento prestazioni con il confronto dettagliato.See copy performance reference number with detailed comparison. Per la procedura dettagliata con un caso d'uso, vedere Caricare 1 TB di dati in Azure SQL Data Warehouse in meno di 15 minuti con Azure Data Factory.For a walkthrough with a use case, see Load 1 TB into Azure SQL Data Warehouse under 15 minutes with Azure Data Factory.

  • Se il formato dei dati di origine è BLOB di Azure o Azure Data Lake Store e compatibile con PolyBase, è possibile eseguire la copia direttamente in Azure SQL Data Warehouse usando PolyBase.If your source data is in Azure Blob or Azure Data Lake Store, and the format is compatible with PolyBase, you can directly copy to Azure SQL Data Warehouse using PolyBase. Vedere Copia diretta tramite PolyBase con i relativi dettagli.See Direct copy using PolyBase with details.
  • Se l'archivio e il formato dei dati di origine non sono supportati in origine da PolyBase, è possibile usare la funzione copia di staging tramite PolyBase .If your source data store and format is not originally supported by PolyBase, you can use the Staged Copy using PolyBase feature instead. Viene inoltre generata una migliore velocità effettiva tramite la conversione automatica dei dati nel formato compatibile con PolyBase e l'archiviazione dei dati in Archiviazione BLOB di Azure.It also provides you better throughput by automatically converting the data into PolyBase-compatible format and storing the data in Azure Blob storage. Vengono quindi caricati i dati in SQL Data Warehouse.It then loads data into SQL Data Warehouse.

Impostare la proprietà allowPolyBase su true, come illustrato nell'esempio seguente per Azure Data Factory, per usare PolyBase per copiare i dati in Azure SQL Data Warehouse.Set the allowPolyBase property to true as shown in the following example for Azure Data Factory to use PolyBase to copy data into Azure SQL Data Warehouse. Quando si imposta allowPolyBase su true, è possibile specificare proprietà specifiche di PolyBase usando il gruppo di proprietà polyBaseSettings.When you set allowPolyBase to true, you can specify PolyBase specific properties using the polyBaseSettings property group. Per informazioni dettagliate sulle proprietà che è possibile usare con polyBaseSettings, vedere la sezione SqlDWSink .see the SqlDWSink section for details about properties that you can use with polyBaseSettings.

"sink": {
    "type": "SqlDWSink",
    "allowPolyBase": true,
    "polyBaseSettings":
    {
        "rejectType": "percentage",
        "rejectValue": 10.0,
        "rejectSampleValue": 100,
        "useTypeDefault": true
    }
}

Copia diretta tramite PolyBaseDirect copy using PolyBase

PolyBase di SQL Data Warehouse supporta direttamente Archiviazione BLOB di Azure e Azure Data Lake Store (mediante l'entità servizio) come origine e con requisiti di formato di file specifico.SQL Data Warehouse PolyBase directly support Azure Blob and Azure Data Lake Store (using service principal) as source and with specific file format requirements. Se i dati di origine soddisfano i criteri descritti in questa sezione, è possibile eseguire la copia direttamente dall'archivio dati di origine ad Azure SQL Data Warehouse con PolyBase.If your source data meets the criteria described in this section, you can directly copy from source data store to Azure SQL Data Warehouse using PolyBase. In caso contrario è possibile usare la copia di staging tramite PolyBase.Otherwise, you can use Staged Copy using PolyBase.

Suggerimento

Nell'articolo Azure Data Factory makes it even easier and convenient to uncover insights from data when using Data Lake Store with SQL Data Warehouse (Con Azure Data Factory è ancora più semplice e pratico individuare informazioni utili sui dati quando si usa Data Lake Store con SQL Data Warehouse) sono indicate altre informazioni utili per copiare efficacemente i dati da Data Lake Store a SQL Data Warehouse.To copy data from Data Lake Store to SQL Data Warehouse efficiently, learn more from Azure Data Factory makes it even easier and convenient to uncover insights from data when using Data Lake Store with SQL Data Warehouse.

Se i requisiti non vengono soddisfatti, Azure Data Factory controlla le impostazioni e usa automaticamente il meccanismo BULKINSERT per lo spostamento dei dati.If the requirements are not met, Azure Data Factory checks the settings and automatically falls back to the BULKINSERT mechanism for the data movement.

  1. Il servizio collegato all'origine è di tipo AzureStorage o AzureDataLakeStore con autenticazione entità servizio.Source linked service is of type: AzureStorage or AzureDataLakeStore with service principal authentication.

  2. Il set di dati di input è di tipo AzureBlob o AzureDataLakeStore e il tipo di formato nelle proprietà type è OrcFormat ParquetFormat o TextFormat, con le configurazioni seguenti:The input dataset is of type: AzureBlob or AzureDataLakeStore, and the format type under type properties is OrcFormat, ParquetFormat, or TextFormat with the following configurations:

    1. rowDelimiter deve essere \n.rowDelimiter must be \n.

    2. nullValue è impostato su stringa vuota ("") o treatEmptyAsNull è impostato su true.nullValue is set to empty string (""), or treatEmptyAsNull is set to true.

    3. encodingName è impostato su utf-8, ovvero il valore predefinito.encodingName is set to utf-8, which is default value.

    4. escapeChar, quoteChar, firstRowAsHeader e skipLineCount non sono specificati.escapeChar, quoteChar, firstRowAsHeader, and skipLineCount are not specified.

    5. compression può essere no compression, GZip o Deflate.compression can be no compression, GZip, or Deflate.

      "typeProperties": {
       "folderPath": "<blobpath>",
       "format": {
           "type": "TextFormat",
           "columnDelimiter": "<any delimiter>",
           "rowDelimiter": "\n",
           "nullValue": "",
           "encodingName": "utf-8"
       },
       "compression": {
           "type": "GZip",
           "level": "Optimal"
       }
      },
      
  3. Non è disponibile alcuna impostazione skipHeaderLineCount in BlobSource o AzureDataLakeStore per l'attività di copia nella pipeline.There is no skipHeaderLineCount setting under BlobSource or AzureDataLakeStore for the Copy activity in the pipeline.

  4. Non è disponibile alcuna impostazione sliceIdentifierColumnName in SqlDWSink per l'attività di copia nella pipeline.There is no sliceIdentifierColumnName setting under SqlDWSink for the Copy activity in the pipeline. PolyBase garantisce che tutti i dati verranno aggiornati o che nessun dato verrà aggiornato in una singola esecuzione.(PolyBase guarantees that all data is updated or nothing is updated in a single run. Per ottenere la ripetibilità, è possibile usare sqlWriterCleanupScript.To achieve repeatability, you could use sqlWriterCleanupScript).

  5. Nell'attività di copia associata non viene usato alcun valore columnMapping.There is no columnMapping being used in the associated in Copy activity.

copia di staging tramite PolyBaseStaged Copy using PolyBase

Quando i dati di origine non soddisfano i criteri presentati nella sezione precedente, è possibile abilitare la copia dei dati tramite un'istanza di Archiviazione BLOB di Azure di gestione temporanea provvisoria (non può essere Archiviazione Premium).When your source data doesn’t meet the criteria introduced in the previous section, you can enable copying data via an interim staging Azure Blob Storage (cannot be Premium Storage). In questo caso, Azure Data Factory esegue automaticamente trasformazioni sui dati in modo che soddisfino i requisiti di formato dei dati di PolyBase e quindi usa PolyBase per caricare i dati in SQL Data Warehouse e infine pulisce i dati temporanei dall'archiviazione BLOB.In this case, Azure Data Factory automatically performs transformations on the data to meet data format requirements of PolyBase, then use PolyBase to load data into SQL Data Warehouse, and at last clean-up your temp data from the Blob storage. Per informazioni dettagliate sul funzionamento generale della copia dei dati tramite un BLOB di Azure di staging, vedere la sezione Copia di staging .See Staged Copy for details on how copying data via a staging Azure Blob works in general.

Nota

Quando si copiano dati da un locale archivio dati in Azure SQL Data Warehouse usando PolyBase e la gestione temporanea, se la versione di Gateway di gestione dati è di sotto 2.4, JRE (Java Runtime Environment) nel computer gateway che viene usato per trasformare l'origine dati nel formato corretto.When copying data from an on premises data store into Azure SQL Data Warehouse using PolyBase and staging, if your Data Management Gateway version is below 2.4, JRE (Java Runtime Environment) is required on your gateway machine that is used to transform your source data into proper format. È consigliabile aggiornare il gateway installando la versione più recente per evitare tale dipendenza.Suggest you upgrade your gateway to the latest to avoid such dependency.

Per usare questa funzionalità, creare un servizio collegato Archiviazione di Azure che faccia riferimento all'account di archiviazione di Azure contenente l'archivio BLOB provvisorio e quindi specificare le proprietà enableStaging e stagingSettings per l'attività di copia come illustrato nel codice seguente:To use this feature, create an Azure Storage linked service that refers to the Azure Storage Account that has the interim blob storage, then specify the enableStaging and stagingSettings properties for the Copy Activity as shown in the following code:

"activities":[
{
    "name": "Sample copy activity from SQL Server to SQL Data Warehouse via PolyBase",
    "type": "Copy",
    "inputs": [{ "name": "OnpremisesSQLServerInput" }],
    "outputs": [{ "name": "AzureSQLDWOutput" }],
    "typeProperties": {
        "source": {
            "type": "SqlSource",
        },
        "sink": {
            "type": "SqlDwSink",
            "allowPolyBase": true
        },
        "enableStaging": true,
        "stagingSettings": {
            "linkedServiceName": "MyStagingBlob"
        }
    }
}
]

Procedure consigliate per l'uso di PolyBaseBest practices when using PolyBase

Le sezioni seguenti forniscono procedure consigliate aggiuntive a quelle descritte in Procedure consigliate per Azure SQL Data Warehouse.The following sections provide additional best practices to the ones that are mentioned in Best practices for Azure SQL Data Warehouse.

Autorizzazione database obbligatoriaRequired database permission

Per usare PolyBase, è necessario che l'utente che è solito caricare i dati in SQL Data Warehouse disponga dell'autorizzazione "CONTROL" nel database di destinazione.To use PolyBase, it requires the user being used to load data into SQL Data Warehouse has the "CONTROL" permission on the target database. Un modo per ottenere questo risultato consiste nell'aggiungere tale utente come membro del ruolo "db_owner".One way to achieve that is to add that user as a member of "db_owner" role. Informazioni su come eseguire questa operazione sono disponibili nella sezione seguente.Learn how to do that by following this section.

Limitazione alle dimensioni di righe e al tipo di datiRow size and data type limitation

Le operazioni di caricamento di PolyBase sono limitate al caricamento di righe inferiori a 1 MB che non possono essere caricate in VARCHR(MAX), NVARCHAR(MAX) o VARBINARY(MAX).Polybase loads are limited to loading rows both smaller than 1 MB and cannot load to VARCHR(MAX), NVARCHAR(MAX) or VARBINARY(MAX). Vedere qui.Refer to here.

Se sono presenti dati di origine con righe di dimensioni superiori a 1 MB, è consigliabile suddividere verticalmente le tabelle di origine in tabelle più piccole, in cui le dimensioni massime delle righe di ogni tabella non superano il limite previsto.If you have source data with rows of size greater than 1 MB, you may want to split the source tables vertically into several small ones where the largest row size of each of them does not exceed the limit. Le tabelle più piccole possono essere quindi caricate usando PolyBase e unite in Azure SQL Data Warehouse.The smaller tables can then be loaded using PolyBase and merged together in Azure SQL Data Warehouse.

Classe di risorse di SQL Data WarehouseSQL Data Warehouse resource class

Per ottenere le migliori prestazioni possibili, considerare di assegnare una classe di risorse più ampia all'utente che carica i dati in SQL Data Warehouse tramite PolyBase.To achieve best possible throughput, consider to assign larger resource class to the user being used to load data into SQL Data Warehouse via PolyBase. Per eseguire questa operazione, seguire la procedura descritta in Esempio di modifica della classe di risorse di un utente.Learn how to do that by following Change a user resource class example.

tableName in Azure SQL Data WarehousetableName in Azure SQL Data Warehouse

La tabella seguente fornisce esempi relativi a come specificare la proprietà tableName nel set di dati JSON per diverse combinazioni di nomi di schema e di tabella.The following table provides examples on how to specify the tableName property in dataset JSON for various combinations of schema and table name.

Schema di databaseDB Schema Nome tabellaTable name Proprietà JSON tableNametableName JSON property
dbodbo MyTableMyTable MyTable o dbo.MyTable o [dbo].[MyTable]MyTable or dbo.MyTable or [dbo].[MyTable]
dbo1dbo1 MyTableMyTable dbo1.MyTable o [dbo1].[MyTable]dbo1.MyTable or [dbo1].[MyTable]
dbodbo My.TableMy.Table [My.Table] o [dbo].[My.Table][My.Table] or [dbo].[My.Table]
dbo1dbo1 My.TableMy.Table [dbo1].[My.Table][dbo1].[My.Table]

Se viene visualizzato l'errore seguente, potrebbe essersi verificato un problema con il valore specificato per la proprietà tableName.If you see the following error, it could be an issue with the value you specified for the tableName property. Per informazioni sul modo corretto di specificare i valori per la proprietà JSON tableName, vedere la relativa tabella.See the table for the correct way to specify values for the tableName JSON property.

Type=System.Data.SqlClient.SqlException,Message=Invalid object name 'stg.Account_test'.,Source=.Net SqlClient Data Provider

Colonne con valori predefinitiColumns with default values

La funzionalità PolyBase in Data Factory accetta attualmente lo stesso numero di colonne disponibili nella tabella di destinazione.Currently, PolyBase feature in Data Factory only accepts the same number of columns as in the target table. Se si ha una tabella con quattro colonne di cui una definita con un valore predefinito, ad esempio,Say, you have a table with four columns and one of them is defined with a default value. i dati di input dovranno comunque contenere quattro colonne.The input data should still contain four columns. Se si specifica un set di dati di input con 3 colonne, si verificherà un errore simile al messaggio seguente:Providing a 3-column input dataset would yield an error similar to the following message:

All columns of the table must be specified in the INSERT BULK statement.

Il valore NULL è una forma speciale di valore predefinito.NULL value is a special form of default value. Se la colonna ammette valori Null, i dati di input (nel BLOB) per tale colonna possono essere vuoti, ma non possono essere mancanti dal set di dati di input.If the column is nullable, the input data (in blob) for that column could be empty (cannot be missing from the input dataset). PolyBase inserisce NULL per tali valori in Azure SQL Data Warehouse.PolyBase inserts NULL for them in the Azure SQL Data Warehouse.

Creazione automatica della tabellaAuto table creation

Se si usa la copia guidata per copiare i dati da SQL Server o da Database SQL di Azure in SQL Data Warehouse e la tabella che corrisponde alla tabella di origine non esiste nell'archivio di destinazione, Data Factory la crea automaticamente nel data warehouse usando lo schema della tabella di origine.If you are using Copy Wizard to copy data from SQL Server or Azure SQL Database to Azure SQL Data Warehouse and the table that corresponds to the source table does not exist in the destination store, Data Factory can automatically create the table in the data warehouse by using the source table schema.

Data Factory crea la tabella nell'archivio di destinazione con lo stesso nome della tabella nell'archivio dati di origine.Data Factory creates the table in the destination store with the same table name in the source data store. I tipi di dati per le colonne vengono scelti in base al mapping dei tipi seguenti.The data types for columns are chosen based on the following type mapping. Se necessario, esegue le conversioni del tipo per risolvere eventuali incompatibilità tra gli archivi di origine e di destinazione.If needed, it performs type conversions to fix any incompatibilities between source and destination stores. Usa inoltre la distribuzione di tabella Round Robin.It also uses Round Robin table distribution.

Tipo di colonna di origine del Database SQLSource SQL Database column type Tipo di colonna SQL DW di destinazione del Database (limitazione delle dimensioni)Destination SQL DW column type (size limitation)
IntInt IntInt
BigIntBigInt BigIntBigInt
SmallIntSmallInt SmallIntSmallInt
TinyIntTinyInt TinyIntTinyInt
BitBit BitBit
DecimalDecimal DecimalDecimal
NumericNumeric DecimalDecimal
FloatFloat FloatFloat
MoneyMoney MoneyMoney
RealReal RealReal
SmallMoneySmallMoney SmallMoneySmallMoney
BinaryBinary BinaryBinary
VarbinaryVarbinary Varbinary (fino a 8000)Varbinary (up to 8000)
DataDate DataDate
DatetimeDateTime DatetimeDateTime
DateTime2DateTime2 DateTime2DateTime2
TempoTime TempoTime
DateTimeOffsetDateTimeOffset DateTimeOffsetDateTimeOffset
SmallDateTimeSmallDateTime SmallDateTimeSmallDateTime
TextText Varchar (fino a 8000)Varchar (up to 8000)
NTextNText NVarChar (fino a 4000)NVarChar (up to 4000)
ImageImage VarBinary (fino a 8000)VarBinary (up to 8000)
UniqueIdentifierUniqueIdentifier UniqueIdentifierUniqueIdentifier
CharChar CharChar
NCharNChar NCharNChar
VarCharVarChar VarChar (fino a 8000)VarChar (up to 8000)
NVarCharNVarChar NVarChar (fino a 4000)NVarChar (up to 4000)
XmlXml Varchar (fino a 8000)Varchar (up to 8000)

Ripetibilità durante la copiaRepeatability during Copy

Quando si copiano dati in un database di SQL Server/SQL di Azure da altri archivi dati, è necessario definire criteri di ripetibilità per evitare risultati imprevisti.When copying data to Azure SQL/SQL Server from other data stores one needs to keep repeatability in mind to avoid unintended outcomes.

Quando si copiano dati in un database SQL Server/SQL di Azure, per impostazione predefinita l'attività di copia ACCODA il set di dati alla tabella di sink predefinita.When copying data to Azure SQL/SQL Server Database, copy activity will by default APPEND the data set to the sink table by default. Ad esempio, quando si copiano dati da un'origine file con estensione csv (valori delimitati da virgole) composta da due record in un database di SQL Server/SQL di Azure, la tabella assume l'aspetto seguente:For example, when copying data from a CSV (comma separated values data) file source containing two records to Azure SQL/SQL Server Database, this is what the table looks like:

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    2            2015-05-01 00:00:00

Si supponga di aver trovato degli errori nel file di origine e di aver aggiornato la quantità di Down Tube da 2 a 4 nel file di origine.Suppose you found errors in source file and updated the quantity of Down Tube from 2 to 4 in the source file. Se si esegue nuovamente la sezione di dati per quel periodo, saranno disponibili due nuovi record accodati al database di SQL Server/SQL di Azure.If you re-run the data slice for that period, you’ll find two new records appended to Azure SQL/SQL Server Database. L'esempio seguente presuppone che in nessuna delle colonne della tabella sia presente il vincolo di chiave primaria.The below assumes none of the columns in the table have the primary key constraint.

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    2            2015-05-01 00:00:00
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    4            2015-05-01 00:00:00

Per evitare questa situazione, è necessario specificare la semantica UPSERT usando uno dei due meccanismi illustrati di seguito.To avoid this, you will need to specify UPSERT semantics by leveraging one of the below 2 mechanisms stated below.

Nota

In base ai criteri di ripetizione dei tentativi specificati, è possibile ripetere automaticamente l'esecuzione di una sezione anche in Data Factory di Azure.A slice can be re-run automatically in Azure Data Factory as per the retry policy specified.

Meccanismo 1Mechanism 1

È possibile usare la proprietà sqlWriterCleanupScript per eseguire un'azione di pulizia prima dell'esecuzione di una sezione.You can leverage sqlWriterCleanupScript property to first perform cleanup action when a slice is run.

"sink":  
{ 
  "type": "SqlSink", 
  "sqlWriterCleanupScript": "$$Text.Format('DELETE FROM table WHERE ModifiedDate >= \\'{0:yyyy-MM-dd HH:mm}\\' AND ModifiedDate < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
}

In questo caso, durante la copia di una sezione viene prima eseguito uno script di pulizia che elimina i dati dalla tabella SQL corrispondente alla sezione.The cleanup script would be executed first during copy for a given slice which would delete the data from the SQL Table corresponding to that slice. L'attività di copia inserirà i dati nella tabella SQL in un momento successivo.The activity will subsequently insert the data into the SQL Table.

Se la sezione viene eseguita nuovamente, la quantità risulterà aggiornata come desiderato.If the slice is now re-run, then you will find the quantity is updated as desired.

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    4            2015-05-01 00:00:00

Si supponga, ad esempio, che il record Flat Washer venga rimosso dal file con estensione csv originale.Suppose the Flat Washer record is removed from the original csv. Se la sezione viene eseguita nuovamente, si ottiene il risultato seguente:Then re-running the slice would produce the following result:

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
7     Down Tube    4            2015-05-01 00:00:00

Nessuna nuova operazione è stata eseguita.Nothing new had to be done. L'attività di copia ha eseguito lo script di pulizia per eliminare i dati corrispondenti alla sezione.The copy activity ran the cleanup script to delete the corresponding data for that slice. Quindi, ha letto l'input dal CSV (che conteneva solo 1 record) e lo ha inserito nella tabella.Then it read the input from the csv (which then contained only 1 record) and inserted it into the Table.

Meccanismo 2Mechanism 2

Importante

Attualmente sliceIdentifierColumnName non è supportato per SQL Data Warehouse di Azure.sliceIdentifierColumnName is not supported for Azure SQL Data Warehouse at this time.

Un altro meccanismo per ottenere la ripetibilità prevede la disponibilità di una colonna dedicata (sliceIdentifierColumnName) nella tabella di destinazione.Another mechanism to achieve repeatability is by having a dedicated column (sliceIdentifierColumnName) in the target Table. Questa colonna viene usata da Data factory di Azure per garantire che l'origine e la destinazione rimangano sincronizzate.This column would be used by Azure Data Factory to ensure the source and destination stay synchronized. Questo approccio può essere usato solo quando è disponibile una certa flessibilità nella modifica o nella definizione dello schema della tabella SQL di destinazione.This approach works when there is flexibility in changing or defining the destination SQL Table schema.

La colonna viene usata da Data factory di Azure per scopi di ripetibilità e nel corso del processo Data factory di Azure non apporterà alcuna modifica allo schema della tabella.This column would be used by Azure Data Factory for repeatability purposes and in the process Azure Data Factory will not make any schema changes to the Table. Per applicare questo approccio, è possibile seguire questa procedura:Way to use this approach:

  1. Definire una colonna di tipo binario (32) nella tabella SQL di destinazione,Define a column of type binary (32) in the destination SQL Table. in cui non sia presente alcun vincolo.There should be no constraints on this column. Ai fini di questo esempio, la colonna viene denominata "ColumnForADFuseOnly".Let's name this column as ‘ColumnForADFuseOnly’ for this example.

  2. Usarla nell'attività di copia come segue:Use it in the copy activity as follows:

    "sink":  
    { 
    
        "type": "SqlSink", 
        "sliceIdentifierColumnName": "ColumnForADFuseOnly"
    }
    

Data factory di Azure popolerà la colonna in modo che l'origine e la destinazione risultino sincronizzate.Azure Data Factory will populate this column as per its need to ensure the source and destination stay synchronized. L'utente non potrà usare i valori della colonna al di fuori di questo contesto.The values of this column should not be used outside of this context by the user.

Analogamente al meccanismo 1, l'attività di copia pulisce prima i dati della sezione specificata dalla tabella SQL di destinazione, quindi esegue normalmente l'attività di copia per inserire i dati dall'origine alla destinazione della sezione.Similar to mechanism 1, Copy Activity will automatically first clean up the data for the given slice from the destination SQL Table and then run the copy activity normally to insert the data from source to destination for that slice.

Mapping dei tipi per Azure SQL Data WarehouseType mapping for Azure SQL Data Warehouse

Come accennato nell'articolo sulle attività di spostamento dei dati , l'attività di copia esegue conversioni automatiche da tipi di origine a tipi di sink con l'approccio seguente in 2 passaggi:As mentioned in the data movement activities article, Copy activity performs automatic type conversions from source types to sink types with the following 2-step approach:

  1. Conversione dai tipi di origine nativi al tipo .NETConvert from native source types to .NET type
  2. Conversione dal tipo .NET al tipo di sink nativoConvert from .NET type to native sink type

Quando si spostano dati da e verso Azure SQL Data Warehouse, vengono usati i mapping seguenti dal tipo SQL al tipo .NET e viceversa.When moving data to & from Azure SQL Data Warehouse, the following mappings are used from SQL type to .NET type and vice versa.

Il mapping è uguale al mapping del tipo di dati di SQL Server per ADO.NET.The mapping is same as the SQL Server Data Type Mapping for ADO.NET.

Tipo di motore di database di SQL ServerSQL Server Database Engine type Tipo di .NET Framework.NET Framework type
bigintbigint Int64Int64
binarybinary Byte[]Byte[]
bitbit BooleanBoolean
charchar String, Char[]String, Char[]
datedate DateTimeDateTime
DatetimeDatetime DateTimeDateTime
datetime2datetime2 DateTimeDateTime
DatetimeoffsetDatetimeoffset DateTimeOffsetDateTimeOffset
DecimalDecimal DecimalDecimal
FILESTREAM attribute (varbinary(max))FILESTREAM attribute (varbinary(max)) Byte[]Byte[]
FloatFloat DoubleDouble
imageimage Byte[]Byte[]
intint Int32Int32
moneymoney DecimalDecimal
ncharnchar String, Char[]String, Char[]
ntextntext String, Char[]String, Char[]
numericnumeric DecimalDecimal
nvarcharnvarchar String, Char[]String, Char[]
realreal SingleSingle
rowversionrowversion Byte[]Byte[]
smalldatetimesmalldatetime DateTimeDateTime
smallintsmallint Int16Int16
smallmoneysmallmoney DecimalDecimal
sql_variantsql_variant Object *Object *
texttext String, Char[]String, Char[]
timetime TimeSpanTimeSpan
timestamptimestamp Byte[]Byte[]
tinyinttinyint ByteByte
uniqueidentifieruniqueidentifier GuidGuid
varbinaryvarbinary Byte[]Byte[]
varcharvarchar String, Char[]String, Char[]
xmlxml XmlXml

È anche possibile eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati sink nella definizione dell'attività di copia.You can also map columns from source dataset to columns from sink dataset in the copy activity definition. Per altre informazioni, vedere Mapping delle colonne del set di dati in Azure Data Factory.For details, see Mapping dataset columns in Azure Data Factory.

Esempi JSON per la copia dei dati da e verso SQL Data WarehouseJSON examples for copying data to and from SQL Data Warehouse

Gli esempi seguenti forniscono le definizioni JSON di esempio che è possibile usare per creare una pipeline usando Visual Studio oppure Azure PowerShell.The following examples provide sample JSON definitions that you can use to create a pipeline by using Visual Studio or Azure PowerShell. Tali esempi mostrano come copiare dati in e da Azure SQL Data Warehouse e in e dall'archivio BLOB di Azure.They show how to copy data to and from Azure SQL Data Warehouse and Azure Blob Storage. Tuttavia, i dati possono essere copiati direttamente da una delle origini in qualsiasi sink dichiarato qui usando l'attività di copia in Data factory di Azure.However, data can be copied directly from any of sources to any of the sinks stated here using the Copy Activity in Azure Data Factory.

Esempio: Copiare dati da Azure SQL Data Warehouse a BLOB di AzureExample: Copy data from Azure SQL Data Warehouse to Azure Blob

L'esempio definisce le entità di Data Factory seguenti:The sample defines the following Data Factory entities:

  1. Un servizio collegato di tipo AzureSqlDW.A linked service of type AzureSqlDW.
  2. Un servizio collegato di tipo AzureStorage.A linked service of type AzureStorage.
  3. Un set di dati di input di tipo AzureSqlDWTable.An input dataset of type AzureSqlDWTable.
  4. Un set di dati di output di tipo AzureBlob.An output dataset of type AzureBlob.
  5. Una pipeline con attività di copia che usa SqlDWSource e BlobSink.A pipeline with Copy Activity that uses SqlDWSource and BlobSink.

L'esempio copia ogni ora i dati di una serie temporale (con frequenza oraria, giornaliera e così via) da una tabella del database di Azure SQL Data Warehouse a un BLOB.The sample copies time-series (hourly, daily, etc.) data from a table in Azure SQL Data Warehouse database to a blob every hour. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.The JSON properties used in these samples are described in sections following the samples.

Servizio collegato di Azure SQL Data Warehouse:Azure SQL Data Warehouse linked service:

{
  "name": "AzureSqlDWLinkedService",
  "properties": {
    "type": "AzureSqlDW",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

Servizio collegato di archiviazione BLOB di Azure:Azure Blob storage linked service:

{
  "name": "StorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

Set di dati di input di Azure SQL Data Warehouse:Azure SQL Data Warehouse input dataset:

L'esempio presuppone che sia stata creata una tabella "MyTable" in Azure SQL Data Warehouse e che contenga una colonna denominata "timestampcolumn" per i dati di una serie temporale.The sample assumes you have created a table “MyTable” in Azure SQL Data Warehouse and it contains a column called “timestampcolumn” for time series data.

Impostando "external" su "true" si comunica al servizio Data Factory che il set di dati è esterno alla data factory e non è prodotto da un'attività al suo interno.Setting “external”: ”true” informs the Data Factory service that the dataset is external to the data factory and is not produced by an activity in the data factory.

{
  "name": "AzureSqlDWInput",
  "properties": {
    "type": "AzureSqlDWTable",
    "linkedServiceName": "AzureSqlDWLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Set di dati di output del BLOB di Azure:Azure Blob output dataset:

I dati vengono scritti in un nuovo BLOB ogni ora (frequenza: oraria, intervallo: 1).Data is written to a new blob every hour (frequency: hour, interval: 1). Il percorso della cartella per il BLOB viene valutato dinamicamente in base all'ora di inizio della sezione in fase di elaborazione.The folder path for the blob is dynamically evaluated based on the start time of the slice that is being processed. Il percorso della cartella usa le parti anno, mese, giorno e ora dell'ora di inizio.The folder path uses year, month, day, and hours parts of the start time.

{
  "name": "AzureBlobOutput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "\t",
        "rowDelimiter": "\n"
      }
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Attività di copia in una pipeline con SqlDWSource e BlobSink:Copy activity in a pipeline with SqlDWSource and BlobSink:

La pipeline contiene un'attività di copia configurata per usare i set di dati di input e output ed è programmata per essere eseguita ogni ora.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Nella definizione JSON della pipeline, il tipo di origine è impostato su SqlDWSource e il tipo di sink è impostato su BlobSink.In the pipeline JSON definition, the source type is set to SqlDWSource and sink type is set to BlobSink. La query SQL specificata per la proprietà SqlReaderQuery consente di selezionare i dati da copiare nell'ultima ora.The SQL query specified for the SqlReaderQuery property selects the data in the past hour to copy.

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline for copy activity",
    "activities":[
      {
        "name": "AzureSQLDWtoBlob",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureSqlDWInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureBlobOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "SqlDWSource",
            "sqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
          },
          "sink": {
            "type": "BlobSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

Nota

Nell'esempio, la proprietà sqlReaderQuery è specificata per SqlDWSource.In the example, sqlReaderQuery is specified for the SqlDWSource. L'attività di copia esegue questa query nell'origine dell’SQL Data Warehouse di Azure per ottenere i dati.The Copy Activity runs this query against the Azure SQL Data Warehouse source to get the data.

In alternativa, è possibile specificare una stored procedure indicando i parametri sqlReaderStoredProcedureName e storedProcedureParameters (se la stored procedure accetta parametri).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Se non si specifica il parametro sqlReaderQuery o sqlReaderStoredProcedureName, le colonne definite nella sezione della struttura del set di dati JSON vengono usate per compilare una query (selezionare column1, column2 da mytable) da eseguire nell’SQL Data Warehouse.If you do not specify either sqlReaderQuery or sqlReaderStoredProcedureName, the columns defined in the structure section of the dataset JSON are used to build a query (select column1, column2 from mytable) to run against the Azure SQL Data Warehouse. Se la definizione del set di dati non dispone della struttura, vengono selezionate tutte le colonne della tabella.If the dataset definition does not have the structure, all columns are selected from the table.

Esempio: Copiare dati da BLOB di Azure ad Azure SQL Data WarehouseExample: Copy data from Azure Blob to Azure SQL Data Warehouse

L'esempio definisce le entità di Data Factory seguenti:The sample defines the following Data Factory entities:

  1. Un servizio collegato di tipo AzureSqlDW.A linked service of type AzureSqlDW.
  2. Un servizio collegato di tipo AzureStorage.A linked service of type AzureStorage.
  3. Un set di dati di input di tipo AzureBlob.An input dataset of type AzureBlob.
  4. Un set di dati di output di tipo AzureSqlDWTable.An output dataset of type AzureSqlDWTable.
  5. Una pipeline con attività di copia che usa BlobSource e SqlDWSink.A pipeline with Copy activity that uses BlobSource and SqlDWSink.

L'esempio copia ogni ora i dati di una serie temporale (con frequenza oraria, giornaliera e così via) da un BLOB di Azure a una tabella del database di Azure SQL Data Warehouse.The sample copies time-series data (hourly, daily, etc.) from Azure blob to a table in Azure SQL Data Warehouse database every hour. Le proprietà JSON usate in questi esempi sono descritte nelle sezioni riportate dopo gli esempi.The JSON properties used in these samples are described in sections following the samples.

Servizio collegato di Azure SQL Data Warehouse:Azure SQL Data Warehouse linked service:

{
  "name": "AzureSqlDWLinkedService",
  "properties": {
    "type": "AzureSqlDW",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

Servizio collegato di archiviazione BLOB di Azure:Azure Blob storage linked service:

{
  "name": "StorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

Set di dati di input del BLOB di Azure:Azure Blob input dataset:

I dati vengono prelevati da un nuovo BLOB ogni ora (frequenza: oraria, intervallo: 1).Data is picked up from a new blob every hour (frequency: hour, interval: 1). Il percorso della cartella e il nome del file per il BLOB vengono valutati dinamicamente in base all'ora di inizio della sezione in fase di elaborazione.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that is being processed. Il percorso della cartella usa le parti di anno, mese e giorno della data/ora di inizio e il nome file usa la parte relativa all'ora.The folder path uses year, month, and day part of the start time and file name uses the hour part of the start time. L'impostazione di "external" su "true" comunica al servizio Data Factory che la tabella è esterna alla data factory e non è prodotta da un'attività al suo interno.“external”: “true” setting informs the Data Factory service that this table is external to the data factory and is not produced by an activity in the data factory.

{
  "name": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}",
      "fileName": "{Hour}.csv",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": "\n"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Set di dati di output di Azure SQL Data Warehouse:Azure SQL Data Warehouse output dataset:

Nell’esempio vengono copiati dati in una tabella denominata "MyTable" in Azure SQL Data Warehouse.The sample copies data to a table named “MyTable” in Azure SQL Data Warehouse. Creare la tabella in Azure SQL Data Warehouse con lo stesso numero di colonne previsto nel file CSV del BLOB.Create the table in Azure SQL Data Warehouse with the same number of columns as you expect the Blob CSV file to contain. Alla tabella vengono aggiunte nuove righe ogni ora.New rows are added to the table every hour.

{
  "name": "AzureSqlDWOutput",
  "properties": {
    "type": "AzureSqlDWTable",
    "linkedServiceName": "AzureSqlDWLinkedService",
    "typeProperties": {
      "tableName": "MyOutputTable"
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Copiare attività in una pipeline con BlobSource e SqlDWSink:Copy activity in a pipeline with BlobSource and SqlDWSink:

La pipeline contiene un'attività di copia configurata per usare i set di dati di input e output ed è programmata per essere eseguita ogni ora.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Nella definizione JSON della pipeline il tipo di origine è impostato su BlobSource e il tipo di sink è impostato su SqlDWSink.In the pipeline JSON definition, the source type is set to BlobSource and sink type is set to SqlDWSink.

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline with copy activity",
    "activities":[
      {
        "name": "AzureBlobtoSQLDW",
        "description": "Copy Activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureBlobInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureSqlDWOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource",
            "blobColumnSeparators": ","
          },
          "sink": {
            "type": "SqlDWSink",
            "allowPolyBase": true
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

Per una procedura dettagliata, vedere gli articoli Caricare 1 TB di dati in Azure SQL Data Warehouse in meno di 15 minuti con Azure Data Factory e Caricare i dati con Azure Data Factory nella documentazione di Azure SQL Data Warehouse.For a walkthrough, see the see Load 1 TB into Azure SQL Data Warehouse under 15 minutes with Azure Data Factory and Load data with Azure Data Factory article in the Azure SQL Data Warehouse documentation.

Ottimizzazione delle prestazioniPerformance and Tuning

Per informazioni sui fattori chiave che influiscono sulle prestazioni dello spostamento dei dati, ovvero dell'attività di copia, in Azure Data Factory e sui vari modi per ottimizzare tali prestazioni, vedere la Guida alle prestazioni delle attività di copia e all'ottimizzazione.See Copy Activity Performance & Tuning Guide to learn about key factors that impact performance of data movement (Copy Activity) in Azure Data Factory and various ways to optimize it.