添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
寂寞的警车  ·  neo4j java ...·  1 年前    · 
瘦瘦的电池  ·  docker安装 ...·  1 年前    · 
胆小的山羊  ·  c# wpf treeview ...·  1 年前    · 
文章介绍了ClickHouse的数组类型Array(T),包括其特性、使用场景和示例。Array(T)允许存储特定类型T的有序列表,可用于处理重复数据。文中展示了如何创建和查询包含Array类型列的表,以及使用arrayJoin和arrayMap函数进行数据操作。此外,还提到了indexOf和has函数在数组查询中的应用。 摘要由CSDN通过智能技术生成

clickhouse数组类型

  • clickhouse支持丰富的数据类型,给我们的数据存储和查询带来很多遍历。我比较喜欢的一种类型是数组类型,MySQL和PostgreSQL不支持这种数据结构,clickhouse提供了支持
  • clickhouse支持以下数组类型:
    • Array(T):其中T可以是任何有效的数据类型,例如Array(Int32),Array(String)等。
    • FixedString(N):其中N表示固定的字符串长度,例如FixedString(10)表示固定长度为10的字符串数组。
    • Nested:嵌套数组类型,可以用于表示复杂的数据结构。
    • Tuple(T1, T2, …, Tn):定义一个元组数组,元组中包含n个元素,每个元素表示一个T类型的值。
  • clickhouse数组类型可以用于存储和处理具有重复性质的数据。例如,一个包含学生姓名和他们所上的课程的数据集可以使用数组类型来处理课程名的多个条目。

Array介绍

ClickHouse支持数组类型Array(T),其中T可以是任何其他数据类型,例如Int32、Float64、String等。以下是一些常见的用法举例:

  1. 创建 Array 类型的列(这里可以使用 Array(String) ,也可以使用 String[] ):
CREATE TABLE mytable (
  id Int32,
  myarray Array(String)
) ENGINE = MergeTree()
ORDER BY id;
  1. 插入数据到Array类型的列:
INSERT INTO mytable VALUES (1, ['apple', 'banana', 'orange']), (2, ['cat', 'dog']);
  1. 查询包含Array类型的列:
SELECT id, myarray FROM mytable;

输出结果:

┌─id─┬─myarray─────────────────────┐
│  1 │ ['apple','banana','orange'] │
│  2 │ ['cat','dog']               │
└────┴─────────────────────────────┘
  1. 使用arrayJoin函数展开Array类型的列(这个很常用,将数组值展开成多条记录,用于展示或者统计):
SELECT id, arrayJoin(myarray) FROM mytable;

输出结果:

┌─id─┬─arrayJoin(myarray)─┐
│  1 │ apple              │
│  1 │ banana             │
│  1 │ orange             │
│  2 │ cat                │
│  2 │ dog                │
└────┴────────────────────┘
  1. 使用arrayMap函数对Array类型的列进行映射:
SELECT id, arrayMap(x -> length(x), myarray) as lengths FROM mytable;

输出结果:

┌─id─┬─lengths─────┐
│  1 │ [5,6,6]     │
│  2 │ [3,3]       │
└────┴─────────────┘

这里使用arrayMap函数对myarray中的每个元素应用length函数,得到数组长度的列表。

  • 对于数组类型Array(T),明白其具体含义后,使用起来并不复杂
  • 像前文所说一样,创建表定义数组类型,插入时插入对应数组
  • 显然,使用数组类型,主要是为了后面的查询功能,前面已经给出了arrayJoin函数和arrayMap函数的简单举例
  • 最后给出大家可能比较常用的包含查询函数,indexOf函数和has函数,都是查询是否包含给定值,返回符合条件的列
SELECT * FROM signal_status ss where time_stamp = '2022-12-27 15:30:00' and indexOf(green_movement , 'EB:CROSSING') > 0;
SELECT * FROM signal_status ss where time_stamp = '2022-12-27 15:30:00' and has(green_movement , 'EB:CROSSING') = 1;
Int16 - [-32768 : 32767]
Int32 - [-2147483648 : 2147483647]
Int64 - [-9223372036854775808 : 9223372036854775807]
无符号整型范围(0~2n-1):
UInt8 - [0 : 255]
UInt16 
arrayElement(arr, n), operator arr[n]
    从array中获取索引为n的元素,索引从1开始,支持负数,-1指最后一位;索引超过大小返回类型的默认值
