Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server 2017 (14.x) a novější
azure SQL Database
azure SQL Managed Instance
Příkazy BULK INSERT
a OPENROWSET
mají přímý přístup k souboru ve službě Azure Blob Storage. Následující příklady používají data ze souboru CSV (s oddělovači hodnot) (pojmenovaného inv-2017-01-19.csv
), uloženého v kontejneru (s názvem Week3
), uloženém v účtu úložiště (s názvem newinvoices
).
Všechny cesty ke kontejneru a souborům ve službě Blob Storage se rozlišují malá a velká písmena. Pokud není správně, může se vrátit chyba podobná následujícímu příkladu:
Nelze načíst hromadně. Souborfile.csvneexistuje nebo nemáte přístupová práva k souborům.
Vytvoření přihlašovacích údajů
Externí zdroj dat musí být vytvořen s databázově omezenými pověřeními, která používají identitu SHARED ACCESS SIGNATURE
. Pokud chcete pro účet úložiště vytvořit sdílený přístupový podpis (SAS), podívejte se na vlastnost Sdílený přístupový podpis na stránce vlastností účtu úložiště na webu Azure Portal. Další informace o sdílených přístupových podpisech najdete v tématu Udělení omezeného přístupu k prostředkům azure Storage pomocí sdílených přístupových podpisů (SAS). Další informace o přihlašovacích údajích naleznete v tématu CREATE DATABASE SCOPED CREDENTIAL.
Vytvořte pověření s vymezeným oborem databáze pomocí IDENTITY
, která musí být SHARED ACCESS SIGNATURE
. Použijte token SAS vygenerovaný pro účet služby Blob Storage. Ověřte, že váš token SAS nemá úvodní ?
, že máte alespoň oprávnění ke čtení objektu, který by se měl načíst, a že období vypršení platnosti je platné (všechna data jsou v čase UTC).
Například:
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';
Známé problémy
Žádosti ze služby Azure SQL Database a azure SQL Managed Instance využívající tokeny SAS můžou být blokované s následující chybou:
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.).
V seznamu důvěryhodných služeb se aktuálně nachází jenom podmnožina služeb Azure. Úplný seznam důvěryhodných služeb a aktualizací v nastavení brány firewall úložiště Azure najdete v tématu Důvěryhodný přístup k prostředkům registrovaným ve vašem předplatném.
Příklady
Společně s příklady v tomto článku si také můžete projít ukázky importu dat ve službě Azure SQL Database na GitHubu.
Přístup k datům v souboru CSV odkazující na umístění služby Azure Blob Storage
Následující příklad používá externí zdroj dat odkazující na účet úložiště Azure s názvem MyAzureInvoices
.
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net',
CREDENTIAL = UploadInvoices
);
Příkaz OPENROWSET
pak do popisu souboru přidá název kontejneru (week3
). Soubor má název 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;
Pomocí BULK INSERT
použijte popis kontejneru a souboru:
BULK INSERT Colors2
FROM 'week3/inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices', FORMAT = 'CSV');
Přístup k datům v souboru CSV odkazujícího na kontejner v umístění služby Azure Blob Storage
Následující příklad používá externí zdroj dat odkazující na kontejner (pojmenovaný week3
) v účtu úložiště Azure.
CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = UploadInvoices
);
Příkaz OPENROWSET
pak do popisu souboru neobsahuje název kontejneru:
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoicesContainer',
FORMAT = 'CSV',
FORMATFILE = 'invoices.fmt',
FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
) AS DataFile;
Při použití BULK INSERT
nepoužívejte název kontejneru v popisu souboru:
BULK INSERT Colors2
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoicesContainer', FORMAT = 'CSV');
Související obsah
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- VYTVOŘIT EXTERNÍ ZDROJ DAT (Transact-SQL)
- Hromadné vložení (Transact-SQL)
- OPENROWSET (Transact-SQL)