首页 > 其他分享 >Apache IoTDB开发系统之语法规则

Apache IoTDB开发系统之语法规则

时间:2023-09-16 17:03:44浏览次数:42  
标签:string 标识符 引号 语法 IoTDB Apache 解析 root 节点

字面值常量

该部分对 IoTDB 中支持的字面值常量进行说明,包括字符串常量、数值型常量、时间戳常量、布尔型常量和空值。

字符串常量

字符串是由单引号(')或双引号(")字符括起来的字符序列。示例如下:

'a string'
"another string"

字符串字面值的使用场景:

  • INSERT 或者 SELECT 中用于表达 TEXT 类型数据的场景
  • SQL 中 UDF 和 Trigger 的 Java 类全类名
  • CREATE TRIGGER 语句中描述触发器属性的键值对
  • UDF 函数输入参数中的属性
  • LOAD / REMOVE / SETTLE 指令中的文件路径
  • 用户密码

通过以下几种方式可以在字符串内使用引号:

  • 在引号前使用转义符 (\)。
  • 在单引号括的的字符串内,双引号无需特殊处理。同理,在双引号括的的字符串内,单引号无需特殊处理。

关于引号和转义字符的使用示例如下:

'string'  // string
'"string"'  // "string"
'""string""'  // ""string""
'str\'ing'  // str'ing
'\'string'  // 'string
"string" // string
"'string'"  // 'string'
"''string''"  // ''string''
"str\"ing"  // str"ing
"\"string"  // "string

数值型常量

数值型常量包括整型和浮点型。

整型常量是一个数字序列。可以以 + 或 - 开头表示正负。例如:1-1

带有小数部分或由科学计数法表示的为浮点型常量,例如:.13.14-2.23+1.701.2E31.2E-3-1.2E3-1.2E-3

在 IoTDB 中,INT32 和 INT64 表示整数类型(计算是准确的),FLOAT 和 DOUBLE 表示浮点数类型(计算是近似的)。

在浮点上下文中可以使用整数,它会被解释为等效的浮点数。

时间戳常量

时间戳是一个数据到来的时间点,在 IoTDB 中分为绝对时间戳和相对时间戳。详细信息可参考 数据类型文档

特别地,NOW()表示语句开始执行时的服务端系统时间戳。

布尔型常量

布尔值常量 TRUE 和 FALSE 分别等价于 1 和 0,它们对大小写不敏感。

空值

NULL值表示没有数据。NULL对大小写不敏感。

标识符

在 IoTDB 中,触发器名称、UDF函数名、元数据模板名称、用户与角色名等被称为标识符。

标识符命名有以下约束:

  • 在不含引用的标识符中,允许出现以下字符:
  • [0-9 a-z A-Z _ : @ # $ { }] (字母,数字,部分特殊字符)
  • [‘\u2E80’..’\u9FFF’] (UNICODE 中文字符)
  • 标识符允许使用数字开头、允许全部为数字(不推荐!)。
  • 标识符是大小写敏感的。
  • 注意:用户与角色名对大小写不敏感,并且不允许转义特殊字符。

如果标识符要包含不允许的特殊字符,或者使用系统关键字,需要用反引号(`)对标识符进行引用。反引号引用的标识符中出现反引号需要反斜杠转义。

示例如下:

id  // 合法,被解析为 id
ID  // 合法,被解析为 ID,与 id 不同
id0  // 合法,被解析为 id0
_id  // 合法,被解析为 _id
0id  // 合法,被解析为 0id
233  // 合法,被解析为 233 (不推荐!)
ab!  // 不合法,包含不被允许的特殊字符
`ab!`  // 合法,被解析为 ab!
`"ab"`  // 合法,被解析为 "ab"
`a`b`  // 不合法,反引号应使用反斜杠进行转义
`a\`b`  // 合法,被解析为 a`b

路径节点名

我们称一个路径中由 . 分割的部分叫做节点(node name)。

路径节点名的约束与标识符基本一致,但要额外注意以下几点:

  • root 只允许出现时间序列的开头,若其他层级出现 root,则无法解析,提示报错。
  • 无论是否使用反引号引用,路径分隔符(.)都不能出现在路径节点名中。 如果路径节点名中一定要出现 . (不推荐!),需要用单引号或双引号括起。在这种情况下,为避免引发歧义,引号被系统视为节点名的一部分。
  • 在反引号括起的路径节点名中,单引号和双引号需要使用反斜杠进行转义。
  • 特别地,如果系统在 Windows 系统上部署,那么存储组层级名称是大小写不敏感的。例如,同时创建 root.ln 和 root.LN 是不被允许的。

示例如下:

CREATE TIMESERIES root.a.b.s1+s2/s3.c WITH DATATYPE=INT32, ENCODING=RLE
// 解析失败!

CREATE TIMESERIES root.a.b.`s1+s2/s3`.c WITH DATATYPE=INT32, ENCODING=RLE
// root.a.b.`s1+s2/s3`.c 将被解析为 Path[root, a, b, s1+s2/s3, c]
CREATE TIMESERIES root.a.b.select WITH DATATYPE=INT32, ENCODING=RLE
// 解析失败!

CREATE TIMESERIES root.a.b.`select` WITH DATATYPE=INT32, ENCODING=RLE
// root.a.b.`select` 将被解析为 Path[root, a, b, select]
CREATE TIMESERIES root.a.b.`s1.s2`.c WITH DATATYPE=INT32, ENCODING=RLE
// 解析失败!

CREATE TIMESERIES root.a.b."s1.s2".c WITH DATATYPE=INT32, ENCODING=RLE
// root.a.b."s1.s2".c 将被解析为 Path[root, a, b, "s1.s2", c]
CREATE TIMESERIES root.a.b.`s1"s2`.c WITH DATATYPE=INT32, ENCODING=RLE
// 解析失败!

CREATE TIMESERIES root.a.b.`s1\"s2`.c WITH DATATYPE=INT32, ENCODING=RLE
// root.a.b.`s1\"s2`.c 将被解析为 Path[root, a, b, s1\"s2, c]

关键字和保留字

关键字是在 SQL 具有特定含义的词,不能直接用于标识符或路径节点名,需要使用反引号进行转义。保留字是关键字的一个子集,保留字不能用于标识符或路径节点名(即使进行了转义)。

关于 IoTDB 的关键字和保留字列表,可以查看 关键字和保留字 。

表达式

IoTDB 支持在 select 子句中执行由数字常量、时间序列、算数运算表达式和时间序列生成函数(包括用户自定义函数)组成的任意嵌套表达式。

注意:当参与表达式的路径节点名由纯数字、单引号、或双引号组成(不推荐!)时,必须使用反引号(`)括起,以免引起歧义。示例如下:

-- 存在时间序列: root.sg.d.0, root.sg.d.'a' 和 root.sg."d".b
select 0 from root.sg.d  -- 存在歧义,解析失败
select 'a' from root.sg.d -- 存在歧义,解析失败
select "d".b from root.sg -- 存在歧义,解析失败
select `0` from root.sg.d  -- 对时间序列 root.sg.d.0 进行查询
select `0` + 0 from root.sg.d -- 表达式,对时间序列 root.sg.d.0 的每一个查询结果加 0
select myudf(`'a'`, 'x') from root.sg.d -- 表达式,调用函数 myudf,第一个参数为时间序列 root.sg.d.'a',第二个参数为字符串常量 'x'

引用符号

双引号(”)、单引号(’)

双引号、单引号的使用场景如下:

  1. 字符串字面值由单引号或双引号括起的字符串表示。
  2. 如果要在路径节点名中使用路径分隔符(.),则需要将路径节点名用单引号或双引号括起。在这种情况下,为避免引发歧义,引号被系统视为节点名的一部分。

反引号(`)

反引号的使用场景如下:

  1. 在标识符中使用特殊字符时,标识符需要使用反引号括起。
  2. 在路径节点名中使用除路径分隔符之外的特殊字符时,路径节点名需要使用反引号括起。在这种情况下,反引号不会被系统视为节点名的一部分。

反斜杠(\)

反斜杠的使用场景如下:

  • 在字符串常量中,出现双引号或单引号时,要使用反斜杠进行转义。
  • 如:”str\“ing” 解析为 str”ing、’str\‘ing’ 解析为 str’ing。
  • 在标识符中,出现反引号时,要使用反斜杠进行转义。
  • 如:`na\`me` 解析为 na`me。
  • 在路径节点名中,出现双引号或单引号时,要使用反斜杠进行转义。注意,为了避免歧义,反斜杠会被系统视为节点名的一部分。
  • 如:root.sg1.d1.”a\“b” 解析为 Path[root, sg1, d1, “a\“b”]、root.sg1.d1.’a\‘b’ 解析为 Path[root, sg1, d1, ‘a\‘b’]、root.sg1.d1.`a\“b` 解析为 Path[root, sg1, d1, a\“b]、root.sg1.d1.`a\‘b` 解析为 Path[root, sg1, d1, a\‘b]。

标签:string,标识符,引号,语法,IoTDB,Apache,解析,root,节点
From: https://blog.51cto.com/u_15123639/7494574

相关文章

  • C语言学习——三大语法结构
    1.顺序结构C语言中的顺序结构是指程序中的语句按照从上到下的顺序依次执行,每一条语句都在前一条语句执行完毕后才执行,形成了线性的执行路径。这是C语言的基本执行方式,也是大多数编程语言的通用执行方式之一。以下是C语言顺序结构的特点:1.1从上到下执行:在C语言中,程序从main函数......
  • apache下php获取不到Authorization
    主要情况为apache配置文件httd.conf缺少相关配置。在配置文件中找到IfModuledir_module标签,在其中添加SetEnvIfAuthorization.+HTTP_AUTHORIZATION=$0 <IfModuledir_module>DirectoryIndexindex.phpindex.htmlSetEnvIfAuthorization.+HTTP_AUTHORIZATION=......
  • 2-MySQL基本语法
    上文说到,数据库的安装和连接,接下来将给大家讲解MySQL数据库的基本语法及数据的类型1.基本语法(1).查看当前所有数据库:showdatabases;(2).创建数据库createdatabase数据库名;例如:createdatabasegzy;(3).如果不确定数据库是否存在,应在创建之前加上判断,如果不存在则创建[]......
  • 1-MySQL数据库的安装和基础语法介绍
    1.MySQL是什么?MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。它是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。关系数据库将数据保存在不......
  • Vue-模板语法
    一、模板语法 插值语法最后都渲染成了字符串html:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jque......
  • 【JavaScript保姆级教程】JavaScript的介绍和简单语法
    @TOC前言JavaScript是一种广泛使用的脚本语言,为网页添加交互性和动态功能提供了强大的支持。在本文中,我们将深入了解JavaScript的基本概念和用法,包括它在HTML中的书写位置、注释和结束符的使用,以及一种常用的函数——alert语句。一、javascript语言简介JavaScript是一种轻量级的解......
  • Python基础 - 索引器,切片语法
    索引器语法:obj[key]a)一般key为int和str比较常见,但是Python下的索引器的key也可以是float,tuple,list,dict等任意对象。b)索引器会由解释器帮我们转换成对__getitem__函数的调用。 classMyTest():def__getitem__(self,key):print(type(key))......
  • Markdown语法解释
    Markdown学习标题: 二级标题三级标题四级标题五级标题六级标题 字体Hello,World! Hello,World! Hello,World! Hello,World! 引用选择java 分割线 图片  超链接点击进入百度列表ABcABC表格名字性别生日......
  • MongoDB 语法大全
    文章目录前言MongoDB语法大全01、mongodb数据库链接02、help查看命令提示03、如果数据库存在,则切换到指定的数据库;如果数据库不存在,则创建数据库04、查询所有的数据库05、查看当前数据库05::01查看当前数据库状态05::02查看当前数据库版本05::03查看当前数据库链接机器06、插......
  • Vue——模版语法、文本指令、事件指令、属性指令、style和class、条件渲染、列表渲染
    模版语法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"></script></head><body><divid=&......