Azure Blob无法批量加载

时间:2018-09-21 15:03:58

标签: sql azure azure-sql-database azure-storage azure-storage-blobs

CREATE PROCEDURE LoadData
AS
BEGIN

DELETE FROM [dbo].[File];

BULK INSERT [dbo].[File]
FROM 'File.csv'
WITH ( 
    DATA_SOURCE = 'AzureBlob',
    FORMAT      = 'CSV',
    FIRSTROW    = 2
);

END
---------------------
CREATE EXTERNAL DATA SOURCE AzureBlob
WITH ( 
    TYPE       = BLOB_STORAGE,
    LOCATION   = 'https://marczakiocsvstorage.blob.core.windows.net/input',
CREDENTIAL = BlobCredential
);
-----------------------------
CREATE DATABASE SCOPED CREDENTIAL BlobCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=SAS_TOKEN_HERE';

按照本指南(https://marczak.io/posts/azure-loading-csv-to-sql/),我尝试将数据从Azure Blob加载到Azure SQL表中。

创建外部数据源并运行存储过程后,出现以下错误:

“由于无法打开文件“ File.csv”,因此无法批量加载。操作系统错误代码5(访问被拒绝。)。“

我确保在创建凭据时仔细检查我的SAS令牌并排除问号。还要仔细检查约束器URL。一切似乎还好。我在这里可能会错过什么,以防读取斑点?

2 个答案:

答案 0 :(得分:0)

在使用SQL身份验证和Azure SQL时,不允许访问批量加载blob存储。

如果您的Azure Blob存储帐户不是公共帐户,则需要使用Azure门户为该帐户生成一个共享访问签名(SAS)密钥。将SAS密钥放入CREDENTIAL中,并用EXTERNAL DATA SOURCE创建一个CREDENTIAL,如以下示例所示:

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2015-12-11&ss=b&srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z&spr=https&sig=copyFromAzurePortal';

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
       LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
       CREDENTIAL= MyAzureBlobStorageCredential);

有关更多详细信息,您可以参考此article

答案 1 :(得分:0)

请确保BLOB帐户中存在“输入”容器。

请验证共享访问签名的开始和终止日期和时间,验证其时区,并验证“允许的IP地址”为空。

enter image description here

尝试改用OPENROWSET。

{{1}}