【问题标题】:How to remove Unicode replacement character from Snowflake如何从雪花中删除 Unicode 替换字符
【发布时间】:2020-02-25 21:33:01
【问题描述】:

使用 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 函数来删除这些字符的建议将不胜感激!

【问题讨论】:

  • 你试过REPLACE(EXAMPLE,UNICODE(65533))吗?应该可行,但我目前无法测试该理论。

标签: snowflake-cloud-data-platform


【解决方案1】:

“unicode 替换字符”是 \uFFFD,所以用 '' 替换它应该可以工作

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

【讨论】:

    【解决方案2】:

    在反复支持 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
    }
    $$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-26
      • 2019-12-25
      • 2021-10-19
      • 2021-06-10
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多