跳转到主要内容

问题

如果某一列使用 Map 类型存储了不同的属性,该如何将它们提取出来并在查询中使用?

答案

这是一个基础示例,演示如何从可变的 attributes 字段中提取键和值。 这种方法看起来会将源/原始表中的每一行拆分成看似重复的多条记录。不过,由于提取出了键和值,因此可以将它们放入主键中,或放入带有索引的辅助列中,例如 bloom filter。 在这个示例中,基本上有一个会创建指标表的数据源,其中的 attributes 字段包含多个 Map 类型的属性。如果某些属性在记录中始终存在,最好将它们提取到各自的列中并进行填充。 你应该可以直接复制粘贴,查看输出结果,以及 materialized view 在这个场景中的作用。 创建一个示例数据库:
创建包含这些行和属性的初始表:
向表中插入示例数据行。示例数据量特意保持较小,这样在创建 materialized view 时,你就能看到每个属性如何使行数成倍增加。
然后,我们可以使用 array join 创建一个 materialized view,以便将 map 属性提取到键列和值列中。 为了演示,在下面的示例中,使用的是隐式表 (带有 POPULATE 命令,底层表类似 .inner.{uuid}...) 。 不过,推荐的最佳实践是使用显式表:先定义表,再通过 TO 命令在其之上创建 materialized view。
新表将包含更多行,并提取出这些键,如下所示:
接下来,如需查询具有特定属性的行,可以这样做:
最后修改于 2026年6月19日