Megosztás a következőn keresztül:


Példák az adatokhoz való tömeges hozzáférésre az Azure Blob Storage-ban

A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók Azure SQL DatabaseFelügyelt Azure SQL-példány

A BULK INSERT és OPENROWSET utasítások közvetlenül hozzáférhetnek egy fájlhoz az Azure Blob Storage-ban. Az alábbi példák egy (inv-2017-01-19.csvnevű) CSV-fájlból (vesszővel tagolt érték) származó adatokat használnak, amelyeket egy tárolóban (Week3) tárolnak egy tárfiókban (newinvoicesnéven).

A tárolóhoz és a Blob Storage-fájlokhoz vezető összes elérési út megkülönbözteti a kis- és nagybetűket. Ha nem helyes, a következő példához hasonló hibát adhat vissza:

Nem tölthető be tömegesen. A "file.csv" fájl nem létezik, vagy nincs fájlhozzáférési jogosultsága.

A hitelesítő adatok létrehozása

A külső adatforrást olyan adatbázis-hatókörű hitelesítő adatokkal kell létrehozni, amely az SHARED ACCESS SIGNATURE identitást használja. Ha közös hozzáférésű jogosultságkódot (SAS) szeretne létrehozni a tárfiókhoz, tekintse meg a Megosztott hozzáférésű jogosultságkód tulajdonságot az Azure Portal tárfiók tulajdonságlapján. A megosztott hozzáférésű jogosultságkódokkal kapcsolatos további információkért lásd: Korlátozott hozzáférés biztosítása az Azure Storage-erőforrásokhoz közös hozzáférésű jogosultságkódokkal (SAS). További információért a hitelesítő adatokról tekintse meg a CREATE DATABASE SCOPED CREDENTIALrészt.

Hozzon létre egy adatbázis-hatókörű hitelesítő adatot IDENTITYhasználatával, amelynek SHARED ACCESS SIGNATUREkell lennie. Használja a Blob Storage-fiókhoz létrehozott SAS-jogkivonatot. Ellenőrizze, hogy az SAS-jogkivonat elején nem található-e ?, hogy rendelkezik-e legalább olvasási engedéllyel a betöltendő objektumra, és hogy a lejárati idő érvényes-e (minden dátum UTC-időben van megadva).

Például:

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

Ismert problémák

Az Azure SQL Database és az Azure SQL Managed Instance SAS-jogkivonatokat használó kérelmei a következő hibával blokkolhatók:

Msg 4861, Level 16, State 1, Line 27
Cannot bulk load because the file "FileName.extension" could not be opened. Operating system error code 5(Access is denied.).

Jelenleg csak az Azure-szolgáltatások egy része szerepel a megbízható szolgáltatások listájában. Az Azure Storage tűzfalbeállítások megbízható szolgáltatásainak és frissítéseinek teljes listájáért tekintse meg az előfizetésében regisztrált erőforrások megbízható hozzáférését.

Példák

A cikkben szereplő példák mellett áttekintheti az Azure SQL Database-adatmintákat is, a GitHubon.

Adatok elérése egy Azure Blob Storage-helyre hivatkozó CSV-fájlban

Az alábbi példa egy külső adatforrást használ, amely egy MyAzureInvoicesnevű Azure Storage-fiókra mutat.

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

Ezután a OPENROWSET utasítás hozzáadja a tároló nevét (week3) a fájl leírásához. A fájl neve 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;

A BULK INSERThasználatával használja a tárolót és a fájl leírását:

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

Adatok elérése egy CSV-fájlban, amely egy konténerre hivatkozik az Azure Blob Storage-ben.

Az alábbi példa egy azure-tárfiókban lévő tárolóra (week3) mutató külső adatforrást használ.

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

Ezután a OPENROWSET utasítás nem tartalmazza a tároló nevét a fájl leírásában:

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

A BULK INSERThasználatával ne használja a tároló nevét a fájl leírásában:

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