【发布时间】:2021-04-11 06:43:12
【问题描述】:
使用 HASHBYTES() 函数对 Synapse Serverless SQL 池中的行进行哈希处理时,我收到错误“查询引用了分布式处理模式中不支持的对象”。
最终目标是解析 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"}}');
如果我首先创建一个外部表并在从外部表查询时使用 hashbytes() 函数,我也会收到错误。
提前感谢您的建议。
【问题讨论】:
-
Jason,除了使用 hashbytes() 之外,我已经能够在其他情况下重现该错误。我正在进一步研究这一点,我会在今天晚些时候向您介绍进展情况。
-
你有
BULK 'json/*/*/*/*/*.json.gz',然后是FORMAT = 'csv',。那是对的吗?您还可以发布rec列的值的示例吗?是什么类型的?顺便说一句,我确实看到了罗恩的回答,但只是好奇。 -
@Kashyap,这是我关注的语法文档docs.microsoft.com/en-us/azure/synapse-analytics/sql/…。如果我只选择列并省略对哈希字节的调用,它就可以工作。 json 文档是
{"mydoc": {"key":"value"}}。它和上面的一样——我只是创建了一个包含几百行的文件用于测试。
标签: azure-synapse