表 已支持的数据类型 说明
序号 | SQL 类型 | Golang 类型 | 说明 |
|---|---|---|---|
1 | bigint | int64 | 整数 |
2 | double | float64 | 浮点数,总位数超过 15 位则有可能丢失精度 |
3 | string | string | 字符串 |
4 | date | int64 | 日期类型,详见“13.5.6NoSQL Date类型详解”。 |
表 已支持的常用语法 说明
序号 | SQL 语法 | 注意事项 |
|---|---|---|
1 | Left Join/Full Join | 对于 ES/Hbase 等数据源,如果物理表设置了主键,则 On 语句和 Where 语句一起需要包含全部的主键列。 |
2 | Union All | 不支持 Union 和 Union Distinct 语句,Union 前后的查询不能有 Order by 语句。 说明 由于数据服务是独立的语法校验文件,采用的语法规则不能完全兼容所有的语法类型。所以 MySQL、Doris、PG 等类似数据源中,其针对 union all 语法需要用括号,把后面跟随的 SQL 语句括起来,如 |
3 | 子查询 | |
4 |
| 尽量不要写区间范围较大的过滤条件,尽可能用等值条件。 |
5 |
| 对主键字段建议成对使用(即一个字段必须既有大于或大于等于,又有小于或小于等于的限制) ,否则可能会因为查询性能风险而报错。 |
6 |
| 慎重依赖 json 系列 UDF 做过滤条件。 |
7 |
| 预估数据量较大时,UDAF 的参数不要存在算数计算,将大概率被判定为慢SQL。 注意 所有聚合函数都会忽略 NULL 值,对齐 MySQL,特例是 count(1) 会包含 NULL 值,而 count(字段)不会; 聚合函数内最好不要包含 UDF 和 case when |
8 | 别名(as) | |
9 | Case when | |
10 |
| 其中除法遇到除数为 0 的情况,会返回 NULL。 |
11 |
| 如果需要对聚合结果排序,对聚合字段手动指定别名,order by 使用别名; |
12 | Limit m,n | 每条 SQL 最好带上 limit,否则将使用逻辑表的默认 limit 配置; |
13 | UDF: | 在 order by 中使用 UDF 需要慎重,您可咨询 DataLeap-数据服务支持同学; |
表 已支持的UDF函数 说明
序号 | 函数名称 | 语法格式 | 函数详情 | 参数 | 示例 |
|---|---|---|---|---|---|
1 | coalesce | coalesce( | 这个函数主要用来进行空值处理,如果 expression 不为空值则返回 expression;否则判断 value1 是否是空值,如果 value1 不为空值则返回value1;否则判断 value2 是否是空值,如果 value2 不为空值则返回value2;…… 以此类推,如果所有的表达式都为空值,则返回 NULL。 |
|
|
2 | date_format | DATE_FORMAT( | 函数用于以不同的格式显示日期/时间数据 |
|
|
3 | length | length( | 函数返回文本字段中值的长度,基于字节数统计 |
|
|
4 | substring | SUBSTRING( | 查询一个字符串从某个位置开始的一定长度的子串 |
|
|
5 | fuzzy_like | fuzzy_like( | 用于非精确过滤,只要包含 pattern 即算作满足条件(对于 ES 数据源相对直接使用 like 速度会更快,但是精度会低一些,取决于 ES 的分词配置) |
|
|
6 | json_array_get | json_array_get( | 从一个 json 数组字符串中获取指定位置的元素 |
|
|
7 | json_map_get | json_map_get( | 从一个 json 对象字符串中获取指定位置元素 |
|
|
8 | concat | concat( | 字符串拼接 |
|
|
9 | json_array_has | json_array_has( | 查询 json 数组中是否存在给定的元素 |
|
|
其他更多函数请参考“函数”。
表 已支持的UDAF函数 说明
序号 | 函数名称 | 语法格式 | 函数详情 | 参数 | 示例 |
|---|---|---|---|---|---|
1 | min | min( | 返回字段的最小值,对于数字类型返回数值最小的值,对于 string 类型返回字段序最小的值 |
|
|
2 | max | max( | 返回字段的最大值,对于数字类型返回数值最大的值,对于 string 类型返回字段序最大的值 |
|
|
3 | avg | avg( | 返回字段的平均值,对于数字类型返回平均值,不支持 string 类型 |
|
|
4 | sum | sum( | 返回字段的总和,对于数字类型返回总和,不支持 string 类型 |
|
|
5 | count | count( | 返回字段的非 nil 值个数的总和 |
|
|
6 | count_distinct | count_distinct( | 返回字段去重后的非 nil 值个数的总和 |
|
|
表 不支持的常用语法 说明
序号 | SQL 语法 |
|---|---|
1 | right join |
2 | union/union all |
3 | having |
4 | over |
5 | distinct; count(distinct) |
6 | Group by 字段不支持任何表达式计算 |
7 | Order by 不得直接使用聚合函数,必须使用别名 |
8 | if |
9 | On 字段不支持任何表达式计算 |
注意
其中部分不支持的语法(如Count(Distinct)),可以在SQL中通过UDF函数来实现。