Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók
Azure SQL Database
Felü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');