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

Azure Synapse Serverless. HashBytes: The query references an object that is not supported in distributed processing mode

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

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

这是一个产生错误的示例查询:

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',
        DATA_SOURCE = 'landingzone',
        FORMAT = 'csv',
        fieldterminator ='0x0b',
        fieldquote = '0x0b'
) with (rec nvarchar(max)) as csvdata;

此示例按预期生成哈希:

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

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

预先感谢您的建议。

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

无服务器环境中受支持的 T-SQL 命令列表可用 here. This article notably states that cryptographic functions (listed also here),例如 HASHBYTES()(尚)不受支持。

我想宣布,在 Azure Synapse 的无服务器 SQL 池中,分布式查询(与外部表或 openrowset 一起使用时)现在支持 Hashbytes 函数!

在这个link你可以看到Transact-SQL features supported in Azure Synapse SQL