Загрузка файла из хранилища BLOB-объектов Azure в базу данных SQL Azure с помощью BULK INSERT

После этого объявления https://azure.microsoft.com/en-gb/updates/preview-loading-files-from-azure-blob-storage-into-sql-database/

Я пробовал пример как таковой при условии в этом примере GitHub и получаю следующую ошибку:

-- Create credential with Azure Blob SAS
CREATE DATABASE SCOPED CREDENTIAL xxxstorcred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '?sv=2015-12-11&ss=bfqt&srt=sco&sp=rwdl&st=2017-03-14T17%3A52%3A00Z&se=2017-05-31T16%3A52%3A00Z&sig=f45435435TzrsdsdsdC8wonjDMBG0T0GJj717XetLEWReZ64eOrQE%3D';

-- Create external data source with with the roow URL of the Blob storage Account and associated credential.
CREATE EXTERNAL DATA SOURCE xxxstor
WITH (  TYPE = BLOB_STORAGE, 
        LOCATION = 'https://xxxstor.blob.core.windows.net', 
        CREDENTIAL= xxxstorcred);
--CREATE DESTINATION TABLE (if not exists)
DROP TABLE IF EXISTS Product;
GO

CREATE TABLE dbo.Product(
    Name nvarchar(50) NOT NULL,
    Color nvarchar(15) NULL,
    Price money NOT NULL,
    Size nvarchar(5) NULL,
    Quantity int NULL,
    Data nvarchar(4000) NULL,
    Tags nvarchar(4000) NULL
)
GO

--LOAD

-- INSERT CSV file into Product table
BULK INSERT Product
FROM 'random/product.csv' --random is the container name
WITH (  DATA_SOURCE = 'xxxstor',
        FORMAT='CSV', CODEPAGE = 65001, --UTF-8 encoding
        FIRSTROW=2,
        TABLOCK); 

Не удалось выполнить массовую загрузку, поскольку не удалось открыть файл random / product.csv. Код ошибки операционной системы 1117 (запрос не может быть выполнен из-за ошибки устройства ввода-вывода.).

Что мне не хватает?


person databash    schedule 14.03.2017    source источник


Ответы (2)


Я пробовал t-sql из предоставленного вами образца github. Работает нормально. В моем тесте есть две возможности, которые могут вызвать эту ошибку:

1) Неверное название контейнера

2) SAS SECRET неверен

Судя по вашему описанию, я считаю, что ваш секрет SAS неверен. Вот секрет, который вы использовали:

SECRET = '? Sv = 11-12-2015 & ss = bfqt & srt = sco & sp = rwdl & st = 2017-03-14T17% 3A52% 3A00Z & se = 2017-05-31T16% 3A52% 3A00Z & sig = f45435435TzrsdsdsdC8wonjDJRJG0T0%

В качестве моей проверки нам нужно удалить '?'. Пожалуйста, попробуйте секрет ниже:

SECRET = 'sv = 2015-12-11 & ss = bfqt & srt = sco & sp = rwdl & st = 2017-03-14T17% 3A52% 3A00Z & se = 2017-05-31T16% 3A52% 3A00Z & sig = f45435435TzrsdsdsdC8wonjDMBREZE%

Чтобы узнать, как создать SAS, обратитесь к эту статью.

person Jambor - MSFT    schedule 15.03.2017
comment
Кроме того, чтобы избежать возможных проблем с форматированием, кодировкой или другими проблемами, попробуйте загрузить весь файл как один текст, чтобы убедиться, что к нему можно получить доступ: SELECT * FROM OPENROWSET (BULK 'random / product.csv', DATA_SOURCE = datasourcename ' , SINGLE_CLOB) как данные - person Jovan MSFT; 15.03.2017
comment
Да это действительно ведущая? в SAS SECRET. После удаления работает нормально. Спасибо за ответ. - person databash; 16.03.2017
comment
У SAS должен быть срок действия, после чего мне нужно обновить учетные данные с заданной областью? - person dduque; 07.10.2020

В моем случае с токеном SAS была другая проблема: он недействителен еще.

Я создал токен с датой начала по умолчанию (которая является текущим временем в моем текущем часовом поясе). Но затем он сравнивается с GMT, что отстает от моего времени.

Вы можете легко протестировать токен SAS в Microsoft Azure Storege Explorer. В таком случае будет показано следующее сообщение:  Изображение показывает сообщение об ошибке из обозревателя хранилищ Azure, в котором говорится, что подпись недействительна в указанный период времени

Решение состоит в том, чтобы изменить время начала, например. до 00:00:00.

person Jakub    schedule 21.06.2017
comment
Хороший поиск @Jakub, это тоже была моя проблема :-) - person tjeuten; 06.11.2017