我已经使用本地SQL Server Express设置测试了这个设计。
我将几个.json文件上传到Azure存储 在SQL数据库中,我创建了一个外部数据源:
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
(TYPE = BLOB_STORAGE,
LOCATION = 'https://mydatafilestest.blob.core.windows.net/my_dir
);
然后我尝试使用我的外部数据源查询文件:
select *
from OPENROWSET
(BULK 'my_test_doc.json', DATA_SOURCE = 'MyAzureStorage', SINGLE_CLOB) as data
然而,这失败并显示错误消息"无法批量加载。文件" prod_EnvBlow.json"不存在或您没有文件访问权限。"
我是否需要配置DATABASE SCOPED CREDENTIAL来访问文件存储,如此处所述? https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-scoped-credential-transact-sql
还有什么人可以看到出错了我需要纠正吗?
答案 0 :(得分:2)
OPENROWSET
,如本documentation page中所述。您可以使用BULK INSERT
将数据插入临时表,然后查询此表。有关BULK INSERT
的文档,请参阅this page。
答案 1 :(得分:0)
现在OPENROWSET
处于公开预览状态,以下工作正常。 Nb关键选项是万一你的blob不公开。我在带有作用域凭据选项的私有blob上尝试了它并且它有效。 nnb如果您使用SAS密钥,请务必删除前导?
,以便字符串应以sv
开头,如下所示。
确保blobcontainer/my_test_doc.json
部分指定正确的路径,例如container/file
。
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2017****************';
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
LOCATION = 'https://yourstorage.blob.core.windows.net',
CREDENTIAL= MyAzureBlobStorageCredential);
DECLARE @json varchar(max)
SELECT @json = BulkColumn FROM OPENROWSET(BULK 'blobcontainer/my_test_doc.json',
SINGLE_BLOB, DATA_SOURCE = 'MyAzureBlobStorage',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage') as j;
select @json;
这些docs
中提供了更多详细信息