在 Snowflake 中将空字符串视为 NULL

问题描述 投票:0回答:2

我正在处理一个迁移项目,我们的数据库将从 Oracle 12c 更改为 Snowflake。

目前有许多 IICS (Informatica) 集成将数据从不同的源系统加载到 Oracle 中,当它从源系统中提取空字符串时,它会在 Oracle 中被视为 NULL 并加载。

在数据库迁移的测试阶段,我们观察到空字符串在Snowflake中被视为空字符串本身,这导致在下游进行Oracle和Snowflake数据协调时出现大量数据比较问题以及其他问题。

有没有办法可以处理这种情况,其中我们可以强制 Snowflake 或 IICS 将空字符串视为 NULL ?有集成级别的函数可以检查每个字段的长度并执行验证,但我们正在讨论数百个此类集成。我正在寻找一个全局设置,可以通过最少的代码更改应用于所有集成或解决方案。任何想法、建议或想法都将不胜感激。

snowflake-cloud-data-platform informatica informatica-cloud
2个回答
0
投票

我不确定您如何将数据加载到雪花中,但我认为最好的选择是让加载过程将空字符串转换为 null。这是我真正能想到的唯一选择,您不必在每列中指定。

例如,在 COPY INTO 语句(以及扩展 PIPE)中,您可以对文件格式使用 EMPTY_FIELD_AS_NULL 选项。 请参阅此处的格式选项


0
投票

COPY INTO 命令中有两个相关选项:

  1. NULL_IF = ('', 'null', 'NULL') - 默认为 '\N'。从 Snowflake 卸载数据(以防您稍后将其上传到 Oracle)或将数据加载到 Snowflake 时。我这里的示例所做的是将任何空字符串以及“null”或“NULL”值(加载时来自文件,或卸载时来自表)替换为实际的 SQL NULL。

  2. EMPTY_FIELD_AS_NULL = TRUE - 默认为 TRUE。当将数据加载到 Snowflake 时,当设置该选项时,像“,,”这样的字段(假设逗号作为字段分隔符)将作为 SQL NULL 插入加载表中。卸载时,与FIELD_OPTIONALLY_ENCLOSED_BY一起使用,以区分空字符串和NULL。

© www.soinside.com 2019 - 2024. All rights reserved.