将CSV从Azure Data Lake(第2代)加载到Azure SQL数据库

时间:2018-12-14 19:37:49

标签: tsql azure-sql-database azure-storage-blobs azure-data-lake external-data-source

我有一个带有多个容器的Azure Data Lake Storage(第2代)帐户。我想将salesorderdetail.csv文件从Sales容器导入Azure SQL数据库。

我已经使用Azure数据工厂成功构建了相同的过程,但是我现在想尝试仅通过标准T-SQL语句来使它正常工作。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'XxxxxxXX#'

CREATE DATABASE SCOPED CREDENTIAL MK_Cred_Data_Load 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 
SECRET = 'sv=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%3D'; 

CREATE EXTERNAL DATA SOURCE MK_ADLS_Sales
WITH (TYPE = BLOB_STORAGE, 
LOCATION = 'https://mkpracticestorageaccount.blob.core.windows.net/sales', 
CREDENTIAL = MK_Cred_Data_Load);

上面的代码似乎正常工作,因为我可以看到在SSMS的“对象资源管理器”窗口中创建的外部数据源:

enter image description here

以下代码应将salesorderdetail.csv文件中的数据插入到[lnd].salesorderdetail表中:

TRUNCATE TABLE [lnd].[SalesOrderDetail]

BULK INSERT [lnd].[SalesOrderDetail]
FROM 'salesorderdetail.csv'
WITH (DATA_SOURCE = 'MK_ADLS_Sales', FORMAT = 'CSV', FIRSTROW=2, 
FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')

相反,它将输出以下错误消息:

  

找不到参考的外部数据源“ MK_ADLS_Sales”。

我也尝试了以下方法,但是出现了与上面相同的错误消息。

SELECT * 
FROM OPENROWSET(BULK  'salesorderdetail.csv',
                DATA_SOURCE = 'MK_ADLS_Sales',
                SINGLE_CLOB) AS DataFile;

有人可以帮忙吗?谢谢!

(使用SSMS v17.9,Azure SQL数据库标准版,Windows 10)

1 个答案:

答案 0 :(得分:0)

Blob存储API尚不适用于Azure Data Lake Storage Gen2帐户。 禁用这些API是为了防止由于Blob存储API尚未与Azure Data Lake Gen2 API互操作而引起的意外数据访问问题。

来源: https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-known-issues

这意味着,直到Blob支持API可用于ADLS Gen 2,我们才能使用here中所述的T-SQL方法。