You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件(私有化)

大数据研发治理套件(私有化)

复制全文
API
NoSQL语法规范
复制全文
NoSQL语法规范

NoSQL 规范

  • NoSQL语法规范与标准SQL语法一致,支持部分函数;
  • 若逻辑表配置了查询约束,查询条件必须命中其中一条约束;
  • SQL中可以使用占位符。

已支持的数据类型

表 已支持的数据类型 说明

序号

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 语句括起来,如 select * from table1 union all (select col1 from table2)

3

子查询

4

  • =
  • In
  • between
  • and

尽量不要写区间范围较大的过滤条件,尽可能用等值条件。

5

  • >
  • >=
  • <
  • <=

对主键字段建议成对使用(即一个字段必须既有大于或大于等于,又有小于或小于等于的限制) ,否则可能会因为查询性能风险而报错。

6

  • like
  • is null
  • is not null

慎重依赖 json 系列 UDF 做过滤条件。

7

  • sum、max、min、avg、count
  • group by

预估数据量较大时,UDAF 的参数不要存在算数计算,将大概率被判定为慢SQL。

注意

所有聚合函数都会忽略 NULL 值,对齐 MySQL,特例是 count(1) 会包含 NULL 值,而 count(字段)不会; 聚合函数内最好不要包含 UDF 和 case when

8

别名(as)

9

Case when

10

  • +
  • -
  • *
  • /

其中除法遇到除数为 0 的情况,会返回 NULL。

11

  • Order by desc
  • Order by asc

如果需要对聚合结果排序,对聚合字段手动指定别名,order by 使用别名;
在 order by 中慎重使用算数计算和 UDF,将有可能导致查询超时
当前 order by 的字段必须在 select 字段中有完整对应。

12

Limit m,n

每条 SQL 最好带上 limit,否则将使用逻辑表的默认 limit 配置
暂定数据量拉取上限是 1W,如果超过,将立即报错并标识数据丢失。

13

UDF:
date_format、len、substring、json_map_get、json_array_get、json_array_has

在 order by 中使用 UDF 需要慎重,您可咨询 DataLeap-数据服务支持同学
除 json 系列函数,其余使用均对标 MySQL。

已支持的UDF函数

表 已支持的UDF函数 说明

序号

函数名称

语法格式

函数详情

参数

示例

1

coalesce

coalesce(expression1, expression2, ..., default_value)

这个函数主要用来进行空值处理,如果 expression 不为空值则返回 expression;否则判断 value1 是否是空值,如果 value1 不为空值则返回value1;否则判断 value2 是否是空值,如果 value2 不为空值则返回value2;…… 以此类推,如果所有的表达式都为空值,则返回 NULL。

expression1,expression2为任意表达式

SELECT a/b, COALESCE(a/b, 0) from T where f='?'

2

date_format

DATE_FORMAT(date,format)

函数用于以不同的格式显示日期/时间数据

date 时间戳; format 规定日期/时间的输出格式,对标mysql; [详见 MySQL语法参考]

SELECT DATE_FORMAT(1635857473, '%W %M %Y')

3

length

length(str)

函数返回文本字段中值的长度,基于字节数统计

str 任意字符串或者 string 字段

length('abc')

4

substring

SUBSTRING(str,pos,len)

查询一个字符串从某个位置开始的一定长度的子串

str 字符串字面量 /string 类型字段; pos 开始位置,从1开始; len 表示需要的子串长度; [详见 MySQL语法参考]

SELECT SUBSTRING("abcdefg",5) from T where f='?'

5

fuzzy_like

fuzzy_like(string_field, pattern)

用于非精确过滤,只要包含 pattern 即算作满足条件(对于 ES 数据源相对直接使用 like 速度会更快,但是精度会低一些,取决于 ES 的分词配置)

str_field 一个字符串字段,待匹配的目标; pattern 一个字符串字面量,表示需要匹配的条件。

select fuzzy_like('aabb', 'a') from t where f=?

6

json_array_get

json_array_get(json_array_format_field, index)

从一个 json 数组字符串中获取指定位置的元素

json_array_format_field 逻辑字段类型为map_arr/int_arr/string_arr的逻辑字段名; index 数组下标。

select json_array_get(field1, 1) from t where f=?

7

json_map_get

json_map_get(json_object_format_field,key)

从一个 json 对象字符串中获取指定位置元素

json_object_format_field 逻辑字段类型为 map 的逻辑字段名; key json 字段的 key。

select json_map_get(field2, 'k') from t where f=?

8

concat

concat(field1, field2, stringArg, intArg, floatArg...)

字符串拼接

field1, field2 为逻辑字段; stringArg 为 string 类型字面量,例如 'abc'; intArg 为 bigint 类型字面量,例如123; floatArg 为 double 类型字面量,如 1.9

concat('abc', 1, 2.8, 'efg')

9

json_array_has

json_array_has(json_array_format_field, arg)

查询 json 数组中是否存在给定的元素

json_array_format_field 逻辑字段类型为 map_arr/int_arr/string_arr 的逻辑字段名; arg 要判别的字段,可以是 string 类型、bigint 类型、double 类型字面量

select json_array_has('[a, b, c]', '1') from t where f=?

其他更多函数请参考“函数”。

已支持的UDAF函数

表 已支持的UDAF函数 说明

序号

函数名称

语法格式

函数详情

参数

示例

1

min

min(field)

返回字段的最小值,对于数字类型返回数值最小的值,对于 string 类型返回字段序最小的值

field为逻辑字段名;

SELECT a, min(b) from T group by a

2

max

max(field)

返回字段的最大值,对于数字类型返回数值最大的值,对于 string 类型返回字段序最大的值

field为逻辑字段名;

SELECT a, max(b) from T group by a

3

avg

avg(field)

返回字段的平均值,对于数字类型返回平均值,不支持 string 类型

field为逻辑字段名;

SELECT a, avg(b) from T group by a

4

sum

sum(field)

返回字段的总和,对于数字类型返回总和,不支持 string 类型

field为逻辑字段名;

SELECT a, sum(b) from T group by a

5

count

count(field)

返回字段的非 nil 值个数的总和

field为逻辑字段名;

SELECT a, count(b) from T group by a

6

count_distinct

count_distinct(field)

返回字段去重后的非 nil 值个数的总和

field为逻辑字段名;

SELECT a, count_distinct(b) from T group by a

不支持的常用语法

表 不支持的常用语法 说明

序号

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函数来实现。

最近更新时间:2025.07.31 18:13:48
这个页面对您有帮助吗?
有用
有用
无用
无用