我们针对array_distinct()、array_except()和 的解决方法reverse()更加复杂:
为了将数组减少为仅包含不同项,我们将数组展平,然后执行select distinct,然后将array_agg()其回卷为数组。
为了获取数组 A 中不在数组 B 中的值,我们展平数 美国电报号码数据库 组 A,用于array_contains()检查数组 B 中数组 A 的每个(展平的)元素,在array_contains()返回的位置进行过滤false,然后用于array_agg()将任何剩余的数组 A 元素汇总到数组中。
我们编写了一个 dbt 宏来复制reverse()功能(参数max_size是数组预期的最大元素数)
日期和时间戳
每个数据库处理日期和时间戳的方式都不同,这个也不例外。
Snowflake 对日期和时间戳的处理方式还有进一步的细微差别:
Snowflake 有多种时间戳变体,以不同的方式编码时区信息。我们团队的口号之一是“时区是最糟糕的”,我们尽可能默认使用(“无时区”)。这也是 Snowflake一般timestamp_ntz使用时的默认变体。timestamp
日期/时间戳算术函数中的参数顺序不同!这让我们犯了好几次错误,这就是为什么数据比较检查对于发现这些问题如此重要:
在 Snowflake 中运行良好,但我们更喜欢使用timestamp_value::date。
将日期/时间戳格式化为字符串?虽然 DBX 的date_format()相当于 Snowflake 的to_char(),但符号YYYY-MM-DD不同。这是 Snowflake 的符号列表。