В SQL массовая вставка из большого двоичного объекта дает ошибку

У меня есть файл 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);

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

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

Как я могу узнать, в чем именно заключается проблема?


person Saibaba B    schedule 17.01.2019    source источник
comment
Из сообщения об ошибке видно, что используется файл .csv, можете ли вы проверить, используется ли он?   -  person Ivan Yang    schedule 17.01.2019
comment
@IvanYang, я создал новый контейнер и загрузил в него файл. По-прежнему возникает такая же ошибка. Никто не использует файл.   -  person Saibaba B    schedule 17.01.2019
comment
Вы создали публичный контейнер или частный контейнер? если он частный, вам нужно будет сгенерировать токен sas для доступа к файлу   -  person Thomas    schedule 17.01.2019
comment
@ Томас, я вообще-то пробовал и приватный, и публичный. В обоих случаях я получаю одну и ту же ошибку.   -  person Saibaba B    schedule 17.01.2019


Ответы (1)


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

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

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

netstat -p tcp -ano | findstr :10000

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

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

person Leon Yue    schedule 17.01.2019
comment
спасибо за ответ, но я не нашел ни одного процесса, использующего порт 10000 на моей машине. - person Saibaba B; 17.01.2019
comment
@Leon, да, я тоже столкнулся с той же проблемой, и нет ничего, что использует этот порт, я выполнил эту команду на своем локальном компьютере, если ее не нужно запускать на машине Azure. - person Sarah; 10.03.2020