Copier des données vers et à partir d’Azure SQL Data Warehouse à l’aide d’Azure Data FactoryCopy data to and from Azure SQL Data Warehouse using Azure Data Factory

Notes

Cet article s’applique à la version 1 de Data Factory.This article applies to version 1 of Data Factory. Si vous utilisez la version actuelle du service Data Factory, consultez Connecteur Azure SQL Data Warehouse dans V2.If you are using the current version of the Data Factory service, see Azure SQL Data Warehouse connector in V2.

Cet article explique comment utiliser l’activité de copie dans Azure Data Factory pour déplacer des données vers ou à partir d’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. Il s’appuie sur l’article Activités de déplacement des données, qui présente une vue d’ensemble du déplacement de données avec l’activité de copie.It builds on the Data Movement Activities article, which presents a general overview of data movement with the copy activity.

Conseil

Pour obtenir les meilleures performances, utilisez PolyBase pour charger des données dans Azure SQL Data Warehouse.To achieve best performance, use PolyBase to load data into Azure SQL Data Warehouse. Pour plus de détails, consultez Utiliser PolyBase pour charger des données dans Azure SQL Data Warehouse .The Use PolyBase to load data into Azure SQL Data Warehouse section has details. Consultez Charger 1 To dans Azure SQL Data Warehouse en moins de 15 minutes avec Azure Data Factory pour obtenir une procédure pas à pas avec un cas d’utilisation.For a walkthrough with a use case, see Load 1 TB into Azure SQL Data Warehouse under 15 minutes with Azure Data Factory.

Scénarios pris en chargeSupported scenarios

Vous pouvez copier des données depuis Azure SQL Data Warehouse vers les magasins de données suivants :You can copy data from Azure SQL Data Warehouse to the following data stores:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Index Recherche AzureAzure Search Index
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases SQL ServerSQL Server
OracleOracle
FichierFile Système de fichiersFile system

Vous pouvez copier des données depuis les magasins de données suivants vers Azure SQL Data Warehouse :You can copy data from the following data stores to Azure SQL Data Warehouse:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases Amazon RedshiftAmazon Redshift
DB2DB2
MySQLMySQL
OracleOracle
PostgreSQLPostgreSQL
SAP Business WarehouseSAP Business Warehouse
SAP HANASAP HANA
SQL ServerSQL Server
SybaseSybase
TeradataTeradata
NosqlNoSQL CassandraCassandra
MongoDBMongoDB
FichierFile Amazon S3Amazon S3
Système de fichiersFile system
FTPFTP
HDFSHDFS
SFTPSFTP
AutresOthers HTTP génériqueGeneric HTTP
OData génériqueGeneric OData
ODBC génériqueGeneric ODBC
SalesforceSalesforce
Table web (table HTML)Web table (table from HTML)

Conseil

Lors de la copie de données depuis SQL Server ou Azure SQL Database vers Azure SQL Data Warehouse, si la table n’existe pas dans le magasin de destination, Data Factory peut automatiquement créer la table dans SQL Data Warehouse en utilisant le schéma de la table dans le magasin de données source.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. Consultez Création automatique de la table pour plus d’informations.See Auto table creation for details.

Type d’authentification pris en chargeSupported authentication type

Le connecteur Azure SQL Data Warehouse prend en charge l’authentification de base.Azure SQL Data Warehouse connector support basic authentication.

Prise en mainGetting started

Vous pouvez créer un pipeline avec une activité de copie qui déplace les données vers/depuis Azure SQL Data Warehouse à l’aide de différents outils/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.

Le moyen le plus simple de créer un pipeline qui copie les données vers/depuis le Azure SQL Data Warehouse consiste à utiliser l’Assistant Copier des données.The easiest way to create a pipeline that copies data to/from Azure SQL Data Warehouse is to use the Copy data wizard. Consultez le tutoriel : Charger des données dans SQL Data Warehouse avec Data Factory pour obtenir un bref aperçu de la création d’un pipeline à l’aide de l’Assistant Copie de données.See Tutorial: Load data into SQL Data Warehouse with Data Factory for a quick walkthrough on creating a pipeline using the Copy data wizard.

Vous pouvez également utiliser les outils suivants pour créer un pipeline : portail Azure, Visual Studio, Azure PowerShell, modèle Azure Resource Manager, API .NET et API REST.You can also use the following tools to create a pipeline: Azure portal, Visual Studio, Azure PowerShell, Azure Resource Manager template, .NET API, and REST API. Pour obtenir des instructions détaillées sur la création d’un pipeline avec une activité de copie, consultez le didacticiel sur l’activité de copie.See Copy activity tutorial for step-by-step instructions to create a pipeline with a copy activity.

