snowflake-cloud-data-platform - 变体列不存储具有 NaN 值的元素
问题描述
我正在加载两个镶木地板文件,每个文件都有 1 行到雪花表中的一个变体列中。当我使用 python 读取这两个文件并打印字段时,我看到相同数量的字段(在本例中为 30 个)。当我将这两个镶木地板文件加载到一个变体数据类型列到雪花上的一个表中并查询该表时,我只看到一个文件中的 29 个字段和另一个文件中的 30 个字段。
当我查看这个缺失字段的 python 输出时,我看到一个文件有一个值(在这种情况下为 13),而另一个文件的值为 NaN。
出于某种原因,Snowflake 没有显示具有空值的字段。
在加载到雪花中时我是否需要做一些不同的事情,以免忽略镶木地板文件中没有价值的字段。
解决方案
加载到 Snowflake 中的 Parquet 文件会忽略null
字段(或NaN
在 Parquet 文件中同等对待),并且不提供使用表示中的值投影它们的选项。这是当前半结构化文件加载的预期行为。null
VARIANT
但是,半结构化数据查询行为允许跨行查找不存在的字段名称,NULL
当在任何行中都找不到该字段时返回。
这是一个示例,其中两行缺少一个字段,因为NaN
snull
在源 Parquet 文件中被视为s:
> SELECT V FROM PRQ;
+-------------------------------+
| V |
|-------------------------------|
| { |
| "a": 1.00, |
| "b": "foo" |
| } |
| { |
| "a": 2.00, |
| "b": "bar" |
| } |
| { |
| "a": 3.00, |
| "b": "spam" |
| } |
| { |
| "b": "eggs" [a is missing] |
| } |
| { |
| "b": "ham" [a is missing] |
| } |
+-------------------------------+
由于查询V:a
将在最后两行发出空值,因此您可以利用IFNULL
重新添加NaN
s (如果数据不能真正是null
):
> SELECT V:b, IFNULL(V:a, 'NaN') FROM PRQ;
+--------+--------------------+
| V:B | IFNULL(V:A, 'NAN') |
|--------+--------------------|
| "foo" | 1 |
| "bar" | 2 |
| "spam" | 3 |
| "eggs" | NaN |
| "ham" | NaN |
+--------+--------------------+
推荐阅读
- jquery - 当我不注入任何文档时,将 SVG 解析为 XML 或 HTML 有什么好处吗?
- java - 如何从 android 项目更改 Firebase 帐户
- java - SonarQube - Java - 强制局部变量有效地最终
- sulu - 如何通过 twig 模板或 twig 扩展中的 url 获取页面内容?
- google-app-engine - 保护服务之间的通信
- python - 如何在 Shapely 中获取 LineString 的端点
- python - 查找单词的子集 - python itertools pandas
- typescript - 类型为字符串时引用 SomeInterface 中的字段 | 打字稿中的一些接口
- c - 在 C 中存储来自 netsh 的 DNS 服务器
- git - GIT如何在文件中注入提交信息,以便在推送到远程期间/之后?