Azure 将 csv 文件从 Azure 文件服务位置批量导入 Azure SQL Server



我想将一个csv文件(sqlserver-dba-csv.txt)导入到Azure中托管的SQL Server数据库上的表中。

此文件位于 Azure 文件服务(位置地址:"https://XXXXXXXXXXX.file.core.windows.net/XXXXXXXXXXX/sqlserver-dba-csv.txt")上,该服务也是本地计算机上的映射驱动器。

最终,我希望通过触发器在某种程度上自动化,但现在我只想将数据导入SQL服务器上的表中以证明该过程有效。

此 sqlserver-dba-csv.txt 文件的内容是:

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

我在SSMS上使用的代码是:

**--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**

我收到的错误消息是:

Msg 4861,级别 16,状态 1,第 10 行 无法批量加载,因为文件 "https:/xxxxxx.file.core.windows.net/xxxx/sqlserver-dba-csv.txt" 无法打开。操作系统错误代码 (空)。

(0 行受影响)

我怀疑文件位置的格式不正确,但在搜索后无法找到任何解决方案。

或者 - 我是否可以在本地计算机上引用和导入文件,即使我的 SQL Server 位于 Azure 云中 - 例如:"C:\Users\user.name\Desktop\sqlserver-dba-csv.txt"

任何帮助非常感谢

你可能面临安全问题:如果尚未声明该文件可以进行公共访问,则 Azure SQL 可能无法访问你尝试导入的文件。

当然,也许你不想将文件设置为可供所有人使用,因此必须将凭据存储到Azure SQL中,以便通过"创建凭据"命令访问该文件:

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]
);

完成此操作后,您可以通过 BULK 命令访问该文件:

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

你可以在 GitHub 上找到一个完整的工作示例(我发布的示例代码来自该示例),该示例也使用 Azure 函数自动导入:

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

此链接应该可以帮助您: https://azure.microsoft.com/en-us/updates/preview-loading-files-from-azure-blob-storage-into-sql-database/

需要创建外部数据源(如果 Blob 存储不是公共的,则使用共享访问签名。

最新更新