Que vous utilisiez des outils ou des API, la création d’un pipeline qui déplace les données d’un magasin de données source vers un magasin de données récepteur implique les étapes suivantes :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. Création d'une fabrique de données.Create a data factory. Une fabrique de données peut contenir un ou plusieurs pipelines.A data factory may contain one or more pipelines.
  2. Création de services liés pour lier les magasins de données d’entrée et de sortie à votre fabrique de données.Create linked services to link input and output data stores to your data factory. Par exemple, si vous copiez des données depuis un stockage d’objets blob Azure vers un entrepôt de données SQL Azure, vous créez deux services liés pour lier votre compte de stockage Azure et Azure SQL Data Warehouse à votre fabrique de données.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. Pour les propriétés du service lié qui sont spécifiques à Azure SQL Data Warehouse, consultez la section propriétés du service lié.For linked service properties that are specific to Azure SQL Data Warehouse, see linked service properties section.
  3. Création de jeux de données pour représenter les données d’entrée et de sortie de l’opération de copie.Create datasets to represent input and output data for the copy operation. Dans l’exemple mentionné dans la dernière étape, vous créez un jeu de données pour spécifier le conteneur d’objets blob et le dossier qui contient les données d’entrée.In the example mentioned in the last step, you create a dataset to specify the blob container and folder that contains the input data. Vous créez aussi un autre jeu de données pour spécifier la table dans l’entrepôt de données SQL Azure qui contient les données copiées depuis le stockage d’objets 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. Pour les propriétés du jeu de données qui sont spécifiques à Azure SQL Data Warehouse, consultez la section propriétés du jeu de données.For dataset properties that are specific to Azure SQL Data Warehouse, see dataset properties section.
  4. Création d’un pipeline avec une activité de copie qui utilise un jeu de données en tant qu’entrée et un jeu de données en tant que sortie.Create a pipeline with a copy activity that takes a dataset as an input and a dataset as an output. Dans l’exemple mentionné plus haut, vous utilisez BlobSource comme source et SqlDWSink comme récepteur pour l’activité de copie.In the example mentioned earlier, you use BlobSource as a source and SqlDWSink as a sink for the copy activity. De même, si vous copiez depuis Azure SQL Data Warehouse vers Stockage Blob Azure, vous utilisez SqlDWSource et BlobSink dans l’activité de copie.Similarly, if you are copying from Azure SQL Data Warehouse to Azure Blob Storage, you use SqlDWSource and BlobSink in the copy activity. Pour les propriétés de l’activité de copie qui sont spécifiques à Azure SQL Data Warehouse, consultez la section propriétés de l’activité de copie.For copy activity properties that are specific to Azure SQL Data Warehouse, see copy activity properties section. Pour plus d’informations sur l’utilisation d’un magasin de données comme source ou comme récepteur, cliquez sur le lien de la section précédente de votre magasin de données.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.

Lorsque vous utilisez l’Assistant, les définitions JSON de ces entités Data Factory (services liés, jeux de données et pipeline) sont automatiquement créées pour vous.When you use the wizard, JSON definitions for these Data Factory entities (linked services, datasets, and the pipeline) are automatically created for you. Lorsque vous utilisez des outils/API (à l’exception de l’API .NET), vous devez définir ces entités Data Factory au format JSON.When you use tools/APIs (except .NET API), you define these Data Factory entities by using the JSON format. Pour obtenir des exemples comportant des définitions JSON pour les entités Data Factory utilisées pour copier les données vers ou à partir d’Azure SQL Data Warehouse, consultez la section Exemples JSON de cet article.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.

Les sections suivantes offrent des informations détaillées sur les propriétés JSON utilisées pour définir les entités Data Factory propres à 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:

Propriétés du service liéLinked service properties

Le tableau suivant fournit la description des éléments JSON spécifiques au service lié Azure SQL Data Warehouse.The following table provides description for JSON elements specific to Azure SQL Data Warehouse linked service.

PropriétéProperty DescriptionDescription ObligatoireRequired
typetype La propriété type doit être définie sur : AzureSqlDWThe type property must be set to: AzureSqlDW OUIYes
connectionStringconnectionString Spécifier les informations requises pour la connexion à l’instance Azure SQL Data Warehouse pour la propriété connectionString.Specify information needed to connect to the Azure SQL Data Warehouse instance for the connectionString property. Seule l’authentification de base est prise en charge.Only basic authentication is supported. OUIYes

Important

Configurez le pare-feu Azure SQL Database et le serveur de base de données pour autoriser les services Azure à accéder au serveur.Configure Azure SQL Database Firewall and the database server to allow Azure Services to access the server. En outre, si vous copiez des données vers Azure SQL Data Warehouse à partir d’un emplacement situé en dehors d’Azure, y compris à partir de sources de données locales avec la passerelle de la fabrique de données, configurez la plage d’adresses IP appropriée pour l’ordinateur qui envoie des données à 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.

Propriétés du jeu de donnéesDataset properties

Pour obtenir une liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article Création de jeux de données.For a full list of sections & properties available for defining datasets, see the Creating datasets article. Les sections comme la structure, la disponibilité et la stratégie d'un jeu de données JSON sont similaires pour tous les types de jeux de données (SQL Azure, Azure Blob, Azure Table, etc.).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 section typeProperties est différente pour chaque type de jeu de données et fournit des informations sur l'emplacement des données dans le magasin de données.The typeProperties section is different for each type of dataset and provides information about the location of the data in the data store. La section typeProperties du jeu de données de type AzureSqlDWTable a les propriétés suivantes :The typeProperties section for the dataset of type AzureSqlDWTable has the following properties:

PropriétéProperty DescriptionDescription ObligatoireRequired
tableNametableName Nom de la table ou de la vue dans la base de données Azure SQL Data Warehouse à laquelle le service lié fait référence.Name of the table or view in the Azure SQL Data Warehouse database that the linked service refers to. OUIYes

Propriétés de l’activité de copieCopy activity properties

Pour obtenir la liste complète des sections et des propriétés disponibles pour la définition des activités, consultez l’article Création de pipelines.For a full list of sections & properties available for defining activities, see the Creating Pipelines article. Les propriétés comme le nom, la description, les tables d’entrée et de sortie et la stratégie sont disponibles pour tous les types d’activités.Properties such as name, description, input and output tables, and policy are available for all types of activities.

Notes

L'activité de copie accepte uniquement une entrée et produit une seule sortie.The Copy Activity takes only one input and produces only one output.

En revanche, les propriétés disponibles dans la section typeProperties de l’activité varient pour chaque type d'activité.Whereas, properties available in the typeProperties section of the activity vary with each activity type. Pour l’activité de copie, elles dépendent des types de sources et récepteurs.For Copy activity, they vary depending on the types of sources and sinks.

SqlDWSourceSqlDWSource

