跳转到主要内容

问题

如何导入 JSON 数组,以及如何查询其中的对象?

答案

将这个单行 JSON 数组保存到 sample.json
查看数据:
创建一个用于接收 JSON 行的表:
插入数据:
查看数据推断如何处理 JSON 对象类型:
Events 是一个由 Tuple 组成的 Array,其中每个 Tuple 都包含 eventType String 字段和 time String 字段。后一种类型并不理想 (我们更希望它是 DateTime) 。 来看一下数据:
让我们执行几个查询: eventType 值为 close 的事件的 _idchannel
我们想查询 time,例如某个给定时间范围内的所有事件,但我们注意到它被导入成了 String
因此,要将这些值按日期处理,首先需要将其转换为 DateTime。 要转换数组,我们使用 map 函数:
通过对这两个数组都使用 toTypeName,我们可以看出它们的差异:
现在我们来获取 time 位于给定时间间隔内的那些行的 id 我们使用 arrayCount 来判断 map 函数返回的数组中,是否有数量大于 0 的项满足条件 x BETWEEN toDateTime('2021-06-18 11:46:00', 'Europe/Rome') AND toDateTime('2021-06-18 11:50:00', 'Europe/Rome')
⚠️ 请注意,在撰写本文时,当前的 JSON 实现仍处于 Experimental 阶段,不适合用于生产环境。 本示例重点展示了如何快速导入 JSON 并开始对其进行查询,同时也体现了一种权衡:为了使用方便,我们将 JSON 对象导入为 JSON 类型,无需预先指定 schema。这对于快速测试很方便;但如果要长期使用这些数据,则应像本例一样使用最合适的类型来存储数据。因此,对于 time 字段,应使用 DateTime 而不是 String,以避免如上所示的任何摄取后阶段转换。有关处理 JSON 的更多信息,请参阅文档
最后修改于 2026年7月3日