Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2017 (14.x) en hoger
Azure SQL Database
Azure SQL Managed Instance
De instructies BULK INSERT
en OPENROWSET
hebben rechtstreeks toegang tot een bestand in Azure Blob Storage. In de volgende voorbeelden worden gegevens uit een CSV-bestand (door komma's gescheiden waarden) (met de naam inv-2017-01-19.csv
), opgeslagen in een container (met de naam Week3
), opgeslagen in een opslagaccount (met de naam newinvoices
).
Alle paden naar de container en naar de bestanden op Blob Storage zijn hoofdlettergevoelig. Als dit niet juist is, kan er een fout worden teruggegeven zoals in het volgende voorbeeld:
Kan niet bulksgewijs laden. Het bestandfile.csvbestaat niet of u hebt geen rechten voor bestandstoegang.
De inloggegevens aanmaken
De externe gegevensbron moet worden gemaakt met een databasereferentie die gebruikmaakt van de SHARED ACCESS SIGNATURE
identiteit. Als u een SAS (Shared Access Signature) wilt maken voor uw opslagaccount, raadpleegt u de eigenschap Shared Access Signature op de eigenschappenpagina van het opslagaccount in Azure Portal. Zie Beperkte toegang verlenen aan Azure Storage-resources met sas-(Shared Access Signatures) voor meer informatie over handtekeningen voor gedeelde toegang. Voor meer informatie over referenties, zie CREATE DATABASE SCOPED CREDENTIAL.
Maak een database-specifieke bevoegdheid met behulp van IDENTITY
, die SHARED ACCESS SIGNATURE
moet zijn. Gebruik het SAS-token dat is gegenereerd voor het Blob Storage-account. Controleer of uw SAS-token geen voorloop-?
heeft, of u ten minste leesmachtigingen hebt voor het object dat moet worden geladen en of de verloopperiode geldig is (alle datums zijn in UTC-tijd).
Bijvoorbeeld:
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';
Bekende problemen
Aanvragen van Azure SQL Database en Azure SQL Managed Instance met behulp van SAS-tokens kunnen worden geblokkeerd met de volgende fout:
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.).
Alleen een subset van Azure-services bevindt zich momenteel in de lijst met vertrouwde services. Zie Vertrouwde toegang voor resources die zijn geregistreerd in uw abonnementvoor een volledige lijst met vertrouwde services en updates in Azure Storage-firewallinstellingen.
Voorbeelden
Naast de voorbeelden in dit artikel kunt u ook de Azure SQL Database-gegevensvoorbeelden bekijken op GitHub.
Toegang tot gegevens in een CSV-bestand die verwijst naar een Azure Blob Storage-locatie
In het volgende voorbeeld wordt een externe gegevensbron gebruikt die verwijst naar een Azure-opslagaccount met de naam MyAzureInvoices
.
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net',
CREDENTIAL = UploadInvoices
);
Vervolgens voegt de instructie OPENROWSET
de containernaam (week3
) toe aan de bestandsbeschrijving. Het bestand heeft de naam 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;
Gebruik BULK INSERT
, en gebruik de beschrijving van de container en het bestand:
BULK INSERT Colors2
FROM 'week3/inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices', FORMAT = 'CSV');
Toegang tot gegevens in een CSV-bestand dat verwijst naar een container in een Azure Blob Storage-locatie
In het volgende voorbeeld wordt een externe gegevensbron gebruikt die verwijst naar een container (met de naam week3
) in een Azure-opslagaccount.
CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = UploadInvoices
);
Vervolgens bevat de instructie OPENROWSET
de containernaam niet in de bestandsbeschrijving:
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoicesContainer',
FORMAT = 'CSV',
FORMATFILE = 'invoices.fmt',
FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
) AS DataFile;
Gebruik BULK INSERT
, maar gebruik de containernaam niet in de bestandsbeschrijving:
BULK INSERT Colors2
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoicesContainer', FORMAT = 'CSV');