Lorsque la source est de type SqlDWSource, les propriétés suivantes sont disponibles dans la section typeProperties :When source is of type SqlDWSource, the following properties are available in typeProperties section:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
sqlReaderQuerysqlReaderQuery Utilise la requête personnalisée pour lire des données.Use the custom query to read data. Chaîne de requête SQL.SQL query string. Par exemple : select * from MyTable.For example: select * from MyTable. NonNo
sqlReaderStoredProcedureNamesqlReaderStoredProcedureName Nom de la procédure stockée qui lit les données de la table source.Name of the stored procedure that reads data from the source table. Nom de la procédure stockée.Name of the stored procedure. La dernière instruction SQL doit être une instruction SELECT dans la procédure stockée.The last SQL statement must be a SELECT statement in the stored procedure. NonNo
storedProcedureParametersstoredProcedureParameters Paramètres de la procédure stockée.Parameters for the stored procedure. Paires nom/valeur.Name/value pairs. Les noms et la casse des paramètres doivent correspondre aux noms et à la casse des paramètres de la procédure stockée.Names and casing of parameters must match the names and casing of the stored procedure parameters. NonNo

Si sqlReaderQuery est spécifié pour SqlDWSource, l'activité de copie exécute cette requête en fonction de la source Azure SQL Data Warehouse pour obtenir les données.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.

Vous pouvez également spécifier une procédure stockée en indiquant sqlReaderStoredProcedureName et storedProcedureParameters (si la procédure stockée accepte des paramètres).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Si vous ne spécifiez pas sqlReaderQuery ou sqlReaderStoredProcedureName, les colonnes définies dans la section Structure du jeu de données JSON sont utilisées pour créer une requête à exécuter sur 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. Exemple : select column1, column2 from mytable.Example: select column1, column2 from mytable. Si la définition du jeu de données ne possède pas de structure, toutes les colonnes de la table sont sélectionnées.If the dataset definition does not have the structure, all columns are selected from the table.

Exemple SqlDWSourceSqlDWSource example

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

Définition de la procédure stockée :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 prend en charge les propriétés suivantes :SqlDWSink supports the following properties:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
sqlWriterCleanupScriptsqlWriterCleanupScript Spécifiez une requête pour exécuter l’activité de copie afin que les données d’un segment spécifique soient nettoyées.Specify a query for Copy Activity to execute such that data of a specific slice is cleaned up. Consultez la section sur la répétitionpour plus de détails.For details, see repeatability section. Une instruction de requête.A query statement. NonNo
allowPolyBaseallowPolyBase Indique s’il faut utiliser PolyBase (le cas échéant) au lieu du mécanisme BULKINSERT.Indicates whether to use PolyBase (when applicable) instead of BULKINSERT mechanism.

L’utilisation de PolyBase est la méthode recommandée pour charger des données dans SQL Data Warehouse.Using PolyBase is the recommended way to load data into SQL Data Warehouse. Reportez-vous à la section Utiliser PolyBase pour charger des données dans Azure SQL Data Warehouse pour connaître les contraintes et les détails.See Use PolyBase to load data into Azure SQL Data Warehouse section for constraints and details.
TrueTrue
False (valeur par défaut)False (default)
NonNo
polyBaseSettingspolyBaseSettings Groupe de propriétés pouvant être spécifié lorsque la propriété allowPolybase est définie sur true.A group of properties that can be specified when the allowPolybase property is set to true.   NonNo
rejectValuerejectValue Spécifie le nombre ou le pourcentage de lignes pouvant être rejetées avant l’échec de la requête.Specifies the number or percentage of rows that can be rejected before the query fails.

Pour en savoir plus sur les options de rejet de PolyBase dans la section Arguments de la rubrique CREATE EXTERNAL TABLE (Transact-SQL) (Créer une table externe (Transact-SQL)).Learn more about the PolyBase’s reject options in the Arguments section of CREATE EXTERNAL TABLE (Transact-SQL) topic.
0 (par défaut), 1, 2, …0 (default), 1, 2, … NonNo
rejectTyperejectType Spécifie si l’option rejectValue est spécifiée comme une valeur littérale ou un pourcentage.Specifies whether the rejectValue option is specified as a literal value or a percentage. Value (par défaut), PercentageValue (default), Percentage NonNo
rejectSampleValuerejectSampleValue Détermine le nombre de lignes à extraire avant que PolyBase recalcule le pourcentage de lignes rejetées.Determines the number of rows to retrieve before the PolyBase recalculates the percentage of rejected rows. 1, 2, …1, 2, … Oui, si le rejectType est percentageYes, if rejectType is percentage
useTypeDefaultuseTypeDefault Spécifie comment gérer les valeurs manquantes dans les fichiers texte délimités lorsque PolyBase extrait des données à partir du fichier texte.Specifies how to handle missing values in delimited text files when PolyBase retrieves data from the text file.

Pour plus d’informations sur cette propriété, consultez la section Arguments dans CREATE EXTERNAL FILE FORMAT (Transact-SQL).Learn more about this property from the Arguments section in CREATE EXTERNAL FILE FORMAT (Transact-SQL).
True, False (par défaut)True, False (default) NonNo
writeBatchSizewriteBatchSize Insère des données dans la table SQL lorsque la taille du tampon atteint writeBatchSizeInserts data into the SQL table when the buffer size reaches writeBatchSize Nombre entier (nombre de lignes)Integer (number of rows) Non (valeur par défaut : 10000)No (default: 10000)
writeBatchTimeoutwriteBatchTimeout Temps d’attente pour que l’opération d’insertion de lot soit terminée avant d’expirer.Wait time for the batch insert operation to complete before it times out. intervalle de tempstimespan

Exemple : “00:30:00” (30 minutes).Example: “00:30:00” (30 minutes).
NonNo

Exemple SqlDWSinkSqlDWSink example

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

Utiliser PolyBase pour charger des données dans Azure SQL Data WarehouseUse PolyBase to load data into Azure SQL Data Warehouse

