跳转到主要内容

Nested(name1 Type1, Name2 Type2, …)

嵌套数据结构就像单元格中的一张表。嵌套数据结构的参数——列名和类型——其指定方式与 CREATE TABLE 查询中的写法相同。表中的每一行都可以对应嵌套数据结构中的任意多行。
避免在列名中使用点号flatten_nested = 1 (默认值) 时,包含点号的列名、具有相同点号前缀的列,以及 Array 类型的列,都可能被解释为扁平化 Nested 结构的一部分。这可能导致在插入时出现意外的数组长度校验,以及重命名限制。如无必要,请避免在列名中使用点号。 除非你确实需要 Nested 语义,否则请在列名中使用下划线 (_) 或其他分隔符来代替点号。
示例:
此示例声明了 Goals 嵌套数据结构,其中包含有关转化 (已达成目标) 的数据。visits 表中的每一行都可以对应零个或任意多个转化。 flatten_nested 设置为 0 时 (默认并非如此) ,支持任意层级的嵌套。 在大多数情况下,使用嵌套数据结构时,其列通过以点分隔的列名来指定。这些列构成一个类型对应的数组。单个嵌套数据结构中的所有列数组长度都相同。 示例:
将嵌套数据结构理解为一组由多个等长列数组组成的集合,是最简单的方式。 在 SELECT 查询中,唯一可以指定整个嵌套数据结构名称而非单独列名的地方是 ARRAY JOIN 子句。更多信息,请参见 “ARRAY JOIN 子句”。示例:
你不能对整个嵌套数据结构执行 SELECT。只能显式列出其中的各个列。 对于 INSERT 查询,你应分别传递嵌套数据结构中各个组成列的数组 (就像它们是独立的列数组一样) 。插入时,系统会检查它们的长度是否一致。 对于 DESCRIBE 查询,嵌套数据结构中的列也会以同样的方式分别列出。 对嵌套数据结构中元素执行 ALTER 查询时存在一些限制。
最后修改于 2026年6月19日