Exemples d’accès en bloc à des données dans Stockage Blob AzureExamples of bulk access to data in Azure Blob storage

S’applique à :Applies to: ouiSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) et ultérieur OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseS’applique à :Applies to: ouiSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) and later OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Les instructions BULK INSERT et OPENROWSET peuvent accéder directement à un fichier dans Stockage Blob Azure.The BULK INSERT and OPENROWSET statements can directly access a file in Azure blob storage. Les exemples suivants utilisent des données d’un fichier de valeurs séparées par des virgules (CSV) nommé inv-2017-01-19.csv, stocké dans un conteneur nommé Week3 dans un compte de stockage nommé newinvoices.The following examples use data from a CSV (comma separated value) file (named inv-2017-01-19.csv), stored in a container (named Week3), stored in a storage account (named newinvoices). Le chemin du fichier de format peut être utilisé, mais il n’est pas inclus dans ces exemples.The path to format file can be used, but is not included in these examples.

L’accès en bloc au stockage Blob Azure à partir de SQL Server nécessite au moins SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Bulk access to Azure blob storage from SQL Server, requires at least SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.

Important

Tous les chemins du conteneur et des fichiers sur les objets blob sont CASE SENSITIVE.All the paths to the container and to the files on blob are CASE SENSITIVE. S’ils ne sont pas corrects, l’erreur suivante peut être retournée : « Chargement en masse impossible.If not correct, it might return error like "Cannot bulk load. Le fichier « fichier.csv » n’existe pas ou vous ne disposez pas des droits d’accès au fichier. »The file "file.csv" does not exist or you don't have file access rights."

Créer les informations d’identificationCreate the credential

Tous les exemples suivants nécessitent des informations d’identification incluses dans l’étendue de la base de données faisant référence à une signature d’accès partagé.All of the examples below require a database scoped credential referencing a shared access signature.

Important

La source de données externe doit être créée avec des informations d’identification incluses dans l’étendue de la base de données utilisant l’identité SHARED ACCESS SIGNATURE.The external data source must be created with a database scoped credential that uses the SHARED ACCESS SIGNATURE identity. Pour créer une signature d’accès partagé pour votre compte de stockage, examinez la propriété Signature d’accès partagé dans la page de propriétés du compte de stockage, dans le portail Azure.To create a shared access signature for your storage account, see the Shared access signature property on the storage account property page, in the Azure portal. Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).For more information on shared access signatures, see Using Shared Access Signatures (SAS). Pour plus d’informations sur les informations d’identification, consultez CREATE DATABASE SCOPED CREDENTIAL.For more information on credentials, see CREATE DATABASE SCOPED CREDENTIAL.

Créez des informations d’identification incluses dans l’étendue de la base de données avec IDENTITY qui doit avoir la valeur SHARED ACCESS SIGNATURE.Create a database scoped credential using the IDENTITY which must be SHARED ACCESS SIGNATURE. Utilisez le jeton SAS généré pour le compte de stockage d’objets blob.Use the SAS token generated for the blob storage account. Vérifiez que votre jeton SAS ne commence pas par ?, que vous disposez au moins d’une autorisation de lecture sur l’objet qui doit être chargé et que la période d’expiration est valide (toutes les dates sont exprimées en heure UTC).Verify that your SAS token does not have a leading ?, that you have at least read permission on the object that should be loaded, and that the expiration period is valid (all dates are in UTC time).

Par exemple :For example:

CREATE DATABASE SCOPED CREDENTIAL UploadInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-08-31T02:25:19Z&st=2019-07-30T18:25:19Z&spr=https&sig=KS51p%2BVnfUtLjMZtUTW1siyuyd2nlx294tL0mnmFsOk%3D';

Accès aux données dans un fichier CSV faisant référence à un emplacement de stockage Blob AzureAccessing data in a CSV file referencing an Azure blob storage location

L’exemple suivant utilise une source de données externe qui pointe vers un compte de stockage Azure, nommé MyAzureInvoices.The following example uses an external data source pointing to an Azure storage account, named MyAzureInvoices.

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
    WITH (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://newinvoices.blob.core.windows.net',
        CREDENTIAL = UploadInvoices
    );

L’instruction OPENROWSET ajoute ensuite le nom du conteneur (week3) à la description du fichier.Then the OPENROWSET statement adds the container name (week3) to the file description. Le fichier est nommé inv-2017-01-19.csv.The file is named inv-2017-01-19.csv.

SELECT * FROM OPENROWSET(
   BULK 'week3/inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   FORMAT = 'CSV',
   FORMATFILE='invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
   ) AS DataFile;   

À l’aide de BULK INSERT, utilisez le conteneur et la description du fichier :Using BULK INSERT, use the container and file description:

BULK INSERT Colors2
FROM 'week3/inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices',
      FORMAT = 'CSV');

Accès aux données dans un fichier CSV faisant référence à un conteneur à un emplacement de stockage Blob AzureAccessing data in a CSV file referencing a container in an Azure blob storage location

L’exemple suivant utilise une source de données externe qui pointe vers un conteneur (nommé week3) dans un compte de stockage Azure.The following example uses an external data source pointing to a container (named week3) in an Azure storage account.

CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer
    WITH (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
        CREDENTIAL = UploadInvoices
    );

L’instruction OPENROWSET n’ajoute pas ensuite le nom du conteneur à la description du fichier :Then the OPENROWSET statement does not include the container name in the file description:

SELECT * FROM OPENROWSET(
   BULK 'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoicesContainer',
   FORMAT = 'CSV',
   FORMATFILE='invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
   ) AS DataFile;

À l’aide de BULK INSERT, n’utilisez pas le nom du conteneur dans la description du fichier :Using BULK INSERT, do not use the container name in the file description:

BULK INSERT Colors2
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoicesContainer',
      FORMAT = 'CSV');

Voir aussiSee Also