0

我有一种情况,我正在处理一些数据摄取代码,其中环境设置如下:azure blob storage (not adls) 被用作临时存储,并且代码应该从文件创建一个外部表在临时存储中,数据将从那里复制到 azure synapse analytics。现在,blob 存储和 sql server 在虚拟网络中。现有代码没有考虑 vnet。所以创建外部数据源的语句已经修改为

CREATE EXTERNAL DATA SOURCE mydatasrc

WITH ( TYPE = HADOOP, LOCATION = 'abfss://mystoragecontainer@storageaccount.dfs.core.windows.net',

CREDENTIAL = myMsiCred);

来自以前的 wasbs uri,并使用托管服务标识。

外部表语句为:

CREATE EXTERNAL TABLE myschema.myExternalTable (

<columns list>

) WITH (

LOCATION = '/path/to/folder',

DATA_SOURCE = mydatasrc,

FILE_FORMAT = myFormat,

REJECT_TYPE = VALUE,

REJECT_VALUE = 0 );

起初我得到一个“请在此服务器上启用托管服务标识”,这需要很长时间才能修复,最后使用了 azure powershell 命令。现在它是一个

访问 HDFS 时出错:调用 HdfsBridge_IsDirExist 时引发 Java 异常。Java 异常消息:HdfsBridge::isDirExist - 检查目录是否存在时遇到意外错误:AbfsRestOperationException:操作失败:“此请求无权使用此权限执行此操作。”,403,HEAD

起初我以为我需要为 sql server 实例设置身份验证,以便它可以访问 vnet 内的 blob 存储。现在我在某处读到 abfss 仅由 adls gen2 使用,而 blob 存储专门使用 wasbs。真的吗?

4

1 回答 1

1

是的,确实是abfss用于 ADLS Gen2wasbs的 URI 方案,而用于 Blob 存储的 URI 方案。它们是不同的,因为我认为在处理文件夹时它们的语义略有不同。

此外,您可能需要确保在访问时拥有正确的权限。

于 2020-05-21T23:15:34.770 回答