azure blob 存储可以使用 abfss 协议吗?或者它只使用wasbs?

Can azure blob storage use abfss protocol? Or does it only use wasbs?

我遇到这样一种情况,我正在处理一些数据摄取代码,环境设置如下:azure blob 存储(不是 adls)被用作临时存储,代码应该创建一个external table 来自临时存储中的文件,数据将从那里复制到 azure synapse analytics。现在,blob 存储和 sql 服务器位于虚拟网络中。现有代码没有考虑 vnet。所以创建外部数据源的语句修改为

CREATE EXTERNAL DATA SOURCE mydatasrc

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

CREDENTIAL = myMsiCred);

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

外部table语句是:

CREATE EXTERNAL TABLE myschema.myExternalTable (

<columns list>

) WITH (

LOCATION = '/path/to/folder',

DATA_SOURCE = mydatasrc,

FILE_FORMAT = myFormat,

REJECT_TYPE = VALUE,

REJECT_VALUE = 0 );

起初我得到一个 'Please enable Managed service identity on this server',花了很长时间才修复,最后使用 azure powershell 命令。现在是

Error occurred while accessing HDFS: Java exception raised on call to HdfsBridge_IsDirExist. Java exception message: HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, HEAD

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

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

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