如何从雪花中删除Unicode替换字符

时间:2020-02-25 21:33:01

标签: snowflake-cloud-data-platform

使用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,但无法找出正确的使用模式。

以下是数据的示例:

Unicode Replacement Character

请注意,LENGTH函数如何甚至不注册该字符,因为当它清楚地显示8个字符时,它说有7个字符。

对于使用哪种Snowflake SQL函数删除这些字符的任何建议,将不胜感激!

2 个答案:

答案 0 :(得分:0)

“ unicode替换字符”为service-b,因此应使用\uFFFD替换

''

答案 1 :(得分:0)

经过对Snowflake的广泛支持,我们最终决定创建自己的javascript函数以清除非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
}
$$