<!--

    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 

## 1. Reserved words（Can not be used as identifier）:

- PATH
- ROOT
- TIME
- TIMESTAMP

## 2. Common Keywords:

- ADD
- AFTER
- ALIAS
- ALIGN
- ALIGNED
- ALL
- ALTER
- ALTER_TIMESERIES
- ANY
- APPEND
- APPLY_TEMPLATE
- AS
- ASC
- ATTRIBUTES
- BEFORE
- BEGIN
- BLOCKED
- BOUNDARY
- BY
- CACHE
- CALCULATION
- 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
- POINT
- POINTS
- POLICY
- PREVIOUS
- PREVIOUSUNTILLAST
- PRIVILEGES
- PROCESSLIST
- PROPERTY
- PRUNE
- QUERIES
- QUERY
- RANGE
- READONLY
- READ_TEMPLATE
- READ_TEMPLATE_APPLICATION
- READ_TIMESERIES
- REGEXP
- REGIONID
- REGION
- 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
- TYPE
- UNLINK
- UNLOAD
- UNSET
- UPDATE
- UPDATE_TEMPLATE
- UPSERT
- URI
- USER
- USING
- VALUES
- VERIFY
- VERSION
- VIEW
- WATERMARK_EMBEDDING
- WHERE
- WITH
- WITHOUT
- WRITABLE
