从DB2 (en_US排序规则)切换到Snowflake(默认排序规则为UTF-8)是一个好主意吗?



在我工作的公司,他们即将从传统DB2数据库迁移到Snowflake。

Database Configuration for Database DWPROD
Database territory                                      = US
Database code page                                      = 819
Database code set                                       = ISO8859-1
LANG=en_US

默认情况下已配置目标数据库,即UTF-8排序。在将数据加载到Snowlake之前,已经需要修剪所有文本列,因为尾随空格会导致某些连接出现问题。(在DB2端,collation负责处理它)我现在已经意识到排序的另一个明显问题:
Snowflake使用UTF-8对大写字母进行排序,然后才是小写字母(先A-Z,再A-Z)。另一方面,DB2对a、a在b之前、b等等进行排序。

我正试图找到更多的例子来说明什么可能会出错,这样我就可以展示它们来阻止这种疯狂。

我已经收集了上面列出的问题的例子。我期待(梦想着)从有经验的人那里得到一些答案,他们在整理、unicode方面有很多经验。有些人可能会说,这是关于基本的东西。但如今,似乎每个人都忽略了这一点。在这里分享一些迁移失败或需要重做的故事也会很好。

了解在Snowflake上使用非默认排序规则的限制是很重要的:

https://docs.snowflake.com/en/sql-reference/collation.html collation-limitations

对我个人来说,对udf的限制是避免更改默认排序规则的充分理由。有时根本没有UDF的替代品,当您需要一个UDF,却不能将其用于非默认排序时,这就会出现问题。字符串限制从16 Mb减少到8 Mb,并且不支持数组、对象和变体中的排序字符串也是一个主要考虑因素。

您可以使用trim()和ililike来代替like来处理大小写敏感性和尾随/前导空格。对于排序,您可能需要有一个上下列,这是一种在数据库中处理区分大小写比较的古老方法。

最新更新