我收到错误"该查询引用一个在分布式处理模式下不受支持的对象";当使用HASHBYTES((函数对Synapse无服务器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',
DATA_SOURCE = 'landingzone',
FORMAT = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (rec nvarchar(max)) as csvdata;
这个例子产生了一个预期的散列:
SELECT HASHBYTES('sha2_256', '{"mydoc": {"key":"value"}}');
如果我第一次创建一个外部表并在从外部表查询时使用hashbytes((函数,我也会收到错误。
提前感谢你的建议。
我想宣布,在Azure Synapse中的无服务器SQL池中,分布式查询(与外部表或openrowset一起使用时(现在支持Hashbytes函数!
在此链接上,您可以看到Azure Synapse SQL中支持的Transact-SQL功能。
此处提供了无服务器环境中支持的T-SQL命令列表。本文特别指出,诸如HASHBYTES((之类的加密函数(此处也列出(还不受支持。