clickhouse 行列转换

摘要:
相关功能请参考官方网站:https://clickhouse.tech/docs/zh/sql-reference/functions/date-time-functions/行和列转换通常在行到列之间或从列到行之间发生变化。CREATETABLEdatasets.t_city(`province`String,`city`String,`创建时间`DateTime,`city_level `I
相关函数请参考官方网站:
https://clickhouse.tech/docs/zh/sql-reference/functions/date-time-functions/

行列转置一般由由行转为列,或者由列转为行。 CREATE TABLE datasets.t_city ( `province` String, `city` String, `createtime` DateTime, `city_level` Int8 ) ENGINE = MergeTree() ORDER BY province SETTINGS index_granularity = 8192; insert into t_city values('Hubei','Wuhan',now(),2),('Hubei','Xiangyang',now(),3),('Shanghai','Shanghai',now(),1),('Guangdong','Guangzhou',now(),1),('Guangdong','Shenzhen',now(),1),('Guangdong','DOngguan',now(),2),('Guangdong','Zhuhai',now(),3); Clickhouse> select * from t_city; SELECT * FROM t_city ┌─province──┬─city──────┬──────────createtime─┬─city_level─┐ │ Guangdong │ Guangzhou │ 2020-07-07 14:02:53 │ 1 │ │ Guangdong │ Shenzhen │ 2020-07-07 14:02:53 │ 1 │ │ Guangdong │ DOngguan │ 2020-07-07 14:02:53 │ 2 │ │ Guangdong │ Zhuhai │ 2020-07-07 14:02:53 │ 3 │ │ Hubei │ Wuhan │ 2020-07-07 14:02:53 │ 2 │ │ Hubei │ Xiangyang │ 2020-07-07 14:02:53 │ 3 │ │ Shanghai │ Shanghai │ 2020-07-07 14:02:53 │ 1 │ └───────────┴───────────┴─────────────────────┴────────────┘ 7 rows in set. Elapsed: 0.002 sec. 列转行: 查询每个省份用户的城市: Clickhouse> select province, groupArray(city) from t_city group by province; SELECT province, groupArray(city) FROM t_city GROUP BY province ┌─province──┬─groupArray(city)─────────────────────────────┐ │ Shanghai │ ['Shanghai'] │ │ Hubei │ ['Wuhan','Xiangyang'] │ │ Guangdong │ ['Guangzhou','Shenzhen','Dongguan','Zhuhai'] │ └───────────┴──────────────────────────────────────────────┘ 插入一条重复的记录: insert into t_city values('Hubei','Wuhan',now(),2); 可以看到Hubei有一个重复的wuhan Clickhouse> select province, groupArray(city) from t_city group by province; SELECT province, groupArray(city) FROM t_city GROUP BY province ┌─province──┬─groupArray(city)─────────────────────────────┐ │ Shanghai │ ['Shanghai'] │ │ Hubei │ ['Wuhan','Xiangyang','Wuhan'] │ │ Guangdong │ ['Guangzhou','Shenzhen','Dongguan','Zhuhai'] │ └───────────┴──────────────────────────────────────────────┘ 3 rows in set. Elapsed: 0.002 sec. 可以使用函数groupUniqArray进行去重: Clickhouse> select province, groupUniqArray(city) from t_city group by province; SELECT province, groupUniqArray(city) FROM t_city GROUP BY province ┌─province──┬─groupUniqArray(city)─────────────────────────┐ │ Shanghai │ ['Shanghai'] │ │ Hubei │ ['Wuhan','Xiangyang'] │ │ Guangdong │ ['Zhuhai','Dongguan','Guangzhou','Shenzhen'] │ └───────────┴──────────────────────────────────────────────┘ 3 rows in set. Elapsed: 0.003 sec. 字符串拆分: Clickhouse> select splitByChar('#','Hubei_Wuhan#Hubei_Xiangyang#Guangdong_Shenzhen') col; SELECT splitByChar('#', 'Hubei_Wuhan#Hubei_Xiangyang#Guangdong_Shenzhen') AS col ┌─col────────────────────────────────────────────────────┐ │ ['Hubei_Wuhan','Hubei_Xiangyang','Guangdong_Shenzhen'] │ └────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.002 sec. 可以使用ArrayJoin 函数将一行转为行: Clickhouse> select arrayJoin(splitByChar('#', 'Hubei_Wuhan#Hubei_Xiangyang#Guangdong_Shenzhen')) col; SELECT arrayJoin(splitByChar('#', 'Hubei_Wuhan#Hubei_Xiangyang#Guangdong_Shenzhen')) AS col ┌─col────────────────┐ │ Hubei_Wuhan │ │ Hubei_Xiangyang │ │ Guangdong_Shenzhen │ └────────────────────┘ 3 rows in set. Elapsed: 0.002 sec. 实际示例: SELECT province, groupArray(city) FROM t_city GROUP BY province ┌─province──┬─groupArray(city)─────────────────────────────┐ │ Shanghai │ ['Shanghai'] │ │ Hubei │ ['Wuhan','Xiangyang','Wuhan'] │ │ Guangdong │ ['Guangzhou','Shenzhen','Dongguan','Zhuhai'] │ └───────────┴──────────────────────────────────────────────┘ 3 rows in set. Elapsed: 0.003 sec. Clickhouse> SELECT province, arrayJoin(groupArray(city)) new_city FROM t_city GROUP BY province; SELECT province, arrayJoin(groupArray(city)) AS new_city FROM t_city GROUP BY province ┌─province──┬─new_city──┐ │ Shanghai │ Shanghai │ │ Hubei │ Wuhan │ │ Hubei │ Xiangyang │ │ Hubei │ Wuhan │ │ Guangdong │ Guangzhou │ │ Guangdong │ Shenzhen │ │ Guangdong │ Dongguan │ │ Guangdong │ Zhuhai │ └───────────┴───────────┘ 8 rows in set. Elapsed: 0.003 sec. 结论:在clickhouse中主要使用两个函数groupArray 和ArrayJoin。

  

