2017-06-14 2 views
3

Ich möchte eine CSV-Datei (sqlserver-dba-csv.txt) in eine Tabelle in einer in Azure gehosteten SQL Server-Datenbank importieren.Azure-Massenimport-CSV-Datei in Azure SQL Server vom Azure-Dateidienststandort

Diese Datei befindet sich in einem Azure-Dateidienst (Standortadresse: 'https://XXXXXXXXXXX.file.core.windows.net/XXXXXXXXXXX/sqlserver-dba-csv.txt'), der auch ein zugeordnetes Laufwerk auf meinem lokalen Computer ist.

Irgendwann möchte ich, dass dies durch einen Trigger etwas automatisiert wird, aber jetzt möchte ich nur die Daten in eine Tabelle auf dem SQL-Server importieren, um zu beweisen, dass der Prozess funktioniert.

der Inhalt dieser Sqlserver-dba-csv.txt Datei ist:

1,James Brown,blue 
2,Prince,red 
3,Rick James,yellow 

Der Code, den ich auf SSMS verwende ist:

**--create a table 
CREATE TABLE musicians_csv (
musician_id INT, 
full_name VARCHAR(50), 
colour VARCHAR(20) 
) 
GO 
--bulk insert csv into a SQL Server table 
BULK 
INSERT musicians_csv 
FROM 'https://XXXXXXXXXXX.file.core.windows.net/XXXXXXXXXXX/sqlserver-dba-csv.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Verify data inserted 
SELECT * 
FROM musicians_csv 
GO 
--Drop the table 
DROP TABLE musicians_csv 
GO** 

Die Fehlermeldung, die ich erhalten ist:

Msg 4861, Ebene 16, Status 1, Zeile 10 Kann nicht geladen werden, da die Datei "https: /xxxxxxxxx.file.core.windows.net/xxxxxxxxx /sqlserver-dba-csv.txt " konnte nicht geöffnet werden. Betriebssystemfehlercode (null).

(0 Zeile (n) betroffen)

Ich vermute, dass die Formatierung des Dateipfades nicht korrekt ist, aber nicht in der Lage, nach der Suche eine Lösung zu finden.

Alternativ - kann ich eine Datei auf meinem lokalen Computer referenzieren und importieren, obwohl sich mein SQL Server in der Azure Cloud befindet - beispielsweise ein Verzeichnis wie: "C: \ Users \ user.name \ Desktop \" sqlserver-dba-csv.txt“

Jede Hilfe sehr geschätzt

+0

Check out diese Antwort, aber ich habe blob hier verwendet: https: //stackoverflow.com/questions/44116289/migrating-to-azure-sql-bcp/44116380#44116380 – TheGameiswar

+0

https: // docs .Microsoft.com/de-de/sql/t-sql/statements/create-externe-datenquelle-transact-sql – david25272

Antwort

0

Dieser Link sollte Ihnen helfen: https://azure.microsoft.com/en-us/updates/preview-loading-files-from-azure-blob-storage-into-sql-database/

Sie benötigen eine externe Datenquelle (mit Shared Access Signatur, wenn Ihr Blob erstellen Speicher, ist nicht öffentlich.)

+0

Hallo, willkommen zu Stack Overflow. Im Allgemeinen sind Link-Only-Antworten verpönt, weil sie keinen Kontext bieten, um die meisten Fragen zu lösen. Weitere Informationen zum Verfassen besserer Antworten finden Sie unter https://stackoverflow.com/help/how-to-answer. – SandPiper

+0

danke das ist hilfreich - Ich wollte sehen, ob ich eine externe Datenquelle auf einem Azure SQL-Server mit Azure-Datei-Service lieber Speicher als Azure-Blob-Speicher erstellen könnte, da es einfach ist, Azure-Dateispeicher auf meinem lokalen Rechner abzubilden und Importe auszulösen . Ich habe festgestellt, dass Sie einen azure Blobspeicher nicht auf einem lokalen Windows-Rechner abbilden können. Daher muss ich herausfinden, wie dies mit dem Blobspeicher erledigt werden kann. –

1

Möglicherweise liegt ein Sicherheitsproblem vor: Azure SQL hat möglicherweise keinen Zugriff auf die Datei, die Sie importieren möchten, wenn die Datei nicht als öffentlich zugänglich deklariert wurde.

Natürlich vielleicht möchten Sie nicht die Datei setzen für jedermann zugänglich zu sein, so dass Sie die Anmeldeinformationen zu speichern, müssen über die CREATE CREDENTIAL Befehl, um es in Azure SQL zuzugreifen:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'A-$tr0ng|PaSSw0Rd!'; 
GO 

CREATE DATABASE SCOPED CREDENTIAL [CSV-Storage-Credentials] 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 
SECRET = '<shared-access-signature for "csvimportdemo" blob storage here>'; 
GO 

CREATE EXTERNAL DATA SOURCE [CSV-Storage] 
WITH 
( 
    TYPE = BLOB_STORAGE, 
    LOCATION = 'https://csvimportdemo.blob.core.windows.net', 
    CREDENTIAL= [CSV-Storage-Credentials] 
); 

einmal diese erfolgt Sie dann die Datei über MASSE Befehl aufrufen:

SELECT 
    FileId = ' + CAST(@fid AS NVARCHAR(9)) + ', 
    FirstName, 
    LastName, 
    TwitterHandle 
FROM OPENROWSET(
    BULK '<your file here>', 
    DATA_SOURCE = 'CSV-Storage', 
    FIRSTROW=2, 
    FORMATFILE='<your format file here>', 
    FORMATFILE_DATA_SOURCE = 'Storage') as t 

Sie eine volle Arbeitsprobe auf github (von wo aus der Beispielcode I gebucht werden entnommen aus), die auch den Import automatisiert unter Verwendung einer Azure-Funktion finden :

https://github.com/yorek/AzureFunctionUploadToSQL/blob/master/SQL/create-objects.sql

Verwandte Themen