Доступ к ВНЕШНЕЙ ТАБЛИЦЕ не удался из-за внутренней ошибки: «Исключение 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: серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.] Произошло при доступе к внешнему файлу. '


person ravi kiran    schedule 20.01.2017    source источник
comment
Не могли бы вы опубликовать определение вашего внешнего источника данных и формата файла? Удалите все необходимые IP-адреса, информацию и т. Д.   -  person wBob    schedule 20.01.2017
comment
СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ AzureStorage С ПОМОЩЬЮ (TYPE = HADOOP, LOCATION = 'wasbs: // ‹blob_container_name› @ ‹azure_storage_account_name› .blob.core.windows.net', CREDENTIAL = AzureStorageCredential); СОЗДАТЬ ВНЕШНИЙ ФОРМАТ текстового файла с помощью (FORMAT_TYPE = DelimitedText, FORMAT_OPTIONS (FIELD_TERMINATOR = ','));   -  person ravi kiran    schedule 20.01.2017
comment
Чтобы исключить очевидное, в учетной записи хранилища BLOB-объектов Azure есть контейнер, называемый вашим контейнером, с папкой с именем «текстовые файлы» и файлом с именем DimDate2.txt, верно?   -  person wBob    schedule 20.01.2017
comment
Есть три области для отладки этого в SQL DW. 1) Учетные данные в области базы данных (убедитесь, что ключ правильный), 2) Внешний источник данных (убедитесь, что контейнер и URI верны. Случай имеет значение) 3) Определение внешней таблицы (убедитесь, что расположение указано указано правильно, опять же дело в регистре.)   -  person ckarst    schedule 20.01.2017


Ответы (2)


В синтаксисе "LOCATION" я по ошибке потерял контейнер BLOB-объектов и учетную запись хранилища и получил эту ошибку. Теперь это исправлено.

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

person ravi kiran    schedule 23.01.2017

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

CREATE EXTERNAL DATA SOURCE eds_dummy
WITH (  
    TYPE = Hadoop,
    LOCATION = 'wasbs://[email protected]',
    CREDENTIAL = sc_tpch
);

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

Msg 105002, уровень 16, состояние 1, строка 27 Доступ к ВНЕШНЕЙ ТАБЛИЦЕ завершился неудачно, поскольку указанное имя пути «/test.txt» не существует. Введите действительный путь и попробуйте еще раз.

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

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

Чтобы исправить это, убедитесь, что учетная запись хранения Azure и контейнер больших двоичных объектов существуют.

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

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

к этому:

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

Удачи.

person wBob    schedule 21.01.2017
comment
Спасибо. В синтаксисе "LOCATION" я по ошибке потерял контейнер BLOB-объектов и учетную запись хранилища и получил эту ошибку. Теперь это исправлено. СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ AzureStorage С ПОМОЩЬЮ (TYPE = HADOOP, LOCATION = 'wasbs: // ‹blob_container_name› @ ‹azure_storage_account_name› .blob.core.windows.net', CREDENTIAL = AzureStorageCredential); - person ravi kiran; 23.01.2017