记录在项目中使用clickhouse高阶函数

clickhouse 高阶函数记录

clickhouse 高阶函数运用

  1. 查看clickhouse版本

    select version();

  2. 查看数组函数;

    select * from system.functions where name like ‘%arr%’;

  3. 查看和数组间接相关的函数:

    select * from system.functions where lower(name) like ‘%arr%’;

Clickhouse 数组函数 高阶函数_vkingnew的博客-CSDN博客_clickhouse数组函数


  1. 需求1: 对uuid 进行排序,然后上下2条的时间进行相减运算,然后求和该需求是特殊的,因为在保存数据的时候,2条相近的数据是一组,用uuid区分;

    用到以下高阶数组

  2. 需求: 对查出来的数据进行排序,分组,然后22相减,然后求和; 该sql可以应对大部分日常需求

    用到以下高阶数组

ClickHouse 数组的相关操作函数,一网打尽

记录使用过的函数

  1. 时间函数

    • toTimeZone

      将Date或DateTime转换为指定的时区。 时区是Date/DateTime类型的属性。 表字段或结果集的列的内部值(秒数)不会更改,列的类型会更改,并且其字符串表示形式也会相应更改。

      `SELECT
          toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,
          toTypeName(time_utc) AS type_utc,
          toInt32(time_utc) AS int32utc,
          toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,
          toTypeName(time_yekat) AS type_yekat,
          toInt32(time_yekat) AS int32yekat,
          toTimeZone(time_utc, 'US/Samoa') AS time_samoa,
          toTypeName(time_samoa) AS type_samoa,
          toInt32(time_samoa) AS int32samoa
      FORMAT Vertical;`
      
      `Row 1:
      ──────
      time_utc:   2019-01-01 00:00:00
      type_utc:   DateTime('UTC')
      int32utc:   1546300800
      time_yekat: 2019-01-01 05:00:00
      type_yekat: DateTime('Asia/Yekaterinburg')
      int32yekat: 1546300800
      time_samoa: 2018-12-31 13:00:00
      type_samoa: DateTime('US/Samoa')
      int32samoa: 1546300800`
      

      toTimeZone(time_utc, 'Asia/Yekaterinburg')DateTime('UTC') 类型转换为 DateTime('Asia/Yekaterinburg'). 内部值 (Unixtimestamp) 1546300800 保持不变, 但是字符串表示(toString() 函数的结果值) 由 time_utc: 2019-01-01 00:00:00 转换为o time_yekat: 2019-01-01 05:00:00.

    • toUnixTimestamp

      对于DateTime参数:将值转换为UInt32类型的数字-Unix时间戳(https://en.wikipedia.org/wiki/Unix_time)。对于String参数:根据时区将输入字符串转换为日期时间(可选的第二个参数,默认使用服务器时区),并返回相应的unix时间戳。

      语法

      toUnixTimestamp(datetime) toUnixTimestamp(str, [timezone])

      返回值

      • 返回 unix timestamp.

      类型: UInt32.

  2. 类型转换函数

    • toInt(8|16|32|64)

      转换一个输入值为Int类型。这个函数包括:

      • toInt8(expr) — 结果为Int8数据类型。
      • toInt16(expr) — 结果为Int16数据类型。
      • toInt32(expr) — 结果为Int32数据类型。
      • toInt64(expr) — 结果为Int64数据类型。

      参数

      • expr表达式返回一个数字或者代表数值类型的字符串。不支持二进制、八进制、十六进制的数字形式,有效数字之前的0也会被忽略。

      返回值

      整形在Int8, Int16, Int32,或者 Int64 的数据类型。

      函数使用rounding towards zero原则,这意味着会截断丢弃小数部分的数值。

      NaN and Inf转换是不确定的。具体使用的时候,请参考数值类型转换常见的问题

      例子

      `SELECT toInt64(nan), toInt32(32), toInt16('16'), toInt8(8.8)`
      
      `┌─────────toInt64(nan)─┬─toInt32(32)─┬─toInt16('16')─┬─toInt8(8.8)─┐
      │ -922337203685477580832168 │
      └──────────────────────┴─────────────┴───────────────┴─────────────┘`
      

      toInt(8|16|32|64)OrZero

      这个函数需要一个字符类型的入参,然后尝试把它转为Int (8 | 16 | 32 | 64),如果转换失败直接返回0。

      例子

      select toInt64OrZero('123123'), toInt8OrZero('123qwe123')

      ┌─toInt64OrZero('123123')─┬─toInt8OrZero('123qwe123')─┐ │ 123123 │ 0 │ └─────────────────────────┴───────────────────────────┘

      toInt(8|16|32|64)OrNull

      这个函数需要一个字符类型的入参,然后尝试把它转为Int (8 | 16 | 32 | 64),如果转换失败直接返回NULL

      例子

      select toInt64OrNull('123123'), toInt8OrNull('123qwe123')

      ┌─toInt64OrNull('123123')─┬─toInt8OrNull('123qwe123')─┐ │ 123123 │ ᴺᵁᴸᴸ │ └─────────────────────────┴───────────────────────────┘

      toUInt(8|16|32|64)

      转换一个输入值到UInt类型。 这个函数包括:

      • toUInt8(expr) — 结果为UInt8数据类型。
      • toUInt16(expr) — 结果为UInt16数据类型。
      • toUInt32(expr) — 结果为UInt32数据类型。
      • toUInt64(expr) — 结果为UInt64数据类型。

      参数

      • expr表达式返回一个数字或者代表数值类型的字符串。不支持二进制、八进制、十六进制的数字形式,有效数字之前的0也会被忽略。

      返回值

      整形在UInt8, UInt16, UInt32,或者 UInt64 的数据类型。

      函数使用rounding towards zero原则,这意味着会截断丢弃小数部分的数值。

      对于负数和NaN and Inf来说转换的结果是不确定的。如果你传入一个负数,比如:'-32',ClickHouse会抛出异常。具体使用的时候,请参考数值类型转换常见的问题

    • toString

      这些函数用于在数字、字符串(不包含FixedString)、Date以及DateTime之间互相转换。所有的函数都接受一个参数。

      当将其他类型转换到字符串或从字符串转换到其他类型时,使用与TabSeparated格式相同的规则对字符串的值进行格式化或解析。如果无法解析字符串则抛出异常并取消查询。

      当将Date转换为数字或反之,Date对应Unix时间戳的天数。将DataTime转换为数字或反之,DateTime对应Unix时间戳的秒数。

    • toDecimal(32|64|128)

      类型转换函数 | ClickHouse文档

  3. 字符串函数

参考文章

ClickHouse常见函数基本使用(一)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值