免责声明:文章转载自《clickhouse 行列转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vs2019使用vld检测内存泄漏Latex中为作者添加多个单位属性(IEEE模板)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

修改Jenkins用户的密码

说明:本方法仅适用于jdk6+、tomcat6+和Jenkins专有用户数据库的Jenkins!很多童鞋在使用jenkins的时候忘记密码了,然后各种蛋疼。登陆上Jenkins服务器,进入到Jenkins。Jenkins专有用户的数据存放在JENKINS_HOME/users目录。然后输入用户名,密码111111然后就进去了.Jenkins关闭和重启详细介绍...

如何查看Oracle,MySQL,SQLServer三大数据库的事务隔离级别

1:mysql的事务隔离级别查看方法mysql最简单,执行这条语句就行:select@@tx_isolation详情:1.查看当前会话隔离级别select@@tx_isolation;2.查看系统当前隔离级别select@@global.tx_isolation;3.设置当前会话隔离级别setsessiontransactionisolatinlevelre...

Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器;一种是使用QTimer类。当定时器触发时,应用程序会发送一个QTimerEvent。与定时器相关的成员函数有:startTimer()、timeEvent()、killTimer()。virtualvoidQObject::timerEvent;虚函数timerEvent()被重载来实现用户的...

VSCode, 当今最流行的免费开源代码编辑器,微软出品,必属精品

Visual Studio代码是一个轻量级但功能强大的源代码编辑器,可以在桌面上运行,可以用于Windows、MacOS和Linux。直接在编辑器中检查差异,暂时保存文件并提交。Visual Studio代码产品在初始操作中的内部代码控制可以通过编辑器内的SCM支持(包括丰富的Git集成)加快发布周期。用户界面-介绍VSCode编辑器的基本UI、命令和功能。...

flutter Radio单选框

单选框,允许用户从一组中选择一个选项。...

flutter vscode+第三方安卓模拟器

1.首先打开夜曲模拟器2.Win+R,选择cmd,在第三方模拟器安装目录的bin目录下输入夜曲模拟器,然后运行命令:nox_Adb.execonnect127.0.0.1:620013。打开项目终端的vscode并建立连接:adbconnect127.00.1:62001(夜神模拟器的默认端口)4。查看连接:adbdevices或不使用第三方模拟器:1.打开...