BLOB-объект Azure не может выполнить массовую загрузку - PullRequest
0 голосов
/ 21 сентября 2018
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/), Я пытаюсь загрузить данные из BLOB-объекта Azure в таблицу SQL Azure.

После создания внешнего источника данных и запуска хранимой процедуры Iполучаю следующую ошибку:

"Невозможно выполнить массовую загрузку, поскольку файл" File.csv "не может быть открыт. Код ошибки операционной системы 5 (доступ запрещен.)."

Я удостоверился, что дважды проверил свой токен SAS и исключил вопросительный знак при создании учетных данных. Также дважды проверил URL-адрес Contrainer. Все, кажется, в порядке. Что я мог упустить здесь, чтобы предотвратить чтение большого двоичного объекта?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Пожалуйста, сделайте так, чтобы контейнер "input" существовал внутри учетной записи BLOB.

Пожалуйста, проверьте дату и время начала и окончания срока действия подписи общего доступа, проверьте его часовой пояс и убедитесь, что поле "Разрешенные IP-адреса" пусто.

enter image description here

Попробуйте вместо этого использовать OPENROWSET.

SELECT * INTO TempFile FROM OPENROWSET( BULK 'input/File.csv', DATA_SOURCE = 'AzureBlob', SINGLE_CLOB)
0 голосов
/ 24 сентября 2018

Похоже, что при использовании проверки подлинности SQL и Azure SQL не разрешается доступ к хранилищу больших двоичных данных при загрузке.

Если учетная запись хранилища больших двоичных объектов Azure не является общедоступной, необходимо создать сигнатуры общего доступа.(SAS) ключ для учетной записи с помощью портала Azure.Вставьте ключ 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);

Для получения дополнительной информации вы можете обратиться к этой статье .

...