blob: 6626770662ea8878d069889dfdb516c1888611c7 [file] [view]
<!--
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.
-->
# 元数据操作
## 1. 数据库管理
### 1.1 创建数据库
**语法:**
```SQL
CREATE DATABASE (IF NOT EXISTS)? <DATABASE_NAME> (WITH properties)?
```
更多详细语法说明请参考:[创建数据库](../Basic-Concept/Database-Management_timecho.md#_1-1-创建数据库)
**示例:**
创建一个名为 database1 的数据库, 数据库的 TTL 时间默认永久。
```SQL
CREATE DATABASE database1;
CREATE DATABASE IF NOT EXISTS database1;
```
创建一个名为 database1 的数据库,并将数据库的 TTL 时间设置为1年。
```SQL
CREATE DATABASE IF NOT EXISTS database1 with(TTL=31536000000);
```
### 1.2 使用数据库
**语法:**
```SQL
USE <DATABASE_NAME>
```
**示例:**
```SQL
USE database1;
```
### 1.3 查看当前数据库
**语法:**
```SQL
SHOW CURRENT_DATABASE;
```
**示例:**
未执行过 `use`语句指定数据库
```SQL
SHOW CURRENT_DATABASE;
```
```shell
+---------------+
|CurrentDatabase|
+---------------+
| null|
+---------------+
```
执行 `use`语句指定数据库 database1
```sql
USE database1;
SHOW CURRENT_DATABASE;
```
```shell
+---------------+
|CurrentDatabase|
+---------------+
| database1|
+---------------+
```
### 1.4 查看所有数据库
**语法:**
```SQL
SHOW DATABASES (DETAILS)?
```
更多返回结果详细说明请参考:[查看所有数据库](../Basic-Concept/Database-Management_timecho.md#_1-4-查看所有数据库)
**示例:**
查看所有数据库
```SQL
SHOW DATABASES;
```
```shell
+------------------+-------+-----------------------+---------------------+---------------------+
| Database|TTL(ms)|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|
+------------------+-------+-----------------------+---------------------+---------------------+
| database1| INF| 1| 1| 604800000|
|information_schema| INF| null| null| null|
+------------------+-------+-----------------------+---------------------+---------------------+
```
查看所有数据库详情
```sql
SHOW DATABASES DETAILS;
```
```shell
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
| Database|TTL(ms)|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|SchemaRegionGroupNum|DataRegionGroupNum|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
| database1| INF| 1| 1| 604800000| 1| 2|
|information_schema| INF| null| null| null| null| null|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
```
### 1.5 修改数据库
**语法:**
```SQL
ALTER DATABASE (IF EXISTS)? database=identifier SET PROPERTIES propertyAssignments;
```
**示例:**
修改数据库 database1 的 TTL 时间为1年
```SQL
ALTER DATABASE database1 SET PROPERTIES TTL=31536000000;
```
### 1.6 删除数据库
**语法:**
```SQL
DROP DATABASE (IF EXISTS)? <DATABASE_NAME>;
```
**示例:**
删除数据库 database1
```SQL
DROP DATABASE IF EXISTS database1;
```
## 2. 表管理
### 2.1 创建表
**语法:**
```SQL
createTableStatement
: CREATE TABLE (IF NOT EXISTS)? qualifiedName
'(' (columnDefinition (',' columnDefinition)*)? ')'
charsetDesc?
comment?
(WITH properties)?
;
charsetDesc
: DEFAULT? (CHAR SET | CHARSET | CHARACTER SET) EQ? identifierOrString
;
columnDefinition
: identifier columnCategory=(TAG | ATTRIBUTE | TIME) charsetName? comment?
| identifier type (columnCategory=(TAG | ATTRIBUTE | TIME | FIELD))? charsetName? comment?
;
charsetName
: CHAR SET identifier
| CHARSET identifier
| CHARACTER SET identifier
;
comment
: COMMENT string
;
```
更多详细语法说明请参考:[创建表](../Basic-Concept/Table-Management_timecho.md#_1-1-创建表)
**示例:**
创建表 table1 并将表的 TTL 设置为1年
```SQL
CREATE TABLE table1 (
time TIMESTAMP TIME,
region STRING TAG,
plant_id STRING TAG,
device_id STRING TAG,
model_id STRING ATTRIBUTE,
maintenance STRING ATTRIBUTE COMMENT 'maintenance',
temperature FLOAT FIELD COMMENT 'temperature',
humidity FLOAT FIELD COMMENT 'humidity',
status Boolean FIELD COMMENT 'status',
arrival_time TIMESTAMP FIELD COMMENT 'arrival_time'
) COMMENT 'table1' WITH (TTL=31536000000);
```
创建空表 tableB
```SQL
CREATE TABLE if not exists tableB ();
```
创建表 tableC
```SQL
CREATE TABLE tableC (
station STRING TAG,
temperature int32 FIELD COMMENT 'temperature'
) with (TTL=DEFAULT);
```
创建表 table1 并自定义时间列:命名为time_test, 位于表的第二列 (V2.0.8 起支持)
```SQL
CREATE TABLE table1 (
region STRING TAG,
time_user_defined TIMESTAMP TIME,
temperature FLOAT FIELD
);
```
注意:若您使用的终端不支持多行粘贴(例如 Windows CMD),请将 SQL 语句调整为单行格式后再执行。
### 2.2 查看表
**语法:**
```SQL
SHOW TABLES (DETAILS)? ((FROM | IN) database_name)?
```
**示例:**
查看数据库 database1 下的所有表
```SQL
show tables from database1;
```
```shell
+---------+---------------+
|TableName| TTL(ms)|
+---------+---------------+
| table1| 31536000000|
+---------+---------------+
```
查看数据库 database1 下的所有表及其属性信息
```sql
show tables details from database1;
```
```shell
+---------------+-----------+------+-------+
| TableName| TTL(ms)|Status|Comment|
+---------------+-----------+------+-------+
| table1|31536000000| USING| table1|
+---------------+-----------+------+-------+
```
### 2.3 查看表的列
**语法:**
```SQL
(DESC | DESCRIBE) <TABLE_NAME> (DETAILS)?
```
**示例:**
查看表 table1 的列信息
```SQL
desc table1;
```
```shell
+------------+---------+---------+
| ColumnName| DataType| Category|
+------------+---------+---------+
| time|TIMESTAMP| TIME|
| region| STRING| TAG|
| plant_id| STRING| TAG|
| device_id| STRING| TAG|
| model_id| STRING|ATTRIBUTE|
| maintenance| STRING|ATTRIBUTE|
| temperature| FLOAT| FIELD|
| humidity| FLOAT| FIELD|
| status| BOOLEAN| FIELD|
|arrival_time|TIMESTAMP| FIELD|
+------------+---------+---------+
```
查看表 table1 的列详细信息
```sql
desc table1 details;
```
```shell
+------------+---------+---------+------+------------+
| ColumnName| DataType| Category|Status| Comment|
+------------+---------+---------+------+------------+
| time|TIMESTAMP| TIME| USING| null|
| region| STRING| TAG| USING| null|
| plant_id| STRING| TAG| USING| null|
| device_id| STRING| TAG| USING| null|
| model_id| STRING|ATTRIBUTE| USING| null|
| maintenance| STRING|ATTRIBUTE| USING| maintenance|
| temperature| FLOAT| FIELD| USING| temperature|
| humidity| FLOAT| FIELD| USING| humidity|
| status| BOOLEAN| FIELD| USING| status|
|arrival_time|TIMESTAMP| FIELD| USING|arrival_time|
+------------+---------+---------+------+------------+
```
### 2.4 查看表的创建信息
**语法:**
```SQL
SHOW CREATE TABLE <TABLE_NAME>
```
**示例:**
查看表 table1 的创建信息
```SQL
show create table table1;
```
```shell
+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table| Create Table|
+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|table1|CREATE TABLE "table1" ("region" STRING TAG,"plant_id" STRING TAG,"device_id" STRING TAG,"model_id" STRING ATTRIBUTE,"maintenance" STRING ATTRIBUTE,"temperature" FLOAT FIELD,"humidity" FLOAT FIELD,"status" BOOLEAN FIELD,"arrival_time" TIMESTAMP FIELD) WITH (ttl=31536000000)|
+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
```
### 2.5 修改表
**语法:**
```SQL
#addColumn;
ALTER TABLE (IF EXISTS)? tableName=qualifiedName ADD COLUMN (IF NOT EXISTS)? column=columnDefinition COMMENT 'column_comment';
#dropColumn;
| ALTER TABLE (IF EXISTS)? tableName=qualifiedName DROP COLUMN (IF EXISTS)? column=identifier;
#setTableProperties;
// set TTL can use this;
| ALTER TABLE (IF EXISTS)? tableName=qualifiedName SET PROPERTIES propertyAssignments;
| COMMENT ON TABLE tableName=qualifiedName IS 'table_comment';
| COMMENT ON COLUMN tableName.column IS 'column_comment';
#changeColumndatatype;
| ALTER TABLE (IF EXISTS)? tableName=qualifiedName ALTER COLUMN (IF EXISTS)? column=identifier SET DATA TYPE new_type=type;
```
**示例:**
表 table1 增加 tag 列 a
```SQL
ALTER TABLE table1 ADD COLUMN IF NOT EXISTS a TAG COMMENT 'a';
```
表 table1 增加 field 列 b
```SQL
ALTER TABLE table1 ADD COLUMN IF NOT EXISTS b FLOAT FIELD COMMENT 'b';
```
修改表 table1 的 TTL
```SQL
ALTER TABLE table1 set properties TTL=3600;
```
表 table1 增加注释
```SQL
COMMENT ON TABLE table1 IS 'table1';
```
表 table1 的 a 列去掉注释
```SQL
COMMENT ON COLUMN table1.a IS null;
```
修改表 table1 的 b 列的数据类型
```SQL
ALTER TABLE table1 ALTER COLUMN IF EXISTS b SET DATA TYPE DOUBLE;
```
### 2.6 删除表
**语法:**
```SQL
DROP TABLE (IF EXISTS)? <TABLE_NAME>
```
**示例:**
```SQL
DROP TABLE table1;
DROP TABLE database1.table1;
```