Доступ к ВНЕШНЕМУ ТАБЛИЦУ не выполнен из-за внутренней ошибки: "Возникла исключительная ситуация Java при вызове HdfsBridge_IsDirExist. Сообщение об исключении Java:

Я пытаюсь создать внешнюю таблицу с помощью PolyBase с синтаксисом ниже в Visual Studio 2015. Это дает мне ошибку ниже. Может кто-нибудь, пожалуйста, помогите по этому

CREATE EXTERNAL TABLE dbo.DimDate2External (
    DateId INT NOT NULL,
    CalendarQuarter TINYINT NOT NULL,
    FiscalQuarter TINYINT NOT NULL
)
WITH (
    LOCATION='/textfiles/DimDate2.txt',
    DATA_SOURCE=AzureStorage,
    FILE_FORMAT=TextFile
);

CREATE EXTERNAL DATA SOURCE AzureStorage
WITH ( 
    TYPE = HADOOP, 
    LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.‌​blob.core.windows.ne‌​t', 
    CREDENTIAL = AzureStorageCredential
    ); 

CREATE EXTERNAL FILE FORMAT TextFile WITH ( FORMAT_TYPE = DelimitedText, FORMAT_OPTIONS (FIELD_TERMINATOR = ',') );

Доступ к ВНЕШНЕЙ ТАБЛИЦЕ не выполнен из-за внутренней ошибки

'Возникла исключительная ситуация Java при вызове HdfsBridge_IsDirExist. Сообщение об исключении Java: com.microsoft.azure.storage.StorageException: серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.: Ошибка [com.microsoft.azure.storage.StorageException: серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка Авторизация сформировано правильно, включая подпись.] Произошло при доступе к внешнему файлу.'

2 ответа

В синтаксисе 'LOCATION' я по ошибке поместил контейнер Blob и учетную запись хранения и получил эту ошибку. Теперь это исправлено.

СОЗДАТЬ ИСТОЧНИК ВНЕШНИХ ДАННЫХ AzureStorage WITH ( TYPE = HADOOP, LOCATION = 'wasbs://@.‌ blob.core.windows.ne‌ t', CREDENTIAL = AzureStorageCredential)

Я могу воспроизвести эту ошибку, если неверен элемент учетной записи хранилища Azure вашего внешнего источника данных (XXX в моем примере):

CREATE EXTERNAL DATA SOURCE eds_dummy
WITH (  
    TYPE = Hadoop,
    LOCATION = 'wasbs://dummy@XXX.blob.core.windows.net',
    CREDENTIAL = sc_tpch
);

Если имя контейнера BLOB-объекта неверно (dummy в моем примере) но учетная запись хранения верна, вы получаете очень конкретное сообщение об ошибке при попытке создать таблицу:

Сообщение 105002, уровень 16, состояние 1, строка 27 Доступ к ВНЕШНЕМУ ТАБЛИЦЕ не выполнен, поскольку указанный путь к файлу /test.txt не существует. Введите правильный путь и попробуйте снова.

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

Сообщение 105019, уровень 16, состояние 1, строка 35 Не удалось получить доступ к ВНЕШНЕМУ СТОЛУ из-за внутренней ошибки: "Возникла исключительная ситуация Java при вызове HdfsBridge_IsDirExist. Сообщение об исключении Java: com.microsoft.azure.storage.StorageException: сервер обнаружил неизвестную ошибку:: ошибка [com.microsoft.azure.storage.StorageException: сервер обнаружил неизвестную ошибку: ] при доступе к внешнему файлу.'

Для исправления убедитесь, что существует учетная запись хранилища Azure и контейнер BLOB-объектов.

Самый простой способ сделать это - скопировать URL-адрес вашего файла или папки с портала и исправить его для внешних таблиц, то есть из этого:

https://yourStorageAccountName.blob.core.windows.net/yourBlobContainerName

к этому:

wasbs://yourBlobContainerName@yourStorageAccountName.blob.core.windows.net

Удачи.

Другие вопросы по тегам