REPLACE() 等 tsql 函数在连接到 salesforce 的 Azure 数据工厂管道中失败

问题描述 投票:0回答:1

这是连接到 salesforce 的 ADF 管道中。

使用 REPLACE()、TRANSLATE() 等常见 tsql 函数会导致错误。

目标:从长文本字段中清除特殊字符,例如换行符和正在写入的文件的分隔符。

问题:

  • 如果没有任何这些功能,管道会成功运行,但其输出的文件已损坏。
  • 在数据工厂笔记本中读取文件或在 Excel 中打开文件时,值错误,例如主键中的空值。

通过此查询,管道运行没有错误,但文件已损坏:

SELECT
Id,
longtextfield
FROM
exampleTable

我已经尝试过:

REPLACE(longtextfield, '|', '') AS longtextfield

CAST(REPLACE(longtextfield, '|', '') AS varchar(5000)) AS longtextfield

REPLACE(ISNULL(longtextfield, ''), '|', '')

TRANSLATE(longtextfield, '|', '')

以及其他变体。他们都失败并显示此错误消息:

错误 [HY000] [Microsoft][Salesforce] (120) SOQL_FIRST 模式准备失败: SOQL 错误:[Microsoft][SQLEngine] (31480) 'SELECT ISNULL(<<< ??? >>>Subject,'') AS testname FROM exampletable

附近存在语法错误

当然我已经仔细验证了表名、对象名等是否正确,但我无法确定任何实际的语法错误,看来是使用tsql语句本身导致了错误。

我已经看到这些函数在我们组织中非常相似的管道中成功使用(在其他对象和字段上)。这些管道非常简单,只有 1 个副本数据活动查询和写入文件。

我不太熟悉 tsql-soql 翻译的工作原理,在该级别是否有某些东西可能会拒绝该函数?

azure t-sql salesforce azure-data-factory soql
1个回答
0
投票

SOQL 不支持 REPLACE 函数或其他通用文本操作函数。 [注意:SOQL 和 t-SQL 是不同的]。 SOQL 中的可用函数在官方文档中列出。

解决方法是将数据复制到 azure 数据库/azure 存储,然后使用 ADF 数据流活动对其进行转换,然后将转换后的数据复制到接收器。在数据流中,您可以使用派生列转换来重新定义列。在派生列转换中,使用 replace 函数

  • 表情:
    replace(longtextfield,'|','')

这样,您就可以替换数据中的字符。

© www.soinside.com 2019 - 2024. All rights reserved.