L’utilisation de PolyBase est un moyen efficace de charger de grandes quantités de données dans Azure SQL Data Warehouse avec un débit élevé.Using PolyBase is an efficient way of loading large amount of data into Azure SQL Data Warehouse with high throughput. Vous pouvez profiter d’un gain important de débit en utilisant PolyBase au lieu du mécanisme BULKINSERT par défaut.You can see a large gain in the throughput by using PolyBase instead of the default BULKINSERT mechanism. Consultez copier le numéro de référence des performances qui contient une comparaison détaillée.See copy performance reference number with detailed comparison. Consultez Charger 1 To dans Azure SQL Data Warehouse en moins de 15 minutes avec Azure Data Factory pour obtenir une procédure pas à pas avec un cas d’utilisation.For a walkthrough with a use case, see Load 1 TB into Azure SQL Data Warehouse under 15 minutes with Azure Data Factory.

  • Si votre source de données se trouve dans Stockage Blob Azure ou Azure Data Lake Store, et si le format est compatible avec PolyBase, vous pouvez la copier directement vers Azure SQL Data Warehouse à l’aide de 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. Consultez Copie directe à l’aide de PolyBase .See Direct copy using PolyBase with details.
  • Si votre banque de données sources et son format ne sont pas pris en charge à l’origine par PolyBase, vous pouvez utiliser la fonctionnalité Copie intermédiaire avec PolyBase à la place.If your source data store and format is not originally supported by PolyBase, you can use the Staged Copy using PolyBase feature instead. Elle propose également un meilleur débit en convertissant les données dans un format compatible avec PolyBase et en stockant les données dans le stockage Blob Azure automatiquement.It also provides you better throughput by automatically converting the data into PolyBase-compatible format and storing the data in Azure Blob storage. Il charge ensuite les données dans SQL Data Warehouse.It then loads data into SQL Data Warehouse.

Définissez la propriété allowPolyBase sur true comme indiqué dans l’exemple suivant pour Azure Data Factory pour utiliser PolyBase afin de copier les données à partir du stockage d’objets Blob Azure vers 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. Lorsque vous définissez allowPolyBase sur true, vous pouvez spécifier des propriétés PolyBase spécifiques à l’aide du groupe de propriétés polyBaseSettings.When you set allowPolyBase to true, you can specify PolyBase specific properties using the polyBaseSettings property group. Reportez-vous à la section SqlDWSink pour plus d’informations sur les propriétés que vous pouvez utiliser avec polyBaseSettings.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
    }
}

Copie directe à l’aide de PolyBaseDirect copy using PolyBase

SQL Data Warehouse PolyBase prend directement en charge Stockage Blob Azure et Azure Data Lake Store (à l’aide du principal du service) en tant que source et avec des exigences de format de fichier spécifiques.SQL Data Warehouse PolyBase directly support Azure Blob and Azure Data Lake Store (using service principal) as source and with specific file format requirements. Si vos données source répondent aux critères décrits dans cette section, vous pouvez les copier directement du magasin de données source vers Azure SQL Data Warehouse à l’aide de 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. Sinon, vous pouvez utiliser la méthode Copie intermédiaire à l’aide de PolyBase.Otherwise, you can use Staged Copy using PolyBase.

Conseil

Pour copier des données de Data Lake Store vers SQL Data Warehouse efficacement, voir Azure Data Factory makes it even easier and convenient to uncover insights from data when using Data Lake Store with SQL Data Warehouse (Azure Data Factory facilite et rend plus pratique la découverte d’informations à partir de données lors de l’utilisation de Data Lake Store avec 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.

Si les critères ne sont pas remplis, Azure Data Factory contrôle les paramètres et rétablit automatiquement le mécanisme BULKINSERT pour le déplacement des données.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. Le service lié source est de type AzureStorage ou AzureDataLakeStore avec authentification du principal de service.Source linked service is of type: AzureStorage or AzureDataLakeStore with service principal authentication.

  2. Le jeu de données d’entrée est de type AzureBlob ou AzureDataLakeStore, et le type de format dans les propriétés type est OrcFormat, ParquetFormat ou TextFormat avec les configurations suivantes :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 doit être \n.rowDelimiter must be \n.

    2. nullValue est défini sur chaîne vide ("") ou treatEmptyAsNull est défini sur true.nullValue is set to empty string (""), or treatEmptyAsNull is set to true.

    3. encodingName est défini sur utf-8, qui est la valeur par défaut.encodingName is set to utf-8, which is default value.

    4. escapeChar, quoteChar, firstRowAsHeader et skipLineCount ne sont pas spécifiés.escapeChar, quoteChar, firstRowAsHeader, and skipLineCount are not specified.

    5. compression peut être aucune compression, GZip ou 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. Il n’y a aucun paramètre skipHeaderLineCount sous BlobSource ou AzureDataLakeStore pour l’activité de copie dans le pipeline.There is no skipHeaderLineCount setting under BlobSource or AzureDataLakeStore for the Copy activity in the pipeline.

  4. Il n’y a aucun paramètre sliceIdentifierColumnName sous SqlDWSink pour l’activité de copie dans le pipeline.There is no sliceIdentifierColumnName setting under SqlDWSink for the Copy activity in the pipeline. (PolyBase garantit que toutes les données sont mises à jour ou que rien n’est mis à jour en une seule exécution.(PolyBase guarantees that all data is updated or nothing is updated in a single run. Pour définir la répétabilité, vous pouvez utiliser sqlWriterCleanupScript.To achieve repeatability, you could use sqlWriterCleanupScript).

  5. Il n’y a pas de columnMapping utilisé dans l’activité de copie associée.There is no columnMapping being used in the associated in Copy activity.

Copie intermédiaire à l’aide de PolyBaseStaged Copy using PolyBase

Lorsque vos données source ne répondent pas aux critères présentés dans la section précédente, vous pouvez activer la copie des données par le biais d’un Stockage Blob Azure intermédiaire (il ne peut pas s’agir d’une offre Stockage 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). Dans ce cas, Azure Data Factory effectue automatiquement des transformations sur les données pour répondre aux exigences de format de données de PolyBase, utilise PolyBase pour charger les données dans SQL Data Warehouse puis supprime les données temporaires du Stockage 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. Consultez la rubrique Copie intermédiaire pour plus d’informations sur le fonctionnement général de la copie des données par le biais d’un Blob Azure.See Staged Copy for details on how copying data via a staging Azure Blob works in general.

Notes

Lors de la copie de données à partir d’un magasin de données local dans Azure SQL Data Warehouse à l’aide de PolyBase et du stockage intermédiaire, si la version de votre passerelle de gestion des données est antérieure à la version 2.4, vous devez installer JRE (Java Runtime Environment) sur votre ordinateur passerelle, qui est utilisé pour convertir vos données source dans le bon format.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. Nous vous conseillons de mettre à niveau votre passerelle vers la dernière version pour éviter une telle dépendance.Suggest you upgrade your gateway to the latest to avoid such dependency.

Pour utiliser cette fonctionnalité, vous devez créer un service lié Azure Storage qui fait référence au compte de stockage Azure qui comprend le stockage d’objets blob intermédiaire, puis spécifier les propriétés enableStaging et stagingSettings de l’activité de copie, comme indiqué dans le code suivant :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"
        }
    }
}
]

