【发布时间】:2021-04-23 14:29:30
【问题描述】:
TL;DR 我正在尝试从 Local Azure Blob Storage
将 SQL 指向BULK INSERT
问题:
大家好,
我正在尝试将我的本地 SQL Server 数据库实例作为外部连接连接到 Blob 存储模拟器,但是我得到了 “指定的错误或无法访问的位置” em> 错误。以下是我正在采取的步骤:
我创建了以下MasterDatabaseKey 和CREDENTIALS 如下:
IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##')
DROP MASTER KEY;
--Create Master Key
CREATE MASTER KEY
ENCRYPTION BY PASSWORD='MyStrongPassword';
和数据库凭据:
-- DROP DB Credentials If Exist
IF EXISTS (SELECT * FROM sys.database_credentials WHERE name = 'credentials')
DROP DATABASE SCORED CREDENTIAL credentials;
--Create scoped credentials to connect to Blob
CREATE DATABASE SCOPED CREDENTIAL credentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET =
'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=='; --local storage key
GO
然后我创建了以下外部数据源:
CREATE EXTERNAL DATA SOURCE external_source
WITH
(
TYPE = BLOB_STORAGE,
LOCATION = 'http://127.0.0.1:10000/devstoreaccount1/container/some_folder/',
CREDENTIAL = credentials
)
但是当我运行BULK INSERT 命令时:
BULK INSERT [dbo].[StagingTable] FROM 'some_file_on_blob_storage.csv' WITH (DATA_SOURCE = 'external_source', FIRSTROW = 1, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
但它失败并返回
Bad or inaccessible location specified in external data source "external_source".
如何将文件从本地 Blob 存储加载到 SQL Server?
【问题讨论】:
-
只是确认如果您将127.0.0.1:10000/devstoreaccount1/container/some_folder 插入本地浏览器,您会得到看起来“blobby”的东西......甚至是 401 错误?
-
@Nick.McDermaid 是正确的,带有 XML 正文的 401(未经授权)。
-
我注意到这里的文档 docs.microsoft.com/en-us/sql/t-sql/statements/… 说 在为批量配置外部数据源时,不要在 LOCATION URL 的末尾添加尾随 /、文件名或共享访问签名参数操作。
-
该示例也没有尾随
/,因此请尝试将其删除。 -
@Nick.McDermaid 我刚刚在
credential参数中添加了一个SAS,并在文件中附加了密码。它似乎正在读取文件,但它被另一个进程锁定(显然)
标签: sql azure blob azure-blob-storage bulkinsert