has(arr, elem)
    arr中是否有elem元素,0无1有
hasAll(set, subset)
     检查arr是否是另一个arr的子集;0无1有,空arr是如何a...
				
Clickhouse--数组函数☀️前言⭐️ SQL冗余诟病✨ arrayJoin????arrayEnumerate???? 理解建表语句???? 总结????arrayEnumerateDense???? 总结????arrayEnumerateUniq???? 理解????总结????实际开发使用 日常工作可能会遇到数据库一对多的字段,被用逗号或者其他特殊字符分割,存在一起。类似: 如果要查询‘信息技术’标签的数据,SQL会很麻烦。下文做具体实现。 ⭐️ SQL冗余诟病 以Mysql为
文章目录ClickHouse数据类型基础类型数值类型整数浮点数Decimal字符串类型StringFixedStringUUID时间类型DateDateTimeDateTime64复合类型数组元组枚举嵌套特殊类型NullableDomain参考文档 ClickHouse数据类型 ClickHouse数据类型分为: 基础类型 复合类型 特殊类型 基础类型 数值类型 ClickHouse的数值类型和Numpy的数值类型类似,比如int32、int64、uint32、float32 和float64等。
1、数据类型 ClickHouse 可以在数据表中存储多种数据类型。 1、UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64 固定长度的整型,包括有符号整型或无符号整型 Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647]...
整型范围(-2的n-1次方到2的n-1次方-1): Int8 - [-128 : 127] ,对应java的byte Int16 - [-32768 : 32767],对应java的short Int32 - [-2147483648 : 2147483647],对应java的int Int64 - [-9223372036854775808 : 9223372036854775807],对应java的long 无符号整型范围(0~2的n次方-1
ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。 SELECT * FROM system.data_type_families 上面的系统表,存储了ClickHouse所支持的数据类型,注意不同版本的ClickHouse可能数据类型会有所不同,具体如下表所示: ┌─name────────────────────┬─case_insensitive─┬─ali
ClickHouse兼容了Mysql的数据类型,可以在建表的DDL语句中使用Mysql的数据类型,如BIGINT、TEXT等,ClickHouse会自动将这些类型转换为ClickHouse数据类型。同时,定义成Mysql的Timestamp,ClickHouse会自动将Timestamp转换为DataTime类型。此外,ClickHouse还支持数组类型Array(T),其中T可以是任何ClickHouse支持的数据类型。 以下是一些ClickHouse数据类型转换的例子: 1. 将Mysql的BIGINT类型转换为ClickHouse的Int64类型 ```sql CREATE TABLE test ( id Int64, name String ) ENGINE = MergeTree() ORDER BY id; INSERT INTO test VALUES (9223372036854775807, 'test'); SELECT * FROM test; 输出:`(9223372036854775807, 'test')` 2. 将Mysql的TEXT类型转换为ClickHouse的String类型 ```sql CREATE TABLE test ( id Int64, name String ) ENGINE = MergeTree() ORDER BY id; INSERT INTO test VALUES (1, 'hello'); SELECT * FROM test; 输出:`(1, 'hello')` 3. 将Mysql的Timestamp类型转换为ClickHouse的DateTime类型 ```sql CREATE TABLE test ( id Int64, time DateTime ) ENGINE = MergeTree() ORDER BY id; INSERT INTO test VALUES (1, '2022-01-01 00:00:00'); SELECT * FROM test; 输出:`(1, 2022-01-01 00:00:00)` 感觉分享,茅塞顿开,问题解决了。 我的原因是consul默认情况是用主机名作为注册地址,consul服务器的DNS解析不到主机名的ip地址,导致网络不通,同一局域网可以在微服务项目中的consul配置加入一个配置 ,用ip进行注册 [code=plain] consul: discovery: prefer-ip-address: true # 优先使用服务IP进行注册 [/code]