Snowflake cloud data platform Snowflake中是否有查询来识别文件中无效utf8的字符

Snowflake cloud data platform Snowflake中是否有查询来识别文件中无效utf8的字符,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有一个文件,当加载到Snowflake时,由于无效的UTF-8字符而出现错误,我通过使用选项encoding='iso-8859-1'创建一个文件格式,设法使用另一种编码将其加载到表中,但我想找到一种方法来查询这些字符 我尝试了使用二进制(col,'UTF-8')函数,希望它在具有无效UTF-8但无法获得有效结果以捕获这些字符的col上失败,有人遇到过同样的问题吗?这里有详细的答案 请将我的问题标记为重复并参考链接。请注意,雪花中的所有字符数据都是使用UTF-8编码的。没有其他选择。不久前,这

我有一个文件,当加载到Snowflake时,由于无效的UTF-8字符而出现错误,我通过使用选项
encoding='iso-8859-1'
创建一个文件格式,设法使用另一种编码将其加载到表中,但我想找到一种方法来查询这些字符


我尝试了
使用二进制(col,'UTF-8')
函数,希望它在具有无效UTF-8但无法获得有效结果以捕获这些字符的col上失败,有人遇到过同样的问题吗?

这里有详细的答案


请将我的问题标记为重复并参考链接。

请注意,雪花中的所有字符数据都是使用UTF-8编码的。没有其他选择。不久前,这并不是严格正确的,而且雪花中可能有无效UTF-8的字符数据。但这在现在是不可能的

指定
ENCODING='iso-8859-1'
选项指示Snowflake(在复制到操作期间)对文件执行字符集转换(然后解释为在iso-8859-1中编码),将所有字符映射到写入Snowflake时的UTF-8等效字符。因此,Snowflake中的所有数据都是UTF-8编码的,因此不应该发现任何非UTF-8字符。也就是说,如果底层(源)文件没有使用您在复制到过程中指定的编码(在本例中为ISO-8859-1)进行真正编码,则字符集转换的结果可能不会最终转换为正确/预期的UTF-8字符


鉴于此,您在这里试图解决的最终问题是什么?您加载的源文件是否使用
编码='iso-8859-1'
而实际上不是iso-8859-1?或者您是说源文件确实编码为ISO-8859-1,但雪花中的结果字符(1)不正确或(2)无效UTF-8?或者您正在尝试确定源文件的实际编码(完全忽略整个ISO-8859-1方面)?

看看这个答案谢谢@NickW nice find,我在搜索时没有得到这个结果!感谢@darren为您添加的完整解释。该文件确实是ISO-8859-1,我加载了它,认为它将保留编码,但正如您在这里提到的,它将被翻译成UTF-8,现在更有意义了。但在另一个文件中,我发现它是编码的UTF-8,我得到了无效的UTF-8,在记事本++中,使用show all characters,我找到了一些类似xA0的字符,所以我必须使用相同的ISO-8859-1编码加载它,并加载文件中的所有行,这意味着它们也被转换为UTF-8吗?您使用的是哪种操作系统?如果是Linux,如果您不知道生成文件时使用了什么编码,则可以使用本文()所述的特殊技术来“确定”(不是100%,但通常非常接近)文件的编码。其他操作系统对此有自己的技术(如果您没有Linux)。我建议验证第二个文件,看看它是否确实是UTF-8或其他编码。如果它确实是UTF-8,并且在加载到Snowflake时字符没有保留,我建议您打开一个支持Snowflake的案例,因为这永远不会发生。我使用的是WindowsOS,它也是使用WindowsOS生成的,谢谢你的提示。对于我们的POC来说,这是一个快速的一次性加载,因此没有花时间彻底验证文件,因为我关心的是加载所有行。也许,下次我会验证编码并按照您的建议打开一个案例,如果我认为它确实是UTF-8的话