Azure Synapse 无服务器 HashBytes:查询引用了分布式处理模式不支持的对象

问题描述

在使用 HASHBYTES() 函数对 Synapse Serverless sql 池中的行进行哈希处理时,我收到错误查询引用了分布式处理模式不支持的对象”。

最终目标是解析 json 并将其与 json 文档的哈希一起存储为 parquet。该哈希值将用于未来导入新快照以识别差异。

这是产生错误的示例查询

SELECT HASHBYTES('sha2_256',csvdata.rec)
FROM OPENROWSET(
        BULK 'json/*/*/*/*/*.json.gz',DATA_SOURCE = 'landingzone',FORMAT = 'csv',fieldterminator ='0x0b',fieldquote = '0x0b'
) with (rec nvarchar(max)) as csvdata;

这个例子也会产生错误

SELECT HASHBYTES('sha2_256','{"mydoc": {"key":"value"}}')
FROM OPENROWSET(
        BULK 'json/*/*/*/*/*.json.gz',fieldquote = '0x0b'
) with (rec nvarchar(max)) as csvdata;

此示例按预期生成哈希:

SELECT HASHBYTES('sha2_256','{"mydoc": {"key":"value"}}');

如果我首先创建一个外部表并在从外部表查询时使用 hashbytes() 函数,我也会收到错误

预先感谢您的建议。

解决方法

Jason,抱歉,外部表不支持 hashbytes()。

,

无服务器环境中支持的 T-SQL 命令列表可用 here。本文特别指出,(还)不支持诸如 HASHBYTES() 之类的加密函数(也列出 here)。