首页 > 其他分享 >关于ClickHouse的一些小技巧

关于ClickHouse的一些小技巧

时间:2024-03-17 22:33:08浏览次数:22  
标签:Int32 projection Dimension1 joined T1 关于 id ClickHouse 技巧

关于ClickHouse的一些小技巧

设置变量

set param_name='Alex';
select {name:String};

projection的使用

基于projection(投影)的优化需要打开开关optimize_use_projections。ClickHouse里的projection是物化的,也就是说数据会复制存一份。
Projection对于不同的排序的查询的效率提升很有帮助,特别是行数很大的表。因为如果有一个projection的order by的设定跟查询的order by一样,则可以直接读取projection而不用排序数据。

在2亿行数据的大宽表variant_simulate._joined_events上做实验。

按照_Dimension1_T1排序,查询语句为:

select _Dimension1_T1 from  _joined_events order by _Dimension1_T1 format Null

时间是4秒。

Query id: 056df638-72b4-486f-b18a-94507ef2ecf7

Ok.

0 rows in set. Elapsed: 4.218 sec. Peak memory: 3.38 GiB. Processed 200.00 million rows, 1.80 GB (47.42 million rows/s., 426.78 MB/s.)
Peak memory usage: 1.70 GiB.

添加projection投影,命名为_dimension1_t1_proj,并物化它,再执行同一个查询。

alter table _joined_events
add projection _dimension1_t1_proj (
        select _Dimension1_T1
        from _joined_events
        order by _Dimension1_T1
    );
    
alter table _joined_events materialize projection _dimension1_t1_proj;

查询及执行结果为:

select _Dimension1_T1 from  _joined_events order by _Dimension1_T1 format Null

0 rows in set. Elapsed: 1.874 sec. Peak memory: 3.38 GiB. Processed 200.00 million rows, 1.80 GB (106.73 million rows/s., 960.61 MB/s.)
Peak memory usage: 14.95 MiB.

时间是1.8秒。快了2倍不止。

Regexp

用过正则表达式的方式解析数据。

示例

从原始文本数据文件中解析并提取数据,并存为TSV文件。

得到原始数据文件:

wget http://noaa-ghcn-pds.s3.amazonaws.com/ghcnd-stations.txt

执行SQL查询解析JSON数据,正则表达式为'^(.{11})\s+(\-?\d{1,2}\.\d{4})\s+(\-?\d{1,3}\.\d{1,4})\s+(\-?\d*\.\d*)\s+(.*?)\s{2,}.*$'

clickhouse-local --query "WITH stations AS (SELECT id, lat, lon, elevation, name FROM file('ghcnd-stations.txt', Regexp, 'id String, lat Float64, lon Float64, elevation Float32, name String'))
SELECT station_id,
       date,
       tempAvg,
       tempMax,
       tempMin,
       precipitation,
       snowfall,
       snowDepth,
       percentDailySun,
       averageWindSpeed,
       maxWindSpeed,
       weatherType,
       tuple(lon, lat) as location,
       elevation,
       name
FROM file('noaa.tsv', TSV,
          'station_id String, date Date32, tempAvg Int32, tempMax Int32, tempMin Int32, precipitation Int32, snowfall Int32, snowDepth Int32, percentDailySun Int8, averageWindSpeed Int32, maxWindSpeed Int32, weatherType UInt8') as noaa LEFT OUTER
         JOIN stations ON noaa.station_id = stations.id FORMAT TSV SETTINGS format_regexp='^(.{11})\s+(\-?\d{1,2}\.\d{4})\s+(\-?\d{1,3}\.\d{1,4})\s+(\-?\d*\.\d*)\s+(.*?)\s{2,}.*$'" > noaa_enriched.tsv

标签:Int32,projection,Dimension1,joined,T1,关于,id,ClickHouse,技巧
From: https://www.cnblogs.com/chengxin1985/p/18079336

相关文章

  • 关于进程同步与互斥的一些概念(锁、cas、futex)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  最近为了实现在androidlinuxkernel上,是的bionicc和glibc的sem_相关的信号量接口能够相互调用的功能(例如:用bioniccwait,用glibcawake),......
  • 图的匹配与网络流技巧总结
    1.拆点1.1入点和出点P2764最小路径覆盖问题考虑建图,将一个点\(i\)的出点拆成\(u_i\),如入点拆成\(v_i\),一条边\((x,y)\)等价于连一条\(u_x\)到\(v_y\)的边。显然这是个二分图,不难发现这个二分图的最大匹配与一种路径覆盖一一映射,所以答案就是总点数减去最大匹配。......
  • sessionInfo()使用技巧--是否事先library()的影响
    在没有使用对应R包的状态下使用命令sessionInfo(),不会显示该R包信息在使用对应R包的状态下使用命令sessionInfo(),会显示该R包及其关联R包的版本状态未library(ggplot2)时:sessionInfo()library(ggplot2)时:library(ggplot2)sessionInfo()......
  • 【经验】关于c++11中string类型字符串和整形相互转化的用法
    https://blog.csdn.net/Elephant_King/article/details/129225134 c++11中为我们提供了许多非常方便的函数,可以帮助我们在整形与string类型字符串进行转换关于Dev-c++如何使用c++11,因为本人是mac系统,使用cLion,无法安装Dev,可以在网上搜其他教程实现整形转字符串(to_string())to_s......
  • 关于Android studio无法勾选SDK的问题
    这是我遇到的问题,相信也是大多数人遇到的问题,我的经历是之前下载过一次Androidstudio,用过一段时间后虚拟机出问题了,一直连不上,我都是用手机代替运行,发现太麻烦了,还是决定重新一遍,于是我重新安装了Androidstudio。发现这个地方是无法勾选的,于是我试了好多方法补充:大家没必要去专......
  • msyql 中的一些知识技巧
    1、时间增加或减少。DATE_SUB(CURRENT_DATE,INTERVAL7day)DATE_add(CURRENT_DATE,INTERVAL7day)2、取第一条数据不能通过orderby加groupby取最新的一条。只有通过两个表连接才能实现。3、空字符串和空值同时去掉空格和空whereISNULL(name)=0andLENGTH(trim(nam......
  • Android开发笔记[10]-关于页
    摘要构建关于页、最终用户许可页(EULA)页和隐私协议页;Compose页面中嵌入xml布局;Compose页面中添加markdown文本.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk......
  • YOLOv9改进项目|关于本周更新计划的说明24/3/12
     目前售价售价59.9,改进点30个 专栏地址:专栏介绍:YOLOv9改进系列|包含深度学习最新创新,助力高效涨点!!!日期:24/3/12本周更新计划说明:        1. 更新华为GoldYOLO中的GD机制        2. 更新Bifpn加权双向特征融合     3. 更新去除辅......
  • 关于nvim插件telescope-fzf-native在windows下未构建的问题解决
    关于nvim插件telescope-fzf-native在windows下未构建的问题解决首先进入文件夹(没有就自己创建注意文件夹名就是telescope-fzf-native.nvim)C:\Users\...\AppData\Local\nvim-data\site\pack\packer\start\telescope-fzf-native.nvim进入此路径的powershell或者cmd命令行,执行......
  • 关于安装Ubuntu/Arch wsl的error:0xffffffff报错
    运行Arch/Ubuntuwsl时报错//报错如下WslRegisterDistributionfailedwitherror:0xffffffffError:0xffffffff(null)原因:53端口被占用解决方法:win+r打开运行窗口输入resmon.exe回车。找到侦听窗口栏,查看占用53端口的PID。ctrl+shift+Esc打开任务管理器。在搜索栏......