标识符

使用场景

在 IoTDB 中,触发器名称、UDF函数名、元数据模板名称、用户与角色名、连续查询标识、Pipe、PipeSink、键值对中的键和值、别名等可以作为标识符。

约束

请注意,此处约束是标识符的通用约束,具体标识符可能还附带其它约束条件,如用户名限制字符数大于等于4,更严格的约束请参考具体标识符相关的说明文档。

标识符命名有以下约束:

  • 不使用反引号括起的标识符中,允许出现以下字符:

    • [ 0-9 a-z A-Z _ ] (字母,数字,下划线)
    • [‘\u2E80’..’\u9FFF’] (UNICODE 中文字符)
  • 标识符允许使用数字开头、不使用反引号括起的标识符不能全部为数字。

  • 标识符是大小写敏感的。

  • 标识符允许为关键字。

如果出现如下情况,标识符需要使用反引号进行引用:

  • 标识符包含不允许的特殊字符。
  • 标识符为实数。

如何在反引号引起的标识符中使用引号

在反引号引起的标识符中可以直接使用单引号和双引号。

在用反引号引用的标识符中,可以通过双写反引号的方式使用反引号,即 ` 可以表示为 ``,示例如下:

  1. # 创建模板 t1`t
  2. create schema template `t1``t`
  3. (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY)
  4. # 创建模板 t1't"t
  5. create schema template `t1't"t`
  6. (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY)

特殊情况示例

需要使用反引号进行引用的部分情况示例:

  • 触发器名称出现上述特殊情况时需使用反引号引用:

    1. # 创建触发器 alert.`listener-sg1d1s1
    2. CREATE TRIGGER `alert.listener-sg1d1s1`
    3. AFTER INSERT
    4. ON root.sg1.d1.s1
    5. AS 'org.apache.iotdb.db.engine.trigger.example.AlertListener'
    6. WITH (
    7. 'lo' = '0',
    8. 'hi' = '100.0'
    9. )
  • UDF 名称出现上述特殊情况时需使用反引号引用:

    1. # 创建名为 111 的 UDF,111 为实数,所以需要用反引号引用。
    2. CREATE FUNCTION `111` AS 'org.apache.iotdb.udf.UDTFExample'
  • 元数据模板名称出现上述特殊情况时需使用反引号引用:

    1. # 创建名为 111 的元数据模板,111 为实数,需要用反引号引用。
    2. create schema template `111`
    3. (temperature FLOAT encoding=RLE, status BOOLEAN encoding=PLAIN compression=SNAPPY)
  • 用户名、角色名出现上述特殊情况时需使用反引号引用,同时无论是否使用反引号引用,用户名、角色名中均不允许出现空格,具体请参考权限管理章节中的说明。

    1. # 创建用户 special`user.
    2. CREATE USER `special``user.` 'write_pwd'
    3. # 创建角色 111
    4. CREATE ROLE `111`
  • 连续查询标识出现上述特殊情况时需使用反引号引用:

    1. # 创建连续查询 test.cq
    2. CREATE CONTINUOUS QUERY `test.cq`
    3. BEGIN
    4. SELECT max_value(temperature)
    5. INTO temperature_max
    6. FROM root.ln.*.*
    7. GROUP BY time(10s)
    8. END
  • Pipe、PipeSink 名称出现上述特殊情况时需使用反引号引用:

    1. # 创建 PipeSink test.*1
    2. CREATE PIPESINK `test.*1` AS IoTDB ('ip' = '输入你的IP')
    3. # 创建 Pipe test.*2
    4. CREATE PIPE `test.*2` TO `test.*1` FROM
    5. (select ** from root WHERE time>=yyyy-mm-dd HH:MM:SS) WITH 'SyncDelOp' = 'true'
  • Select 子句中可以结果集中的值指定别名,别名可以被定义为字符串或者标识符,示例如下:

    1. select s1 as temperature, s2 as speed from root.ln.wf01.wt01;
    2. # 表头如下所示
    3. +-----------------------------+-----------+-----+
    4. | Time|temperature|speed|
    5. +-----------------------------+-----------+-----+
  • 用于表示键值对,键值对的键和值可以被定义成常量(包括字符串)或者标识符,具体请参考键值对章节。