clickhouse常用函数

本文记录一些工作中实际用到的clickhouse函数场景,涉及array、tuple、json、date等函数,文章内容会持续更新

  • 生成最近30天日期

-- 今天是2023-02-16
select dateadd(today(), -1 * arrayJoin(range(30))) day

输出结果如下:

┌────────day─┐
│ 2023-02-16 │
│ 2023-02-15 │
│ 2023-02-14 │
......
│ 2023-01-19 │
│ 2023-01-18 │
└────────────┘
  • 生成从昨天0点开始的48小时内的时间

select
  arrayJoin(
    arrayMap(
      i -> (
        formatDateTime(addHours(yesterday(), i), '%m-%d %H:%M')
      ),
      range(48)
    )
  ) hours

输出结果如下:

┌─hours───────┐
│ 02-15 00:00 │
│ 02-15 01:00 │
│ 02-15 02:00 │
......
│ 02-16 22:00 │
│ 02-16 23:00 │
└─────────────┘
  • 将{"a": 1, "b": 2, "c": 3}格式的数据转换成只有2列的表格

SELECT tp.1 as k,tp.2 as v from (
    select arrayJoin(JSONExtractKeysAndValues('{"a": 1, "b": 2, "c": 3}', 'String')) as tp 
)

输出结果如下:

┌─k─┬─v─┐
│ a │ 1 │
│ b │ 2 │
│ c │ 3 │
└───┴───┘
  • 将[{"a":1,"b":2,"c":3},{"a":4,"b":5,"c":6},{"a":7,"b":8,"c":9}]格式的数据转换成只有a,b,c三列的表格

SELECT
  tp.1 as a,
  tp.2 as b,
  tp.3 as c
from
  (
    select
      arrayJoin(
        arrayMap(
          arr -> (
            JSONExtractString(arr, 'a'),
            JSONExtractString(arr, 'b'),
            JSONExtractString(arr, 'c')
          ),
          JSONExtract('[{"a":1,"b":2,"c":3},{"a":4,"b":5,"c":6},{"a":7,"b":8,"c":9}]', 'Array(String)')
        )
      ) as tp
  )

输出结果如下:

┌─a─┬─b─┬─c─┐
│ 1 │ 2 │ 3 │
│ 4 │ 5 │ 6 │
│ 7 │ 8 │ 9 │
└───┴───┴───┘
  • 将数据库中两个json数组类型的字段合并成含有2列的一张表,例如["2023-02-09","2023-02-10","2023-02-11","2023-02-12","2023-02-13","2023-02-14","2023-02-15","2023-02-16"]和[59,60,60,66,59,61,57,55]两个数组

select
  tp.1 as data_date,
  tp.2 as data
from
  (
    select
      arrayJoin(
        arrayZip(
          JSONExtract('["2023-02-09","2023-02-10","2023-02-11","2023-02-12","2023-02-13","2023-02-14","2023-02-15","2023-02-16"]', 'Array(String)'),
          JSONExtract('[59,60,60,66,59,61,57,55]', 'Array(Int)')
        )
      ) as tp
  )

输出结果如下:

┌─data_date──┬─data─┐
│ 2023-02-09 │   59 │
│ 2023-02-10 │   60 │
│ 2023-02-11 │   60 │
│ 2023-02-12 │   66 │
│ 2023-02-13 │   59 │
│ 2023-02-14 │   61 │
│ 2023-02-15 │   57 │
│ 2023-02-16 │   55 │
└────────────┴──────┘
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值