<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

# Keywords 

Reserved words（Can not be used as identifier）:

- ROOT
- TIME
- TIMESTAMP

Common Keywords:

- ADD
- AFTER
- ALIAS
- ALIGN
- ALIGNED
- ALL
- ALTER
- ALTER_TIMESERIES
- ANY
- APPEND
- APPLY_TEMPLATE
- AS
- ASC
- ATTRIBUTES
- BEFORE
- BEGIN
- BLOCKED
- BOUNDARY
- BY
- CACHE
- CHILD
- CLEAR
- CLUSTER
- CONCAT
- CONFIGNODES
- CONFIGURATION
- CONTINUOUS
- COUNT
- CONTAIN
- CQ
- CQS
- CREATE
- CREATE_CONTINUOUS_QUERY
- CREATE_FUNCTION
- CREATE_ROLE
- CREATE_TIMESERIES
- CREATE_TRIGGER
- CREATE_USER
- DATA
- DATABASE
- DATABASES
- DATANODES
- DEACTIVATE
- DEBUG
- DELETE
- DELETE_ROLE
- DELETE_STORAGE_GROUP
- DELETE_TIMESERIES
- DELETE_USER
- DESC
- DESCRIBE
- DEVICE
- DEVICEID
- DEVICES
- DISABLE
- DISCARD
- DROP
- DROP_CONTINUOUS_QUERY
- DROP_FUNCTION
- DROP_TRIGGER
- END
- ENDTIME
- EVERY
- EXPLAIN
- FILL
- FILE
- FLUSH
- FOR
- FROM
- FULL
- FUNCTION
- FUNCTIONS
- GLOBAL
- GRANT
- GRANT_ROLE_PRIVILEGE
- GRANT_USER_PRIVILEGE
- GRANT_USER_ROLE
- GROUP
- HEAD
- HAVING
- INDEX
- INFO
- INSERT
- INSERT_TIMESERIES
- INTO
- KILL
- LABEL
- LAST
- LATEST
- LEVEL
- LIKE
- LIMIT
- LINEAR
- LINK
- LIST
- LIST_ROLE
- LIST_USER
- LOAD
- LOCAL
- LOCK
- MERGE
- METADATA
- MODIFY_PASSWORD
- NODES
- NONE
- NOW
- OF
- OFF
- OFFSET
- ON
- ORDER
- ONSUCCESS
- PARTITION
- PASSWORD
- PATHS
- PIPE
- PIPES
- PIPESINK
- PIPESINKS
- PIPESINKTYPE
- POLICY
- PREVIOUS
- PREVIOUSUNTILLAST
- PRIVILEGES
- PROCESSLIST
- PROPERTY
- PRUNE
- QUERIES
- QUERY
- RANGE
- READONLY
- READ_TEMPLATE
- READ_TEMPLATE_APPLICATION
- READ_TIMESERIES
- REGEXP
- REGIONID
- REGIONS
- REMOVE
- RENAME
- RESAMPLE
- RESOURCE
- REVOKE
- REVOKE_ROLE_PRIVILEGE
- REVOKE_USER_PRIVILEGE
- REVOKE_USER_ROLE
- ROLE
- RUNNING
- SCHEMA
- SELECT
- SERIESSLOTID
- SET
- SET_STORAGE_GROUP
- SETTLE
- SGLEVEL
- SHOW
- SLIMIT
- SOFFSET
- STORAGE
- START
- STARTTIME
- STATELESS
- STATEFUL
- STOP
- SYSTEM
- TAIL
- TAGS
- TASK
- TEMPLATE
- TIMEOUT
- TIMESERIES
- TIMESLOTID
- TO
- TOLERANCE
- TOP
- TRACING
- TRIGGER
- TRIGGERS
- TTL
- UNLINK
- UNLOAD
- UNSET
- UPDATE
- UPDATE_TEMPLATE
- UPSERT
- URI
- USER
- USING
- VALUES
- VERIFY
- VERSION
- VIEW
- WATERMARK_EMBEDDING
- WHERE
- WITH
- WITHOUT
- WRITABLE