Meilleures pratiques lors de l’utilisation de PolyBaseBest practices when using PolyBase

Les sections suivantes contiennent des bonnes pratiques qui s’ajoutent à celles mentionnées dans Bonnes pratiques pour 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.

Autorisation de base de données requiseRequired database permission

Pour utiliser PolyBase, il est nécessaire que l’utilisateur utilisé pour charger des données dans SQL Data Warehouse ait l’autorisation « CONTROL » sur la base de données cible.To use PolyBase, it requires the user being used to load data into SQL Data Warehouse has the "CONTROL" permission on the target database. Vous pouvez, pour cela, ajouter l’utilisateur en tant que membre du rôle « db_owner ».One way to achieve that is to add that user as a member of "db_owner" role. Découvrez comment procéder dans cette section.Learn how to do that by following this section.

Limitations en matière de taille de ligne et de type de donnéesRow size and data type limitation

Les charges Polybase sont limitées au chargement de lignes de moins de 1 Mo et ne peuvent pas charger vers VARCHR(MAX), NVARCHAR(MAX) ou 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). Consultez cette section.Refer to here.

Si les données source dont vous disposez ont des lignes d’une taille supérieure à 1 Mo, vous pouvez fractionner verticalement les tables source en plusieurs tables plus petites dans lesquelles la taille de ligne maximale ne dépasse pas la limite.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. Vous pouvez ensuite charger les tables plus petites à l’aide de PolyBase et les fusionner dans Azure SQL Data Warehouse.The smaller tables can then be loaded using PolyBase and merged together in Azure SQL Data Warehouse.

Classe de ressources SQL Data WarehouseSQL Data Warehouse resource class

Pour obtenir le meilleur débit possible, envisagez d’attribuer une classe de ressources plus volumineuse à l’utilisateur utilisé pour charger des données dans SQL Data Warehouse via 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. Découvrez comment procéder en consultant Exemple de modification d’une classe de ressources utilisateur.Learn how to do that by following Change a user resource class example.

tableName dans Azure SQL Data WarehousetableName in Azure SQL Data Warehouse

Le tableau suivant fournit des exemples sur la façon de spécifier la propriété tableName dans le jeu de données JSON pour différentes combinaisons de schémas et noms de table.The following table provides examples on how to specify the tableName property in dataset JSON for various combinations of schema and table name.

Schéma BDDB Schema Nom de la tableTable name Propriété JSON tableNametableName JSON property
dbodbo MyTableMyTable MyTable ou dbo.MyTable ou [dbo].[MyTable]MyTable or dbo.MyTable or [dbo].[MyTable]
dbo1dbo1 MyTableMyTable dbo1.MyTable ou [dbo1].[MyTable]dbo1.MyTable or [dbo1].[MyTable]
dbodbo My.TableMy.Table [My.Table] ou [dbo].[My.Table][My.Table] or [dbo].[My.Table]
dbo1dbo1 My.TableMy.Table [dbo1].[My.Table][dbo1].[My.Table]

Si vous voyez l’erreur suivante, il peut s’agir d’un problème avec la valeur spécifiée pour la propriété tableName.If you see the following error, it could be an issue with the value you specified for the tableName property. Consultez le tableau pour savoir comment spécifier des valeurs pour la propriété JSON tableName.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

Colonnes avec des valeurs par défautColumns with default values

Actuellement, la fonctionnalité PolyBase dans Data Factory accepte seulement le même nombre de colonnes que la table cible.Currently, PolyBase feature in Data Factory only accepts the same number of columns as in the target table. Par exemple, vous avez une table avec quatre colonnes et l’une d’elles est définie avec une valeur par défaut.Say, you have a table with four columns and one of them is defined with a default value. Les données d’entrée doivent toujours contenir quatre colonnes.The input data should still contain four columns. La fourniture d’un jeu de données d’entrée de 3 colonnes produirait une erreur semblable au message suivant :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.

La valeur NULL est une forme spéciale de valeur par défaut.NULL value is a special form of default value. Si la colonne accepte la valeur Null, les données d’entrée (dans l’objet blob) de cette colonne peuvent être vides (ne peuvent pas être absentes du jeu de données d’entrée).If the column is nullable, the input data (in blob) for that column could be empty (cannot be missing from the input dataset). PolyBase insère NULL pour ces données dans Azure SQL Data Warehouse.PolyBase inserts NULL for them in the Azure SQL Data Warehouse.

Création automatique de la tableAuto table creation

