ADB MySql杂记(转载处转载。。。)

果然,我只看得懂基础部分。。。

1 数据类型

数据类型类型名称取值范围字节数
boolean布尔类型0或11 bit
tinyint微整数类型-128到1271字节
smallint整数类型-32768到327672字节
int整数类型-2147483648到21474836474字节
bigint大整数类型-9223372036854775808到92233720368547758078字节
float单精度浮点数-3.402823466E+38到-1.175494351E-38, 0, 1.175494351E-38到3.402823466E+38, IEEE标准4字节
double双精度浮点数-1.7976931348623157E+308到-2.2250738585072014E-308, 0, 2.2250738585072014E-308 到 1.7976931348623157E+308. IEEE标准8字节
varchar变长字符串类型最大长度8k变长
date日期类型‘1000-01-01’ 到 '9999-12-31’支持的数据格式为 ‘YYYY-MM-DD’4字节
timestamp时间戳类型‘1970-01-01 00:00:01.000’ UTC 到 ‘2038-01-19 03:14:07.999’ UTC. 支持的的数据格式为:‘YYYY-MM-DD HH:MM:SS’4字节
multivalue多值列类型String 类型的多个值,各值间默认分隔符为英文半角逗号(,)

多值列

  • 多值列是ADB特有的数据类型,多值列可以存入String类型的多个值,各值间的分隔符默认为英文半角逗号(,)。

2 建表

事实表中必填参数描述

参数描述说明
db_name数据库名称。N/A
table_name表名称。不可与当前数据库中现有表重复。
col*语句中的 col1 bigint COMMENT ‘col1’ 等是表的列信息,基本格式为:
col_name type NOT NULL | NULL] [DEFAULT default_value] [COMMENT ’ string’] [disableIndex true]
其中[]中的参数为可选参数,关键参数说明如下:
  • col_name:列名。
  • type:列的数据类型,详细信息请参见支持建表的列数据类型。
  • [NOT NULL | NULL]:列值是否可为空值。
  • [DEFAULT default_value]:列默认值,与标准 MySQL DDL 相同。
  • disableIndex:列属性。如果某列在实际查询中不进行筛选和计算,则可通过设置列属性 disableIndex true 来屏蔽ADB的默认列索引。
同一张数据表中,列名称不可重复。一个事实表最大支持1024个列
primary key ()表的主键,用于唯一地标识表中的某一条记录;表关联时用来在一个表中引用另一个表的指定记录。实时更新表至少需要设置一个主键;批量更新表不需要设置主键
PARTITION BY HASH KEY()一级分区列,必须是一个主键列,只支持HASH分区。HASH分区根据实际数据中的某一列的内容进行分区。一个HASH分区一般不宜超过2000万条记录。您可通过设置二级分区来扩大数据存储容量
如果表仅有一级HASH分区并且是批量更新表,则每次导入数据时会对已有数据进行全量覆盖。如果每次导入数据是增量导入,则您需要设置二级分区
事实表必须指定一级分区列。HASH分区列的数据需要尽可能保持均匀分布,如果有明显的数据倾斜,则会严重的影响查询性能。
PARTITION NUMHASH分区数,最小支持2个,最大支持256个同一个表组中的所有表,HASH分区数建议一致。
TABLEGROUP事实表所归属的表组。一个事实表组最多可以创建256个事实表

选填参数描述

参数名称描述备注
SUBPARTITION BY LIST ()二级分区列,只支持LIST分区。二级分区为非动态分区,即分区值不是由数据本身决定的,而是由每次导入/写入数据时用户指定的。
二级分区列必须是新的列,不可与已有的列重复,列数据类型只支持bigint
如果每次导入数据是增量导入,则需要指定二级LIST分区信息。
实时更新表的二级分区仅用于极大的扩展单表容量、生命周期管理,其增量更新不依赖于二级分区。
SUBPARTITION OPTIONS ()最大保留的二级分区数,最大支持365*3个
新数据装载后,如果线上存在的二级分区数大于这个值,那么会根据二级分区的值进行排序,下线最小的若干分区的数据。
N/A
CLUSTERED BY ()聚集列,可指定多列。如果指定多列,那么该表的数据聚集顺序按照DDL中这个子句中指定的列组合顺序进行排序。
在物理上,同一个分区内聚集列内容相同的数据会尽可能的分布在同样的区块进行存储。
如果您将表查询中肯定会涉及到的并且数据区分度很大的列设置为聚集列,则可能较显著的提升查询性能
updateType表数据更新方式:
realtime:实时更新,只支持实时写入数据。
batch:批量更新,只支持批量离线导入数据。
不带此参数时,默认为批量更新。
N/A

