文章目录
- 创建嵌套类型的表
- 插入读取数据
- 在嵌套类型上使用数组函数
-
在 clickhouse 中存储嵌套类型的关键字是 Nested, 只支持一级嵌套。数据结构类似于在数据结构类似于在表的单元格里面嵌套“一张表格”,如下图所示:
-
嵌套类型是列存储,本质上是一个多维数组结构, 可以在嵌套字段上使用数组函数。
创建嵌套类型的表
CREATE TABLE mydb.student_grades
(ID UInt64,Name String,CourseScore Nested(course String,score Float64)
) ENGINE = MergeTree()
ORDER BY (ID, Name);
插入读取数据
insert into mydb.student_grades (ID, Name, `CourseScore.course`, `CourseScore.score`)
values (1, '浩轩', ['语文', '数学'], [95.1, 96]),(2, '语轩', ['语文', '数学'], [94.1, 97]);
查询:
SELECT * FROM mydb.student_grades where Name = '浩轩';####################################################
┌─ID─┬─Name─┬─CourseScore.course─┬─CourseScore.score─┐
│ 1 │ 浩轩 │ ['语文','数学'] │ [95.1,96] │
└────┴──────┴────────────────────┴───────────────────┘SELECT CourseScore.score FROM mydb.student_grades where Name = '浩轩';
#####################################
┌─CourseScore.score─┐
│ [95.1,96] │
└───────────────────┘
在嵌套类型上使用数组函数
计算每个人的平均分
SELECT t.Name, arrayReduce('avg', t.CourseScore.score)
FROM mydb.student_grades as t;#########################
┌─Name─┬─arrayReduce('avg', CourseScore.score)─┐
│ 浩轩 │ 95.55 │
│ 语轩 │ 95.55 │
└──────┴───────────────────────────────────────┘