Esempi di accesso bulk ai dati nell'archiviazione BLOB di Azure

Si applica a: sìSQL Server 2017 (14.x) e versioni successive Sìdatabase SQL di Azure

Le istruzioni BULK INSERT e OPENROWSET consentono di accedere direttamente a un file nell'archiviazione BLOB di Azure. 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. È possibile usare il percorso al file di formato, ma non è incluso in questi esempi.

Per l'accesso bulk all'archiviazione BLOB di Azure da SQL Server è necessario almeno SQL Server 2017 (14.x) CTP 1.1.

Importante

Tutti i percorsi del contenitore e dei file nel BLOB sono CASE SENSITIVE. Se l'impostazione non è corretta, è possibile che venga restituito un errore di tipo "Impossibile eseguire il caricamento bulk. Il file "file.csv" non esiste oppure non si dispone dell'autorizzazione per accedervi.

Creare le credenziali

Per tutti gli esempi seguenti sono necessarie credenziali con ambito database che fanno riferimento a una firma di accesso condiviso.

Importante

L'origine dati esterna deve essere creata con credenziali con ambito database che usano l'identità SHARED ACCESS SIGNATURE. 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. Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso. Per altre informazioni sulle credenziali, vedere CREATE DATABASE SCOPED CREDENTIAL.

Creare credenziali con ambito database usando IDENTITY che deve essere SHARED ACCESS SIGNATURE. Usare il token di firma di accesso condiviso generato per l'account di archiviazione BLOB. 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).

Ad esempio:

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 Azure

L'esempio seguente usa un'origine dati esterna che punta a un account di archiviazione di Azure denominato 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. Il file è denominato 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:

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 Azure

L'esempio seguente usa un'origine dati esterna che punta a un contenitore denominato week3 in un account di archiviazione di Azure.

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.

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:

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

Vedere anche