В SQL массовая вставка из blob дает ошибку - PullRequest
0 голосов
/ 17 января 2019

У меня есть файл CSV в хранилище BLOB-объектов Azure, и я хочу вставить содержимое файла в свою таблицу MS SQL. Мои CSV-файл и таблица, которые я использую в своем коде, имеют одинаковое количество столбцов.

Я использовал команду «Массовая вставка», как указано здесь: Импорт данных из файла в хранилище BLOB-объектов Azure .

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xxxxxxxxx';

CREATE DATABASE SCOPED CREDENTIAL AzureBlobStorageCredential 
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '<I kept my SAS token here without leading question(?) mark>';


CREATE EXTERNAL DATA SOURCE GSCSVFileAzureBlobStorage
WITH (  TYPE = BLOB_STORAGE, 
        LOCATION = 'https://myaccount.blob.core.windows.net/csvfileshare', 
        CREDENTIAL= AzureBlobStorageCredential    );

BULK INSERT RawItemData
FROM 'itemdata_csv_test.csv'
WITH (DATA_SOURCE = 'GSCSVFileAzureBlobStorage',FORMAT = 'CSV',FIELDTERMINATOR = ',',FIRSTROW=2);

Если я использую мой локальный путь к файлу, массовая вставка работает как положено, но если я читаю ее из BLOB-объекта, я получаю эту ошибку:

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

Как я могу найти, где именно проблема?

1 Ответ

0 голосов
/ 17 января 2019

Я обнаружил некоторые сведения об ошибке хранилища BLOB-объектов Azure: «Процесс не может получить доступ к файлу, поскольку он используется другим процессом».

В этой статье говорится, что сообщение об ошибке в заголовке, как правило, является результатом использования порта. Проверьте, какая из служб хранения (BLOB-объектов, таблиц или очередей) не запускается, и посмотрите, использует ли что-либо на вашем компьютере этот порт. Наиболее распространенным случаем является то, что хранилище BLOB-объектов не запускается, поскольку BitTorrent использует порт 10000.

Используйте команду netstat, чтобы определить, какой процесс имеет порт

netstat -p tcp -ano | findstr :10000

Завершите этот процесс и попробуйте снова.

Надеюсь, это поможет вам.

...