常规聚合函数

函数名表达式及返回值类型说明描述
arbitraryarbitrary(x) → [类型与输入参数相同]返回 x 的任意非 NULL 值。
array_aggarray_agg(x) → array<[类型和输入参数相同]>返回以输入参数 x 为元素的数组。
avgavg(x) → double返回所有输入值的平均数(算数平均数)。
bool_andbool_and(boolean) → boolean所有参数均为 TRUE ,则返回 TRUE ,否则返回 FALSE 。
bool_orbool_or(boolean) → boolean任何一个参数为 TRUE ,则返回 TRUE , 否则返回 FALSE 。
checksumchecksum(x) → varbinary返回不受给定参数值顺序影响的校验值。
countcount(*) → bigint 
count(x) → bigint
返回输入数据行的统计个数。
返回非 NULL 值的输入参数个数。
count_ifcount_if(x) → bigint返回输入参数中 TRUE 的个数。 这个函数和 count(CASE WHEN x THEN 1 END) 等同。
everyevery(boolean) → boolean这个函数是 bool_and() 的别名。
geometric_meangeometric_mean(x) → double返回所有输入参数的几何平均值。
max_bymax_by(x, y) → [与x类型相同]
max_by(x, y, n) → array<[与x类型相同]>
返回 x 与 y 的全部关联中,y 最大值所关联的第一个 x 值。
x 与 y 的全部关联中, 以 y 降序排列前 n 个最大值所关联的 x 值中, 返回前 n 个值。
min_bymin_by(x, y) → [与x类型相同] 
min_by(x, y, n) → array<[与x类型相同]>
返回 x 与 y 的全部关联中,y 最小值所关联的第一个 x 值。
x 与 y 的全部关联中, 以 y 升序排列前 n 个值所关联的 x 值中, 返回前 n 个值。
maxmax(x) → [与输入类型相同]
max(x, n) → array<[与x类型相同]>
返回输入参数中最大的值。
返回所有参数 x 中前 n 大的值。
minmin(x) → [与输入类型相同]
min(x, n) → array<[与x类型相同]>
返回所有输入参数中最小的值。
返回所有输入参数 x 中,前 n 小的值。
sumsum(x) → [和输入类型相同]返回所有输入参数的和。

 

 

窗口函数

概述

窗口函数基于查询结果的行数据进行计算的函数,运行在 HAVING 子句之后 ORDER BY 子句之前。触发一个窗口函数需要特殊的关键字 OVER子句来指定窗口。

一个窗口包含三个组成部分:

  • 分区规范:用于将输入行分裂到不同的分区中,与 GROUP BY 子句的分裂过程相似。
  • 排序规范:用于决定输入数据行在窗口函数中执行的顺序。
  • 窗口框架:用于指定一个滑动窗口的数据,以给窗口函数指定需要处理的行数据。如果这个框架没有指定,则默认是 RANGE UNBOUNDED PRECEDING (与 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 相同),默认框架包含当前分区中所有从开始到目前行所有数据。

 

 

 

 

 

如上图所示,事实表按 ID 进行一级分区,并通过 CRC32 算法将不同 ID 值分布到不同的节点;按日期(bigint 类型)进行二级分区。二级分区可按天、周、月、年来划分。单个二级分区的数据记录数不可过小,如果按天划分二级分区,一个二级分区的数据量过小,则您可延长时间周期(例如:按周、月、年)来提高一个二级分区存储的数据量。建议每个二级分区的记录数维持在300万条到2000万条之间(如果只有一级分区数,则按每个一级分区计算)。

例如:某数据表有32个一级分区, 现在需要设计二级分区。如果每天有2000万新增数据(每个一级分区每天新增记录数:2000万/32 = 62万),则建议按周划分二级分区(每个二级分区的总记录数:62万*7天 = 434万)。如果每天有300万新增数据,则建议按月划分二级分区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值