ClickHouse - 数据类型 clickhouse



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/117079217

plus(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


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回