Esempi di accesso bulk ai dati nell'archiviazione BLOB di AzureExamples of bulk access to data in Azure Blob storage

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Le istruzioni BULK INSERT e OPENROWSET consentono di accedere direttamente a un file nell'archiviazione BLOB di Azure.The BULK INSERT and OPENROWSET statements can directly access a file in Azure blob storage. Gli esempi seguenti usano dati da un file CSV (con valori delimitati da virgola) denominato inv-2017-01-19.csv, archiviato in un contenitore denominato Week3 e archiviato in un account di archiviazione denominato 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). È possibile usare il percorso al file di formato, ma non è incluso in questi esempi.The path to format file can be used, but is not included in these examples.

Per l'accesso bulk all'archiviazione BLOB di Azure da SQL Server è necessario almeno 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.

Importante

Tutti i percorsi del contenitore e dei file nel BLOB sono CASE SENSITIVE.All the paths to the container and to the files on blob are CASE SENSITIVE. Se l'impostazione non è corretta, è possibile che venga restituito un errore di tipo "Impossibile eseguire il caricamento bulk.If not correct, it might return error like "Cannot bulk load. Il file "file.csv" non esiste oppure non si dispone dell'autorizzazione per accedervi.The file "file.csv" does not exist or you don't have file access rights."

Creare le credenzialiCreate the credential

Per tutti gli esempi seguenti sono necessarie credenziali con ambito database che fanno riferimento a una firma di accesso condiviso.All of the examples below require a database scoped credential referencing a shared access signature.

Importante

L'origine dati esterna deve essere creata con credenziali con ambito database che usano l'identità SHARED ACCESS SIGNATURE.The external data source must be created with a database scoped credential that uses the SHARED ACCESS SIGNATURE identity. Per creare una firma di accesso condiviso per l'account di archiviazione, vedere la proprietà Firma di accesso condiviso nella pagine delle proprietà dell'account di archiviazione, nel portale di 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. Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso.For more information on shared access signatures, see Using Shared Access Signatures (SAS). Per altre informazioni sulle credenziali, vedere CREATE DATABASE SCOPED CREDENTIAL.For more information on credentials, see CREATE DATABASE SCOPED CREDENTIAL.

Creare credenziali con ambito database usando IDENTITY che deve essere SHARED ACCESS SIGNATURE.Create a database scoped credential using the IDENTITY which must be SHARED ACCESS SIGNATURE. Usare il token di firma di accesso condiviso generato per l'account di archiviazione BLOB.Use the SAS token generated for the blob storage account. Verificare che il token di firma di accesso condiviso non abbia un ? iniziale, che sia disponibile almeno l'autorizzazione di lettura per l'oggetto che deve essere caricato e che il periodo di scadenza sia valido (tutte le date sono in ora 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).

Esempio: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';

Accesso ai dati in un file CSV che fa riferimento a un percorso di archiviazione BLOB di AzureAccessing data in a CSV file referencing an Azure blob storage location

L'esempio seguente usa un'origine dati esterna che punta a un account di archiviazione di Azure denominato 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'istruzione OPENROWSET aggiunge quindi il nome del contenitore (week3) alla descrizione del file.Then the OPENROWSET statement adds the container name (week3) to the file description. Il file è denominato 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;   

Con BULK INSERT, usare il contenitore e la descrizione del file: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');

Accesso ai dati in un file CSV che fa riferimento a un contenitore in un percorso di archiviazione BLOB di AzureAccessing data in a CSV file referencing a container in an Azure blob storage location

L'esempio seguente usa un'origine dati esterna che punta a un contenitore denominato week3 in un account di archiviazione di 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'istruzione OPENROWSET non include il nome del contenitore nella descrizione del file.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;

Con BULK INSERT, non usare il nome del contenitore nella descrizione del file: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');

Vedere ancheSee Also