【发布时间】:2012-10-27 01:40:46
【问题描述】:
来自 BigQuery 的 import 文档,
注意:不允许空值
所以我假设 null 在用于 BigQuery 导入的 json 格式数据中是不允许的。但是,null 值实际上在常规 ETL 任务中非常常见(由于缺少数据)。导入此类 json 源文件应该是什么好的解决方案?请注意,我的数据包含嵌套结构,因此我不喜欢转换为 CSV 并使用 ,, 来表示 null 值。
我认为我可以做的一种方法是将所有 null 值分别替换为不同数据类型的默认值,例如,
- 字符串:
null-> 空字符串 - 整数:
null-> -1 - 浮动:
null-> -1.0 - ...
但我不喜欢它。我正在寻找更好的选择。
顺便说一句,我尝试使用包含 null 值的 json 文件来执行 bq load。我收到以下错误:
Failure details:
- Expected '"' found 'n'
- Expected '"' found 'n'
- Expected '"' found 'n'
- Expected '"' found 'n'
- Expected '"' found 'n
...
我认为这是null用法的指示,对吗?
编辑:如果我删除所有null 字段,它似乎工作。我想这是处理null 数据的方法。您不能将 null 用于数据字段,但您可以不包含它。所以我需要一个过滤代码来删除我原始json中的所有null字段。
【问题讨论】:
-
JSON 语法中允许使用 NULL。不同的 JSON 包使用不同的软件结构来表示 NULL——要么是显式的 NULL 对象,要么是类似空数组的东西。但你引用的信息很少告诉我们。
-
但是注意JSON只是一种数据格式——它不描述语义,数据的语义必须得到“对话”两端的同意。如果 NULL 不在约定的语义中,则 JSON 与它无关。 “BigQuery”文档定义了一些相当受限的语义。
-
是的,这可能是 BigQuery 导入的限制。我只是想知道是否有任何聪明的方法可以避免限制。
-
您可以使用某些东西(例如,一个空数组)作为“替身”。不过,我真的不知道 BigQuery 在做什么,也不知道你在用它做什么——你必须看看你对它的使用,看看你可以玩什么花样。
-
(请注意,在 JSON 中,不要求特定数据项是特定类型。例如,“phone_number”可以是字符一次,下一次是整数,以及一个数组(或即使是“object”)第三次。因此,要表示“null”整数,您不必使用整数值。
标签: json null google-bigquery data-import