netezza:无法识别功能

Posted

技术标签:

【中文标题】netezza:无法识别功能【英文标题】:netezza: Unable to identify a function 【发布时间】:2020-12-18 18:52:08 【问题描述】:

我需要将 Netezza DB 中的数据提取到文本文件中。在这个过程中,我需要在数据中存在的\ or " 之前添加额外的\。当我尝试使用下面提到的 sql 查询时,它正在工作。

select guest_key, cast(replace_nvarchar(replace_nvarchar(guest_last_nm,'\','\\'),'"','\"') as nchar(100)) as guest_last_nm from admin.cdr_mrdw_dim_messaging_ota limit 100;

但是当我在 shell 脚本中使用相同的查询时,它说函数不存在。

nzsql -d $NZ_DATABASE -F $'\t' -A -c "select guest_key, cast(replace_nvarchar(replace_nvarchar(guest_last_nm,'\','\\'),'"','\"') as nchar(100)) as guest_last_nm from admin.cdr_mrdw_dim_messaging_ota limit 100;" > cdr_mrdw_dim_messaging_ota.txt

错误:函数 'replace(varchar, unknown)' 不存在。无法识别满足给定参数类型的函数。您可能需要添加显式类型转换```

也试过翻译功能。已显示相同的错误。这是什么错误以及如何解决?

谢谢。

【问题讨论】:

这能回答你的问题吗? Replacing a string using SQL Server Replace function - string has more than 4000 characters - what to do? 文档ibm.com/support/knowledgecenter/en/SSULQD_7.2.1/… 要将查询作为通过 shell 命令行传递的带引号的文本字符串包含在内,您需要观察与周围引号匹配的任何嵌入引号的正确 shell 转义语法(以及反斜杠,假设反斜杠是您的转义字符)。 【参考方案1】:

您不必做那么复杂的事情:有一个内置功能可以在您的 PC 上创建一个 csv 文件...一个示例:

create external table 'C:\\temp\\SomeTable.csv'
                    USING
                                (           REMOTESOURCE 'ODBC'
                                            ENCODING 'internal'
                                            DELIMITER '\t'
                                            EscapeChar '\'
                                            NullValue '*'
                                --          CtrlChars TRUE
                                --          LFinString TRUE
                                --          CRinString TRUE
                                            LogDir 'C:\\temp\\')
as
select *
from 
SomeTable;

我已经注释掉了一些您可能需要或不需要的选项。 Encoding=internal 似乎表示 Unicode,对我来说效果很好:)

您可以在这里阅读更多内容:https://www.ibm.com/support/knowledgecenter/SSULQD_7.2.1/com.ibm.nz.load.doc/c_load_external_tables.html

【讨论】:

我需要将数据提取为远程 SFTP 位置的文本文件。我正在使用 nzsql 来做到这一点。如何将您的解决方案集成到我的流程中?我无法访问任何其他平台。这是组织数据,所以我不能将数据提取到本地系统中。 您可以通过 SSH 访问 Netezza 主机吗?或者:您的客户端是 Linux 系统吗? FIFO 文件和管道是您的朋友 :) 此外:“不允许提取到本地”对您发布的示例代码毫无意义......文件 cdr_mrdw_dim_messaging_ota.txt 对我来说似乎很本地:)

以上是关于netezza:无法识别功能的主要内容,如果未能解决你的问题,请参考以下文章

带有打字稿的玩笑无法识别功能完成()

IDE 无法识别 Jest 及其功能

UDF 替换功能 - 无法识别字符串

Laravel - 包无法识别身份验证功能?

Netezza 日期功能无法正常工作

应用程序无法识别非 android jar 中的功能