使用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函数如何甚至不注册该字符,因为当它清楚地显示8个字符时,它说有7个字符。
对于使用哪种Snowflake SQL函数删除这些字符的任何建议,将不胜感激!
答案 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
}
$$