Sdílet prostřednictvím


Příklady hromadného přístupu k datům ve službě Azure Blob Storage

platí pro: SQL Server 2017 (14.x) a novější azure SQL Databaseazure 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 INSERTpouž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 INSERTnepoužívejte název kontejneru v popisu souboru:

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