查询写回(SELECT … INTO …)

    下面是 select 语句的语法定义:

    如果去除 intoClause 子句,那么 select 语句即是单纯的查询语句。

    intoClause 子句是写回功能的标记语句。

    下面是 intoClause 子句的定义:

    1. intoClause
    2. : INTO ALIGNED? intoPath (COMMA intoPath)*
    3. ;
    4. intoPath
    5. : fullPath
    6. | nodeNameWithoutStar (DOT nodeNameWithoutStar)*
    7. ;

    intoPath(目标序列)支持两种方式指定:

    • root 开头的完整序列名指定

      • 例子:

        1. select s1, s1
        2. into root.sg.d1.t1, root.sg.d1.t2
        3. from root.sg.d1
    • 不以 root 开头的部分序列名指定,此时目标序列由 from 子句中的序列前缀和intoPath拼接而成

      • 例子:

        1. select s1, s1
        2. into t1, t2
        3. from root.sg.d1

        这等价于

        1. select s1, s1
        2. into root.sg.d1.t1, root.sg.d1.t2
        3. from root.sg.d1

    比如,对于路径root.sg1.d1.v1而言,${1}表示sg1,表示d1${3}表示v1

    • 例子:

      1. into ${1}_t1, ${2}, root.${2}.${1}.t2
      2. from root.sg.d1

      这等价于

    您可以通过关键词 ALIGNED 指定 intoPath(目标序列)是否为一个对齐时间序列。

    当目标序列存在时,您需要保证源序列和目标时间序列的类型匹配。

    当目标序列不存在时,系统将自动创建一个新的目标对齐时间序列。

    • 例子:

      1. select s1, s2, s3
      2. into aligned root.sg.d2.t1, root.sg.d2.t2, root.sg.d2.t3
      3. from root.sg.d1

    注意,除了下述类型的查询,其余类型的查询(如LAST查询和原始聚合查询)都不被支持。

    • 原始序列查询

      1. select s1, s1
      2. into t1, t2
      3. from root.sg.d1
    • 时间序列生成函数查询(UDF查询)

      1. select s1, sin(s2)
      2. into t1, t2
      3. from root.sg.d1
      1. select s1, sin(s2), s1 + s3
      2. into t1, t2, t3
      3. from root.sg.d1
    • 嵌套查询

      1. select -s1, sin(cos(tan(s1 + s2 * s3))) + cos(s3), top_k(s1 + s3, 'k'='1')
      2. into t1, t2, t3
      3. from root.sg.d1
    • Fill 查询

    • Group By 查询

      1. select count(s1)
      2. into group_by_s1
      3. from root.sg.d1
      4. group by ([1, 5), 1ms)
    • Group By Fill 查询

      1. into group_by_fill_s1
      2. from root.sg.d1
      3. group by ([1, 10),1ms)
      4. fill (float[PREVIOUS])

    注意,除了下述子句,其余查询子句(如 / SOFFSET 等)都不被支持。

    • 支持值过滤

      1. select s1, s1
      2. into t1, t2
      3. from root.sg.d1
      4. where s1 > 0 and s2 < 0
    • 支持时间过滤

      1. select s1, s1
      2. into t1, t2
      3. from root.sg.d1
      4. where time > 0
    • LIMIT / OFFSET

      1. select s1, s1
      2. into t1, t2
      3. from root.sg.d1
      4. limit 5 offset 1000
    • select子句中的源序列和into子句中的目标序列数量必须相同
    • select子句不支持带 */** 查询
    • into子句中的目标序列不必预先创建(可使用自动创建schema功能),但是当into子句中的目标序列已存在时,您需要保证select子句中的源序列和into子句中的目标序列的数据类型一致
    • into子句中的目标序列必须是互不相同的
    • from子句只允许有一列序列前缀
    • from子句不支持带 */**
    • 由于时间序列生成函数查询(UDF查询)/ 数学表达式查询 / 嵌套查询 尚不支持对齐时间序列(Aligned Timeseries),所以如果您在select子句中使用了上述查询,并且对应操作数包含对齐时间序列,会提示错误

    用户必须有下列权限才能正常执行查询写回语句:

    • 所有 select 子句中源序列的 READ_TIMESERIES 权限
    • 所有 into 子句中目标序列 INSERT_TIMESERIES 权限

    更多用户权限相关的内容,请参考权限管理语句

    • select_into_insert_tablet_plan_row_limit:执行 select-into 语句时,一个 insert-tablet-plan 中可以处理的最大行数。 默认为 10000。