【问题标题】:Azure Synapse Serverless. HashBytes: The query references an object that is not supported in distributed processing modeAzure Synapse 无服务器。 HashBytes:查询引用了分布式处理模式不支持的对象
【发布时间】: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


【解决方案1】:

Jason,对不起,hashbytes() 不支持外部表。

【讨论】:

  • 真可惜 - 感谢您为我调查这个问题。
  • 还有哪些其他不受支持的功能?我可以使用任何文档吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多