由于内部错误,EXTERNAL TABLE访问失败:'调用HdfsBridge_IsDirExist时出现Java异常。 Java异常消息:

时间:2017-01-20 12:30:26

标签: azure azure-sql-database azure-sqldw polybase

我正在尝试通过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 = ',') );

由于内部错误,EXTERNAL TABLE访问失败:

  

'调用HdfsBridge_IsDirExist时出现了Java异常。 Java的   异常消息:com.microsoft.azure.storage.StorageException:   服务器无法验证请求。确保价值   正确形成授权标头,包括签名:   错误[com.microsoft.azure.storage.StorageException:服务器失败   验证请求。确保Authorization标头的值   正确形成包括签名。]访问时发生   外部文件。'

2 个答案:

答案 0 :(得分:3)

在&#39; LOCATION&#39;语法我错误地错误地放错了Blob容器和存储帐户并得到了这个错误。现在它固定了。

创建外部数据源AzureStorage WITH(TYPE = HADOOP,LOCATION =&#39; wasbs://@。blob.core.windows.ne t&#39;,CREDENTIAL = AzureStorageCredential)

答案 1 :(得分:2)

如果外部数据源的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 EXTERNAL TABLE访问失败   因为指定的路径名​​'/test.txt'不存在。进入一个   有效路径,然后再试一次。

blob容器上似乎有某种验证。但是,如果 Azure存储帐户名称不正确,则在创建外部数据源时不会出现错误,只有在您尝试创建表时才会出现错误:

  

Msg 105019,Level 16,State 1,Line 35 EXTERNAL TABLE访问失败   由于内部错误:'调用时出现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

祝你好运。