Si vous utilisez l’Assistant de copie pour copier des données depuis SQL Server ou Azure SQL Database vers Azure SQL Data Warehouse et que la table qui correspond à la table source n’existe pas dans le magasin de destination, Data Factory peut automatiquement créer la table dans SQL Data Warehouse en utilisant le schéma de table source.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 crée la table dans le magasin de destination portant le même nom de table dans le magasin de données source.Data Factory creates the table in the destination store with the same table name in the source data store. Les types de données des colonnes sont choisis en fonction du mappage de type suivant.The data types for columns are chosen based on the following type mapping. Si nécessaire, des conversions de type sont effectuées pour corriger les éventuelles incompatibilités entre les magasins source et de destination.If needed, it performs type conversions to fix any incompatibilities between source and destination stores. Il utilise également la distribution de tables en tourniquet (Round Robin).It also uses Round Robin table distribution.

Type de colonne SQL Database sourceSource SQL Database column type Type de colonne SQL DW de destination (limite de taille)Destination SQL DW column type (size limitation)
IntInt IntInt
BigIntBigInt BigIntBigInt
SmallIntSmallInt SmallIntSmallInt
TinyIntTinyInt TinyIntTinyInt
BitBit BitBit
DecimalDecimal DecimalDecimal
ChiffreNumeric DecimalDecimal
FloatFloat FloatFloat
MoneyMoney MoneyMoney
RealReal RealReal
SmallMoneySmallMoney SmallMoneySmallMoney
BinaryBinary BinaryBinary
VarbinaryVarbinary Varbinary (jusqu’à 8 000)Varbinary (up to 8000)
DateDate DateDate
DatetimeDateTime DatetimeDateTime
DateTime2DateTime2 DateTime2DateTime2
TempsTime TempsTime
DateTimeOffsetDateTimeOffset DateTimeOffsetDateTimeOffset
SmallDateTimeSmallDateTime SmallDateTimeSmallDateTime
TexteText Varchar (jusqu'à 8 000)Varchar (up to 8000)
NTextNText NVarChar (jusqu'à 4 000)NVarChar (up to 4000)
ImageImage VarBinary (jusqu'à 8 000)VarBinary (up to 8000)
UniqueIdentifierUniqueIdentifier UniqueIdentifierUniqueIdentifier
CharChar CharChar
NCharNChar NCharNChar
VarCharVarChar VarChar (jusqu'à 8 000)VarChar (up to 8000)
NVarCharNVarChar NVarChar (jusqu'à 4 000)NVarChar (up to 4000)
XmlXml Varchar (jusqu'à 8 000)Varchar (up to 8000)

Répétabilité pendant la copieRepeatability during Copy

Lors de la copie de données vers SQL Azure/SQL Server à partir d’autres magasins de données, vous devez garder la répétabilité à l’esprit afin d’éviter des résultats inattendus.When copying data to Azure SQL/SQL Server from other data stores one needs to keep repeatability in mind to avoid unintended outcomes.

Lors de la copie de données dans une base de données SQL Azure/SQL Server, l'activité de copie AJOUTE par défaut le jeu de données à la table de récepteur par défaut.When copying data to Azure SQL/SQL Server Database, copy activity will by default APPEND the data set to the sink table by default. Par exemple, lors de la copie de données à partir d’une source de fichier CSV (valeurs de données séparées par des virgules) contenant deux enregistrements pour la base de données SQL Azure/SQL Server, la table ressemble à ce qui suit :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

Supposons que vous trouviez des erreurs dans le fichier source et mettiez à jour la quantité de Down Tube de 2 à 4 dans le fichier source.Suppose you found errors in source file and updated the quantity of Down Tube from 2 to 4 in the source file. Si vous réexécutez la tranche de données pour cette période, vous trouvez deux nouveaux enregistrements ajoutés à la base de données SQL Azure/SQL Server.If you re-run the data slice for that period, you’ll find two new records appended to Azure SQL/SQL Server Database. L’exemple ci-dessous suppose qu’aucune des colonnes de la table ne dispose de contrainte de clé primaire.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

Pour éviter cela, vous devez spécifier une sémantique UPSERT en tirant parti d’un des 2 mécanismes indiqués ci-dessous.To avoid this, you will need to specify UPSERT semantics by leveraging one of the below 2 mechanisms stated below.

Notes

Une tranche peut être réexécutée automatiquement dans Azure Data Factory en fonction de la stratégie relative aux nouvelles tentatives qui a été spécifiée.A slice can be re-run automatically in Azure Data Factory as per the retry policy specified.

Mécanisme 1Mechanism 1

Vous pouvez tirer parti de la propriété sqlWriterCleanupScript pour effectuer d’abord une action de nettoyage lors de l’exécution d’une tranche.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)"
}

Le script de nettoyage est d’abord exécuté pendant la copie d’une tranche donnée, ce qui supprime les données de la table SQL correspondant à cette tranche.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'activité insère ensuite les données dans la table SQL.The activity will subsequently insert the data into the SQL Table.

Si la tranche est réexécutée à présent, la quantité est alors mise à jour comme vous le souhaitez.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

Supposons que l’enregistrement Flat Washer soit supprimé du fichier csv d’origine.Suppose the Flat Washer record is removed from the original csv. Une nouvelle exécution de la tranche entraînerait le résultat suivant :Then re-running the slice would produce the following result:

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

Rien d’autre n’a dû être effectué.Nothing new had to be done. L’activité de copie a exécuté le script de nettoyage pour supprimer les données correspondant à cette tranche.The copy activity ran the cleanup script to delete the corresponding data for that slice. Elle a ensuite lu l'entrée du fichier csv (qui ne contenait qu'un enregistrement) avant de l'insérer dans la table.Then it read the input from the csv (which then contained only 1 record) and inserted it into the Table.

Mécanisme 2Mechanism 2

Important

Pour le moment, sliceIdentifierColumnName n’est pas pris en charge pour Azure SQL Data Warehouse.sliceIdentifierColumnName is not supported for Azure SQL Data Warehouse at this time.

Un autre mécanisme pour obtenir la répétabilité consiste à disposer d’une colonne dédiée (sliceIdentifierColumnName) dans la table cible.Another mechanism to achieve repeatability is by having a dedicated column (sliceIdentifierColumnName) in the target Table. Cette colonne peut être utilisée par Azure Data Factory pour s’assurer que la source et la destination restent synchronisées.This column would be used by Azure Data Factory to ensure the source and destination stay synchronized. Cette approche fonctionne s’il existe une flexibilité dans la modification ou la définition du schéma de table SQL de destination.This approach works when there is flexibility in changing or defining the destination SQL Table schema.

Cette colonne est utilisée par Azure Data Factory à des fins de répétabilité, et au cours du processus, Azure Data Factory n’apporte pas de modifications de schéma à la table.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. Façon d’utiliser cette approche :Way to use this approach:

  1. Définissez une colonne de type binaire (32) dans la table SQL de destination.Define a column of type binary (32) in the destination SQL Table. Aucune contrainte ne doit exister sur cette colonne.There should be no constraints on this column. Pour cet exemple, nommons cette colonne « ColumnForADFuseOnly ».Let's name this column as ‘ColumnForADFuseOnly’ for this example.

  2. Utilisez-la dans l’activité de copie comme suit :Use it in the copy activity as follows:

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

Azure Data Factory renseigne cette colonne conformément à ses besoins pour s’assurer que la source et la destination restent synchronisées.Azure Data Factory will populate this column as per its need to ensure the source and destination stay synchronized. Les valeurs de cette colonne ne doivent pas être utilisées en dehors de ce contexte par l’utilisateur.The values of this column should not be used outside of this context by the user.

Comme pour le mécanisme 1, l’activité de copie nettoie tout d’abord automatiquement les données de la tranche donnée dans la table SQL de destination, puis exécute l’activité de copie normalement pour insérer les données de la source dans la destination correspondant à cette tranche.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.

Mappage de type pour Azure SQL Data WarehouseType mapping for Azure SQL Data Warehouse

Comme mentionné dans l’article consacré aux activités de déplacement des données , l’activité de copie convertit automatiquement les types source en types récepteur à l’aide de l’approche en 2 étapes suivante :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. Conversion de types natifs source en types .NETConvert from native source types to .NET type
  2. Conversion à partir du type .NET en type de récepteur natifConvert from .NET type to native sink type

Lors du déplacement des données vers et à partir d’Azure SQL Data Warehouse, les mappages suivants sont utilisés à partir du type SQL vers le type .NET et vice-versa.When moving data to & from Azure SQL Data Warehouse, the following mappings are used from SQL type to .NET type and vice versa.

Le mappage est identique au mappage du type de données SQL Server pour ADO.NET(article en anglais).The mapping is same as the SQL Server Data Type Mapping for ADO.NET.

Type de moteur de base de données SQL ServerSQL Server Database Engine type Type de .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

Vous pouvez également mapper les colonnes du jeu de données source sur les colonnes du jeu de données récepteur dans la définition de l’activité de copie.You can also map columns from source dataset to columns from sink dataset in the copy activity definition. Pour plus d’informations, consultez Mappage de colonnes de jeux de données dans Azure Data Factory.For details, see Mapping dataset columns in Azure Data Factory.

Exemples JSON pour copier des données vers et depuis SQL Data WarehouseJSON examples for copying data to and from SQL Data Warehouse

Les exemples suivants présentent des exemples de définitions de JSON que vous pouvez utiliser pour créer un pipeline à l’aide du Portail Azure, de Visual Studio ou d’Azure PowerShell.The following examples provide sample JSON definitions that you can use to create a pipeline by using Azure portal or Visual Studio or Azure PowerShell. Ils indiquent comment copier des données vers et depuis Azure SQL Data Warehouse et Azure Blob Storage.They show how to copy data to and from Azure SQL Data Warehouse and Azure Blob Storage. Toutefois, les données peuvent être copiées directement vers l’un des récepteurs indiqués ici , via l’activité de copie de Microsoft Azure Data Factory.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.

Exemple : copier des données d’Azure SQL Data Warehouse vers Stockage Blob AzureExample: Copy data from Azure SQL Data Warehouse to Azure Blob

L’exemple définit les entités Data Factory suivantes :The sample defines the following Data Factory entities:

  1. Un service lié de type AzureSqlDW.A linked service of type AzureSqlDW.
  2. Un service lié de type AzureStorage.A linked service of type AzureStorage.
  3. Un jeu de données d’entrée de type AzureSqlDWTable.An input dataset of type AzureSqlDWTable.
  4. Un jeu de données de sortie de type AzureBlob.An output dataset of type AzureBlob.
  5. Un pipeline avec une activité de copie qui utilise SqlDWSource et BlobSink.A pipeline with Copy Activity that uses SqlDWSource and BlobSink.

L’exemple copie toutes les heures les données temporelles (horaire, journalière, etc.) d’une table de base de données Azure SQL Data Warehouse vers un objet blob.The sample copies time-series (hourly, daily, etc.) data from a table in Azure SQL Data Warehouse database to a blob every hour. Les propriétés JSON utilisées dans ces exemples sont décrites dans les sections suivant les exemples.The JSON properties used in these samples are described in sections following the samples.

Service lié 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"
    }
  }
}

