【问题标题】:Is switching from DB2 (en_US collation) to Snowflake (with default collation UTF-8) a good idea?从 DB2(en_US 归类)切换到 Snowflake(默认归类 UTF-8)是个好主意吗?
【发布时间】:2022-11-21 22:49:21
【问题描述】:

在我工作的公司,他们即将从遗留的 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 方面,整理负责处理它) 我现在已经意识到另一个明显的排序问题:
使用 UTF-8 的 Snowflake 在小写字母之前对大写字母进行排序(首先是 A-Z,然后是 a-z)。另一方面,DB2 在 b、B 等之前对 a、A 进行排序。

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

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

【问题讨论】:

    标签: database snowflake-cloud-data-platform collation


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2014-05-21
      • 2016-06-20
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多