如何从雪花中去除Unicode替换字符 [英] How to remove Unicode replacement character from Snowflake

查看:6
本文介绍了如何从雪花中去除Unicode替换字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Copy Into命令将数据加载到Snowflake时,有一个名为:REPLACE_INVALID_CHARACTERS的参数。根据文档,如果将其设置为TRUE,则任何无效的UTf-8字符都将替换为如下所示的unicode替换字符(�)

https://docs.snowflake.net/manuals/sql-reference/sql/copy-into-table.html#type-csv

我的问题是,如何从表中的数据中删除此字符?我尝试使用REGEXP_REPLACE,但一直无法确定要使用的正确模式。

以下是数据外观的示例:

请注意,LENGTH函数甚至没有注册字符是否存在,因为它说有7个字符,而实际上有8个字符。

如有任何关于使用Snowflake SQL函数删除这些字符的建议,我们将不胜感激!

推荐答案

经过对Snowflake的广泛支持,我们最终决定创建我们自己的Java函数来清除非ASCII字符,包括这个unicode替换字符。

之所以具有挑战性,是因为Snowflake添加的Unicode替换字符本身似乎不是有效字符,因此很难删除。

下面的函数是我们发现的唯一可靠工作的函数。它也超级快:

CREATE OR REPLACE FUNCTION ADMIN.DESIGN.REPLACE_NON_ASCII("input" varchar, "replacement" varchar )
RETURNS varchar
LANGUAGE JavaScript
AS
$$

//This function is used to cleanse non ascii characters out of data included corrupt non-unicode characters

var output = "";
if (input == undefined){
    return input
}
else {
  for (var i=0; i<input.length; i++) {
      if (input.charCodeAt(i) >= 32 && input.charCodeAt(i) <= 127) {
          output += input.charAt(i);
      }
      else {
          output += replacement
      }
  }
  return output
}
$$

这篇关于如何从雪花中去除Unicode替换字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