2017-10-31 4 views
2

Ich habe diesen Entwurf bereits mit einer lokalen SQL Server Express-Einrichtung getestet.Datei von Azure Blob Speicher in Azure SQL-Datenbank lesen

ich mehrere .json Dateien Azure Storage In der SQL-Datenbank hochgeladen, habe ich eine externe Datenquelle:

CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH (TYPE = BLOB_STORAGE, LOCATION = 'https://mydatafilestest.blob.core.windows.net/my_dir );

Dann habe ich versucht, die Datei mit meiner externen Datenquelle abfragen:

select * 
from OPENROWSET 
(BULK 'my_test_doc.json', DATA_SOURCE = 'MyAzureStorage', SINGLE_CLOB) as data 

Dies ist jedoch fehlgeschlagen mit der Fehlermeldung "Kann nicht geladen werden. Die Datei" prod_EnvBlow.json "existiert nicht oder Sie haben keine Dateizugriffsrechte."

Muss ich ein DATABASE SCOPED CREDENTIAL konfigurieren, um auf den Dateispeicher zuzugreifen, wie hier beschrieben? https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-scoped-credential-transact-sql

Was sonst kann jemand sehen, dass schief gelaufen ist und ich korrigieren muss?

+0

haben Sie eine Möglichkeit, dies am Ende zu tun? (d. h. nicht mit "OPENROWSET") – joshi123

+0

@ joshi123 - Ich kann das für eine ganze Weile nicht erneut besuchen, also habe kein Update. – CarCrazyBen

+0

Ich habe eine Lösung gefunden, siehe Antwort unten! – joshi123

Antwort

2

OPENROWSET wird derzeit in Azure SQL-Datenbank nicht unterstützt, wie in diesem Artikel documentation page erläutert. Sie können BULK INSERT verwenden, um Daten in eine temporäre Tabelle einzufügen und dann diese Tabelle abzufragen. Informationen zur Dokumentation unter finden Sie unter BULK INSERT.

+0

Obwohl diese Dokumentation, die eine Woche nach den OPENROWSET-Dokumenten veröffentlicht wurde, anscheinend besagt, dass OPENROWSET in SQL Azure unterstützt wird. https://docs.microsoft.com/en-us/sql/relational-databases/json/import-json-documents-into-sql-server - sieht so aus, als ob diese Funktion jetzt in der öffentlichen Vorschau ist, https: // azure. microsoft.com/de-de/roadmap/files-from-azure-blob-storage-to-sql-database/ – joshi123

0

Nun, dass OPENROWSET in der öffentlichen Vorschau ist, funktioniert das folgende. Nb die Schlüsseloption ist für den Fall, dass Ihr Blob nicht öffentlich ist. Ich habe es auf einem privaten Blob mit der Bereichs-Berechtigungsnachweisoption versucht und es hat funktioniert. nnb Wenn Sie einen SAS-Schlüssel verwenden, stellen Sie sicher, dass Sie den führenden ? löschen, so dass die Zeichenfolge mit sv beginnen sollte, wie unten gezeigt.

Stellen Sie sicher, dass der Abschnitt blobcontainer/my_test_doc.json den richtigen Pfad angibt, z. container/file.

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 
SECRET = 'sv=2017****************'; 

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage 
WITH (TYPE = BLOB_STORAGE, 
    LOCATION = 'https://yourstorage.blob.core.windows.net', 
    CREDENTIAL= MyAzureBlobStorageCredential); 

DECLARE @json varchar(max) 
SELECT @json = BulkColumn FROM OPENROWSET(BULK 'blobcontainer/my_test_doc.json', 
SINGLE_BLOB, DATA_SOURCE = 'MyAzureBlobStorage', 
      FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage') as j; 

select @json; 

Mehr bereitgestellt Detail in diesen docs

Verwandte Themen