我正在尝试通过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.net',
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标头的值 正确形成包括签名。]访问时发生 外部文件。'
答案 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