tsql - 将 CSV 从 Azure Data Lake(第 2 代)加载到 Azure SQL 数据库
问题描述
我有一个包含多个容器的 Azure Data Lake Storage (Gen 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 的对象资源管理器窗口中创建的外部数据源:
以下代码应将 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)
解决方案
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 Support API 可用于 ADLS Gen 2 之前,我们不能使用此处描述的 T-SQL 方法。
推荐阅读
- c++ - 如何通过保持第一个插入保持在其位置来对插入到列表中的其余元素进行排序?
- node.js - 带有 ESC/POS 的 NodeJS 的 Epson 热敏打印机状态
- javascript - 我可以确定哪个 .js 脚本正在更改特定的 HTML 元素吗?
- python - 使用 pcolor 在绘图中显示 z 值:为什么它适用于两个图形之一而不适用于另一个?
- azure-devops - 将构建版本传递给发布
- data-structures - 逻辑表达式的表达式树
- android - 在 kotlin 中有声音的 listView
- c - 如何使用信号量使子进程相互同步?
- c# - 有没有办法以编程方式检测加密字符串中的 AES 加密级别?(128 对 192 对 256)
- javascript - 将脚本插入 div / 类