Service lié Azure Blob Storage :Azure Blob storage linked service:

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

Jeu de données d'entrée Azure SQL Data Warehouse :Azure SQL Data Warehouse input dataset:

L'exemple suppose que vous avez créé une table « MyTable » dans Azure SQL Data Warehouse et qu'elle contient une colonne appelée « timestampcolumn » pour les données de série chronologique.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.

La définition de « external » : « true» informe le service Data Factory qu’il s’agit d’un jeu de données qui est externe à Data Factory et non produit par une activité dans Data Factory.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
      }
    }
  }
}

Jeu de données de sortie d'objet Blob Azure :Azure Blob output dataset:

Les données sont écrites dans un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is written to a new blob every hour (frequency: hour, interval: 1). Le chemin d’accès du dossier pour l’objet blob est évalué dynamiquement en fonction de l’heure de début du segment en cours de traitement.The folder path for the blob is dynamically evaluated based on the start time of the slice that is being processed. Le chemin d'accès du dossier utilise l'année, le mois, le jour et l'heure de l'heure de début.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
    }
  }
}

Activité de copie dans un pipeline avec SqlDWSource et BlobSink :Copy activity in a pipeline with SqlDWSource and BlobSink:

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d'entrée et de sortie, et qui est planifiée pour s'exécuter toutes les heures.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Dans la définition du pipeline JSON, le type source est défini sur SqlDWSource et le type sink est défini sur BlobSink.In the pipeline JSON definition, the source type is set to SqlDWSource and sink type is set to BlobSink. La requête SQL spécifiée pour la propriété SqlReaderQuery sélectionne les données de la dernière heure à copier.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"
        }
      }
    ]
  }
}

