T O P
Image

DataBase

行云数据库语法

行云数据库语法简介

  • By - C灵C

  • 2022年8月8日 19:04

数据定义语法:

支持的 DDL语法包括:

- CREATE:包含对数据库 (SCHEMA),数据表,DBLINK,索引,视图的创建语法。

- DROP:包含对数据库 (SCHEMA),数据表,DBLINK,索引,视图的删除语法。

- TRUNCATE:包含对数据表的截断语法。

- ALTER:包含对分区,列的更改语法。

- 分区:包含对分区的增加,删除,截断语法。

- 列:包含对列的增加,删除,修改和重命名语法。


数据操作语法:

- 包含 SELECT、INSERT、EXPORT、UPDATE、DELETE、MERGE INTO语法等。

- 支持 group by、order by、case when、limit、in/not in、is null /is notnull、where、having,like等。

- 支持多个事实表之间、事实表与维度表之间的 join,支持 UNION和子查询(包括相关子查询)。

- 支持 distinct去重。

- 支持 compaction数据整合。


数据管理语法:

包含用户管理语法、查看语法等。

其中用户管理语法包括创建、删除、密码修改、权限授予及权限回收语法等;

查看语法包括数据库、表、列查看语法等。




函数

行云分布式数据库函数支持聚合函数、单值函数、字符串函数、日期和时间函数、窗口函数。

Math函数

FLOOR, CEIL, ROUND, SIGN, MOD, ABS, TRUNC, LOG, LN, POWER, SQRT, SIN, COS, ATAN, ASIN, ACOS, BITAND, BITOR等

String函数

CONCAT, REPLACE, SUBSTR, LENGTH, LOWER, UPPER, LTRIM, RTRIM, TRIM, INITCAP, LEFT, RIGHT, TO_CHAR, REGEXP_LIKE, REGEXP_SUBSTR, TO_SINGLE_BYTE, INSTR, TRANSLATE等

Date函数

CURRENT_DATE, SYSDATE, LAST_DAY, TRUNC, ROUND, ADD_MONTHS, MONTHS_BETWEEN, TO_DATE, TO_CHAR, YEAR, MONTH, DAY, QUARTER等

Interval函数

NUMTOYMINTERVAL, NUMTODSINTERVAL, TO_YMINTERVAL, TO_DSINTERVAL, TO_CHAR等

Timestamp函数

CURRENT_TIMESTAMP, LOCALTIMESTAMP, SYSTIMESTAMP, TO_CHAR,TO_TIMESTAMP, QUARTER等

聚合函数

sum、count、max、min、avg、STDDEV_POP等

窗口函数

row_number、rank、dense_rank、ntile等

分层查询

其他函数

TO_NUMBER、CAST、EXTRACT、DBMS_RANDOM.STRING等




基于规则或代价的性能优化

基于规则的优化(RBO),使用 hint的方式触发

/*+SLICE_SORT*/

适用语句:

SELECT hint ... WHERE in_query_clause

意义:

建议优化器使用排序算法计算 in条件。仅在 in_query_clause的两个表都是有序表、slice个数相同且 in的列是 slice key时生效。

 

/*+ORDERED_JOIN*/

适用语句:

SELECT hint ... JOIN ...

意义:

建议优化器使用 sort join算法。仅在 JOIN的两个表都是有序表、slice个数相同且 join key是 slice key时生效。

 

/*+MULTI_AGG*/

适用语句:

SELECT hint ... GROUP BY ...

意义:

建议优化器使用 multiple agg算法。这种 agg算法适用于分组列的distinct值很高的情况。

  

/*+SEMI_AGG*/

适用语句:

SELECT hint ... GROUP BY ...

意义:

建议优化器使用 semi agg算法。这种 agg算法适用于分组列的 distinct值不很高也不很低的情况。这种算法是优化器的默认选项。

 

/*+NORMAL_AGG*/

适用语句:

SELECT hint ... GROUP BY ...

意义:

建议优化器使用 sort agg算法。这种 agg算法适用于分组列的 distinct值很低的情况。

 

/*+CONCURRENT_TASK_RATIO(n)*/

适用语句:

SELECT hint

INSERT INTO hint

UPDATE hint

DELETE hint

意义:

指示优化器对此条件产生的并发执行计划的倍数。n为倍数,有效值为(0,100]内的整数。此 hint的优先级高于 concurrent_task_ratio配置参数,本语句以 hint为准。

 

/*+BROADCAST_TABLE*/

适用语句:

SELECT .. FROM hint table_or_subquery JOIN table_or_subquery

SELECT .. FROM table_or_subquery JOIN hint table_or_subquery

SELECT .. FROM table_or_subquery WHERE expr [NOT] IN (SELECT ... FROM

hint table_or_subquery)

SELECT .. FROM table_or_subquery WHERE [NOT] EXISTS (SELECT ... FROM

hint table_or_subquery)

意义:

指示优化器对此 hint后的表或子查询进行广播分发,可以用于 JOIN、IN/NOT IN和 EXISTS/NOT EXISTS语句中。此算法适用于两表数据相差很大的情况,对数据量小的表使用广播分发。


基于代价的优化(CBO)

统计信息是描述数据存储的元数据。优化器通过统计信息来选择最优的执行计划。主要包括扫描方式的选择和 join路径的优化。

计算统计信息会花费时间和资源,所以 CirroData对大表进行分析时会进行取样。

统计信息包括:

reltuples:表的行数,是个估算值。

stanullfrac:此列为 null的比例。

stawidth:此列非 null值的平均宽度,单位是字节。

stadistinct:此列的 distinct情况,正数表示估算的 distinct值,负数表示

distinct的比例,0表示不确定 distinct情况。

比如,值-1.0表示此列是唯一值列。平均宽度大于 1024的列被认为是

唯一值列。

stakindN:一个编码值,表明第 N个 slot中的统计信息的类型。

staop:用于描述第 N个 slot中的统计信息的操作符。比如,直方图 slot此

列为<操作符,定义数据的排列顺序。

stanumbers:包含第 N个 slot中适当的数值类型的数组,如果 slot类型不

涉及数值类型,则为 NULL。

stavalues:包含第 N个 slot适当的列的数据的数组,如果 slot类型没有存

储任何数据,则为 NULL。

最常见值(MCV)

slot

staop,=操作符。

stavalues,K个最常见的非 NULL值。

stanumbers,stavalues中最常见的非 NULL值的比例。

stavalues中值是按照出现的比例排序的,K是统计收集器选择的一个

值。stavalues中的值必须出现不止一次,唯一值列没有此 slot。

直方图 Slot

staop,<操作符。

stavalues,M个非 NULL值,这 M个值把总体数据近似等分为 M-1

份。第一个值最小,最后一个值最大。

stanumbers,未使用,NULL。

如果同时存在 MCV slot,则直方图 Slot描述的是将 MSV slot中描述的

值删除后的数据分布(压缩的直方图)。当列的数据只有比较少的值时,用

MCV slot就能很好的描述数据分布,直方图 slot应该省略。

相关性 slot。

描述此列数据的物理顺序和排序顺序之间的相关性。

staop,<操作符。

stavalues,未使用,NULL。

stanumbers,单值,相关系数,值的范围+1到-1。