2.GEO类型(实验性)
1、Point(点)
点由其X和Y坐标表示,存储为tuple(Float 64,Float 64)
SELECT (4.245, 7.4563) AS x, toTypeName(x);
2、Ring(圆环)
圆环是一个简单的多边形,没有孔,存储为点数组:Array(Point)
SELECT [(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] AS x, toTypeName(x);
3、Polygon(多边形)
多边形是一个具有孔的多边形,存储成一个环阵列: Array(Ring)
外部阵列的第一个元素是多边形的外部形状,之后所有元素都是孔
SELECT [[(20, 20), (50, 20), (50, 50), (20, 50)], [(30, 30), (50, 50), (50, 30)]] AS x, toTypeName(x);
4、MultiPolygon(多重多边形)
多重多边形由多个多边形组成,存储为一个多边形数组:Array(Polygon)
SELECT [[[(0, 0), (10, 0), (10, 10), (0, 10)]], [[(20, 20), (50, 20), (50, 50), (20, 50)],[(30, 30), (50, 50), (50, 30)]]] AS x, toTypeName(x);
3.复合数据类型
1) Map(key, value)
Map(key, value)数据类型存储 键值对
参数类型
键—String、Integer、LowCardinality或FixedString
值—String、Integer、Array、LowCardinality或FixedString
创建带 Map(key, value) 列的临时表,并插入数据
DROP TABLE IF EXISTS t_test_map;
CREATE TEMPORARY TABLE t_test_map (a Map(String, UInt64));
以键值的方式插入数据
INSERT INTO t_test_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30});
Map(key, value) 列类型的查询
-- 查询所有键值;
SELECT a FROM t_test_map;
-- 指定键查询值;
SELECT a['key2'] FROM t_test_map;
以map的方式插入数据
INSERT INTO t_test_map VALUES (map('key1', 1, 'key2', 2, 'key3', 3));
Map(key, value) 列类型的查询
-- 查询所有键值;
SELECT a FROM t_test_map;
-- 指定键查询值;
SELECT a['key2'] FROM t_test_map;
Tuple 转换成 Map
SELECT CAST(([1, 2, 3], ['Ready', 'Steady', 'Go']), 'Map(UInt8, String)') AS x, toTypeName(x);
2) Tuple(元组)
元组Tuple:每个数据都有单独的类型。tuple类型只能存储在内存表或临时查询中。
SELECT (1, 2) AS x, toTypeName(x);
--常规定义方式
SELECT tuple(1,'a',now()) AS x, toTypeName(x)
┌─x─────────────────┬─toTypeName(tuple(1, 'a', now()))─┐
│ (1,'a','2019-08-28 21:36:32') │ Tuple(UInt8, String, DateTime) │
└───────────────────┴─────────────────────┘
--简写定义方式
SELECT (1,'a',now()) AS x, toTypeName(x)
┌─x─────────────────┬─toTypeName(tuple(1, 'a', now()))─┐
│ (1,'a','2019-08-28 21:36:32') │ Tuple(UInt8, String, DateTime) │
└───────────────────┴─────────────────────┘
--建表时元组类型定义
CREATE TABLE Array_TEST (
c1 Array(String)
) engine = Memory
3) Array(阵列)
阵列 Array(T):T 可以是任意类型,包含数组类型。
但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。
--常规定义方式
SELECT array(1, 2) as a , toTypeName(a)
┌─a───┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8) │
└─────┴────────────────┘
--简写定义方式
SELECT [1, 2]
--建表时数据类型定义
CREATE TABLE Array_TEST (
c1 Array(String)
) engine = Memory
4) Interval(间隔)
表示时间和日期间隔的数据类型家族。Interval 数据类型值不能存储在表中。
SELECT toTypeName(INTERVAL 3 DAY);
SELECT now() AS x, toTypeName(x);
5) Nested(镶嵌数据结构)
Nested(Name1 Type1, Name2 Type2, …)
嵌套数据结构类似于嵌套表。嵌套数据结构的参数(列名和类型)与 CREATE 查询类似
每个表可以包含任意多行嵌套数据结构
只支持一级嵌套
嵌套结构的列中,若列的类型是数组类型,那么该列其实和多维数组是相同的
目前嵌套层级的支持很局限(MergeTree 引擎中不支持存储这样的列)
可以简单地把嵌套数据结构当做是所有列都是相同长度的多列数组。
不能对整个嵌套数据结构执行 SELECT,只能明确列出属于它一部分列
CREATE TABLE test.visits
(
CounterID UInt32,
StartDate Date,
Sign Int8,
IsNew UInt8,
VisitID UInt64,
UserID UInt64,
...
Goals Nested
(
ID UInt32,
Serial UInt32,
EventTime DateTime,
Price Int64,
OrderID String,
CurrencyID UInt32
),
...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign);
————————————————
SELECT
Goals.ID,
Goals.EventTime
FROM test.visits
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
===
--创建Nested语句
CREATE TABLE nested_test (
name String,
age UInt8 ,
dept Nested(
id UInt8,
name String
)
) ENGINE = Memory;
---
--插入数据
INSERT INTO nested_test VALUES ('bruce' , 30 , [10000,10001,10002], ['研发部','技术支持中心','测试部']);
--行与行之间,数组长度无须对齐
INSERT INTO nested_test VALUES ('bruce' , 30 , [10000,10001], ['研发部','技术支持中心']);
--查询数据
SELECT name, dept.id, dept.name FROM nested_test
┌─name─┬─dept.id──┬─dept.name─────────────┐
│ bruce │ [16,17,18] │ ['研发部','技术支持中心','测试部'] │
└────┴───────┴────────────────────┘
# 算术函数
toTypeName(operator) 查看数据类型
SELECT toTypeName(toDate('2021-05-20'));
┌─toTypeName(toDate('2021-05-20'))─┐
│ Date │
└──────────────────────────────────┘
SELECT toTypeName(0),toTypeName(0 + 0),toTypeName((0 + 0) + 0),toTypeName(((0 + 0) + 0) + 0)
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘
————————————————
版权声明:本文为CSDN博主「扫地增」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41018861/article/details/117079217plus(a, b) 计算数值总和
minus(a, b) 计算数值之差
multiply(a, b) 计算数值的乘积
divide(a, b) 计算数值的商:
计算数值的商 ,结果类型始终是浮点类型。
它不是整数除法。对于整数除法,请使用’intDiv’函数。当除以零时,你得到’inf’,‘- inf’或’nan’。
intDiv(a,b) 计算数值的商
计算数值的商,向下舍入取整(按绝对值),除以零或将最小负数除以-1时抛出异常
intDivOrZero(a,b) 计算数值的商
计算数值的商,向下舍入取整(按绝对值),与’intDiv’的不同之处在于它在除以零或将最小负数除以-1时返回零。
modulo(a, b) 计算除法后的余数
计算除法后的余数。除以零或将最小负数除以-1时抛出异常。
moduloOrZero(a, b) 计算除法后的余数。
除以零或将最小负数除以-1时抛出异常。和modulo不同之处在于,除以0时结果返回0。
negate(a) 取反函数
通过改变数值的符号位对数值取反,结果总是有符号的. negate(1) 返回结果-1
abs(a) 绝对值函数
gcd(a,b) 返回数值的最大公约数。除以零或将最小负数除以-1时抛出异常。gcd(12,3) 返回结果3
lcm(a,b) 返回数值的最小公倍数。除以零或将最小负数除以-1时抛出异常。lcm(12,3) 返回结果12