Notes

Dans l’exemple, sqlReaderQuery est spécifié pour SqlDWSource.In the example, sqlReaderQuery is specified for the SqlDWSource. L’activité de copie exécute cette requête sur la source Azure SQL Data Warehouse pour obtenir les données.The Copy Activity runs this query against the Azure SQL Data Warehouse source to get the data.

Vous pouvez également spécifier une procédure stockée en indiquant sqlReaderStoredProcedureName et storedProcedureParameters (si la procédure stockée accepte des paramètres).Alternatively, you can specify a stored procedure by specifying the sqlReaderStoredProcedureName and storedProcedureParameters (if the stored procedure takes parameters).

Si vous ne spécifiez pas sqlReaderQuery ou sqlReaderStoredProcedureName, les colonnes définies dans la section structure du code JSON du jeu de données sont utilisées pour créer une requête (select column1, column2 from mytable) à exécuter sur 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 (select column1, column2 from mytable) to run against the Azure SQL Data Warehouse. Si la définition du jeu de données ne possède pas de structure, toutes les colonnes de la table sont sélectionnées.If the dataset definition does not have the structure, all columns are selected from the table.

Exemple : copier des données de Stockage Blob Azure vers Azure SQL Data WarehouseExample: Copy data from Azure Blob to Azure SQL Data Warehouse

L’exemple définit les entités Data Factory suivantes :The sample defines the following Data Factory entities:

  1. Un service lié de type AzureSqlDW.A linked service of type AzureSqlDW.
  2. Un service lié de type AzureStorage.A linked service of type AzureStorage.
  3. un jeu de données d'entrée de type AzureBlob.An input dataset of type AzureBlob.
  4. Un jeu de données de sortie de type AzureSqlDWTable.An output dataset of type AzureSqlDWTable.
  5. Un pipeline avec une activité de copie qui utilise BlobSource et SqlDWSink.A pipeline with Copy activity that uses BlobSource and SqlDWSink.

L’exemple copie toutes les heures les données temporelles (horaire, journalière, etc.) d’un objet blob Azure vers une table de base de données 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. Les propriétés JSON utilisées dans ces exemples sont décrites dans les sections suivant les exemples.The JSON properties used in these samples are described in sections following the samples.

Service lié 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"
    }
  }
}

Service lié Azure Blob Storage :Azure Blob storage linked service:

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

Jeu de données d'entrée d'objet Blob Azure :Azure Blob input dataset:

Les données sont récupérées à partir d’un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is picked up from a new blob every hour (frequency: hour, interval: 1). Le nom du chemin d'accès et du fichier de dossier pour l'objet blob sont évalués dynamiquement en fonction de l'heure de début du segment en cours de traitement.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that is being processed. Le chemin d’accès du dossier utilise l’année, le mois et le jour de début et le nom de fichier utilise l’heure de début.The folder path uses year, month, and day part of the start time and file name uses the hour part of the start time. Le paramètre « external » : « true » informe le service Data Factory que cette table est externe à la fabrique de données et n’est pas produite par une activité dans la fabrique de données.“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
      }
    }
  }
}

Jeu de données de sortie Azure SQL Data Warehouse :Azure SQL Data Warehouse output dataset:

L'exemple copie les données dans une table nommée « MyTable » dans Azure SQL Data Warehouse.The sample copies data to a table named “MyTable” in Azure SQL Data Warehouse. Créez la table dans Azure SQL Data Warehouse avec le même nombre de colonnes que le fichier CSV d’objets blob doit en contenir.Create the table in Azure SQL Data Warehouse with the same number of columns as you expect the Blob CSV file to contain. De nouvelles lignes sont ajoutées à la table toutes les heures.New rows are added to the table every hour.

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

Activité de copie dans un pipeline avec BlobSource et SqlDWSink :Copy activity in a pipeline with BlobSource and SqlDWSink:

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d'entrée et de sortie, et qui est planifiée pour s'exécuter toutes les heures.The pipeline contains a Copy Activity that is configured to use the input and output datasets and is scheduled to run every hour. Dans la définition JSON du pipeline, le type source est défini sur BlobSource et le type sink est défini sur 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"
        }
      }
    ]
  }
}

Pour une procédure pas à pas, voir Charger 1 To dans Azure SQL Data Warehouse en moins de 15 minutes avec Azure Data Factory et l’article Charger des données avec Azure Data Factory dans la documentation de 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.

Performances et réglagePerformance and Tuning

Consultez l’article Guide sur les performances et le réglage de l’activité de copie pour en savoir plus sur les facteurs clés affectant les performances de déplacement des données (activité de copie) dans Azure Data Factory et les différentes manières de les optimiser.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.