Snowflake cloud data platform 如何从Snowflake中删除Unicode替换字符

Snowflake cloud data platform 如何从Snowflake中删除Unicode替换字符,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,使用COPY-INTO命令将数据加载到Snowflake时,有一个名为:REPLACE\u INVALID\u CHARACTERS的参数。根据文档,如果设置为TRUE,则任何无效的UTF-8字符都将替换为Unicode替换字符,如下所示(�) 我的问题是,如何从表中的数据中删除此字符?我曾尝试使用REGEXP_REPLACE,但无法找到正确的使用模式 以下是数据的示例: 请注意,LENGTH函数甚至没有注册字符在那里,因为它说有7个字符,而实际上有8个 非常感谢您提供有关使用哪个Snowf

使用COPY-INTO命令将数据加载到Snowflake时,有一个名为:REPLACE\u INVALID\u CHARACTERS的参数。根据文档,如果设置为TRUE,则任何无效的UTF-8字符都将替换为Unicode替换字符,如下所示(�)

我的问题是,如何从表中的数据中删除此字符?我曾尝试使用REGEXP_REPLACE,但无法找到正确的使用模式

以下是数据的示例:

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

非常感谢您提供有关使用哪个Snowflake SQL函数来删除这些字符的任何建议!

unicode替换字符是
\uFFFD
,因此将其替换为
'
应该可以

select replace('asdf�', '\uFFFD', '');
--Returns: asdf

在使用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
}
$$
创建或替换函数ADMIN.DESIGN.REPLACE_非ASCII(“输入”varchar,“替换”varchar)
返回varchar
语言JavaScript
作为
$$
//此函数用于从包含损坏的非unicode字符的数据中清除非ascii字符
var输出=”;
如果(输入==未定义){
返回输入
}
否则{
对于(var i=0;i=32&&input.charCodeAt(i),您是否尝试了
REPLACE(例如,UNICODE(65533))
?应该可以工作,但我目前无法测试该理论。