Appearance
数据库管理
创建数据库
sql
CREATE DATABASE [IF NOT EXISTS] <name>
删除数据库
sql
DROP DATABASE [IF EXISTS] <name>
使用数据库
sql
USE <databaseName>
该语句存在会话隔离,当前会话不影响其他会话
使用数据库后,不加数据库名称可查询当前数据库下的表,不可查询属于其他数据库的表:
> USE db1;
> SHOW TABLES;
| tableName |
| --------- |
| tbl1 |
> USE db2;
> SHOW TABLES;
| tableName |
| --------- |
| tbl2 |
> USE db1;
> SELECT ... FROM [db1.]tbl1 ...
正常输出结果
> SELECT ... FROM tbl2 ...
tbl2 not exists in db1
> SELECT ... FROM db2.tbl2 ...
正常输出结果
建表语句
sql
CREATE TABLE [IF NOT EXISTS] [db.]<table_name> (
<field_name> <data_type> [NOT NULL] [DEFAULT <defaultValue>] [KEYCOL] [TIMECOL] [TIMERELEVANTACCURACY <'time_unit'>] [COMMENT <'commentContent'>],
...
) [table_options_list]
table_options_list:
table_option[, table_option]
table_option:
optionKey | optionKey = optionValue
说明:
db: 数据库名称
如果 SQL 中传入 database name,且 database name 在系统中已经存在,表将建立在该数据库中。
如果 SQL 中未传入 database name,将会使用当前使用中的 database name,表将建立在当前使用的数据库中。
如果仍未指定当前使用的数据库,表将建立在默认数据库 (db) 中。
指定当前使用的数据库:
web: 更换 database 选择框。
jdk: 使用连接字符串或显式使用
USE
语句。cli: 使用
USE
语句或在配置文件中指定 Database。
如果 SQL 中传入的 database name 在系统中不存在则会返回错误。
table_name:表名
- 只可以包含英文字母、下划线、阿拉伯数字,并且必须以英文字母开头,并且不能以 _rt 结尾
field_name:字段名
只可以包含英文字母、下划线、阿拉伯数字,并且必须以英文字母开头
语法:
UnicodeLetter (UnicodeLetter | '_' | UnicodeNumber)*
示例:
vin
,create_time
,SORT_NUM123
data_type:数据类型
NOT NULL:非空约束
defaultValue:默认值,时间类型默认值用字符串表示,例如:'1970-01-01 08:00:00',数组类型默认值用数组表示,例如:[1, 2, 3]
KEYCOL:该关键字标识当前列为 key 列,数据表必须有一个 key 列
TIMECOL:该关键字标识当前列为时间列,数据表必须有一个时间列
TIMERELEVANTACCURACY:该关键字标识当前列是时间相关的列,其中 time_unit 为时间单位,可取的值有:s、ms、us、m,分别表示秒、毫秒、微秒、分
commentContent:备注信息
table_options_list: 当前表的配置信息
metatable: 是否是配置表
配置表:可以没有
KeyCol
和TimeCol
数据表:必须要有
KeyCol
和TimeCol
dataSpace: 数据表的数据空间大小
单位为字节,可选单位[b/B, k/K, m/M, g/G],默认单位为 M,也可以直接写数字 N,表示 N(M),如果不设置或值小于等于 0,则不限制
memorySpace: 数据表的内存空间大小
单位为字节,可选单位[b/B, k/K, m/M, g/G],默认单位为 M,也可以直接写数字 N,表示 N(M),如果不设置或值小于等于 0,则不限制
fillTime: 数据表是否支持填充时间
如果设置为 true,则写入 memcache 时,如果时间列为空,系统将补上当前时间,精确到秒
enableTimeslots: 是否启用时间槽
如果设置为 true,则同一个 key 在同一个时间只能有一条数据,可以在 UI 中配置替换规则
CREATE TABLE
语句定义中:大写的关键字可忽略大小写 (例如:
CREATE
,TABLE
等可写为create
,table
)data_type 可忽略大小写 (VtBool,VTBOOL,vtbool 等价)
table_options 的 optionKey 可忽略大小写 (dataSpace,dataspace,DATASPACE 等价)
时间相关列的单位可忽略大小写 ('s', 'S', 'ms', 'MS')
其余字段不忽略大小写 (table_name, field_name, optionValue, defaultValue, commentContent)
例子:
sql
CREATE TABLE kudu_all_type (
vt_bool VtBool DEFAULT false,
vt_int8 VtInt8 DEFAULT 0,
vt_int16 VtInt16 DEFAULT 0,
vt_int32 VtInt32 DEFAULT 0,
vt_int64 VtInt64 DEFAULT 0,
vt_float VtFloat32 DEFAULT 0.0,
vt_float32 VtFloat32 DEFAULT 0.0,
vt_double VtFloat64 DEFAULT 0.0,
vt_float64 VtFloat64 DEFAULT 0.0,
vt_date_time VtDateTime DEFAULT '1970-01-01 08:00:00',
vt_string VtString,
vt_binary VtBinary,
vt_object VtBinary,
vt_map VtBinary,
vt_structure VtBinary,
vt_slice VtBinary,
vt_array VtBinary,
vt_bool_array VtBoolArray,
vt_int8_array VtInt8Array,
vt_int16_array VtInt16Array,
vt_int32_array VtInt32Array,
vt_int64_array VtInt64Array,
vt_float_array VtFloatArray,
vt_double_array VtDoubleArray,
vt_date_time_array VtDateTimeArray,
vt_string_array VtStringArray,
vt_binary_array VtBinaryArray,
vin VtString KeyCol,
e_t VtInt64 DEFAULT 0 TimeRelevantAccuracy 's',
e_t_date VtDateTime DEFAULT '1970-01-01 08:00:00' TimeCol,
sort_num VtInt64 DEFAULT 0
) dataSpace = 1M, memorySpace = 1024, fillTime = true
在上述建表语句中,我们创建了一个名为 kudu_all_type
的数据表,包含 vt_*
的普通列,以及 vin
为主键列(KeyCol),e_t_date
为时间列(TimeCol),e_t
为时间相关列,精度为秒,存储的值为 e_t_date
的 int64
形式。
配置了两个配置项,dataSpace
为 1M,memorySpace
为 1024M,表示数据表的数据空间为 1M,内存空间为 1024M。
sql
CREATE TABLE vehicle_all_type (
vt_bool VtBool DEFAULT false,
vt_int8 VtInt8 DEFAULT 0,
vt_int16 VtInt16 DEFAULT 0,
vt_int32 VtInt32 DEFAULT 0,
vt_int64 VtInt64 DEFAULT 0,
vt_float VtFloat32 DEFAULT 0.0,
vt_float32 VtFloat32 DEFAULT 0.0,
vt_double VtFloat64 DEFAULT 0.0,
vt_float64 VtFloat64 DEFAULT 0.0,
vt_date_time VtDateTime DEFAULT '1970-01-01 08:00:00',
vt_string VtString,
vt_binary VtBinary,
vt_object VtBinary,
vt_map VtBinary,
vt_structure VtBinary,
vt_slice VtBinary,
vt_array VtBinary,
vt_bool_array VtBoolArray,
vt_int8_array VtInt8Array,
vt_int16_array VtInt16Array,
vt_int32_array VtInt32Array,
vt_int64_array VtInt64Array,
vt_float_array VtFloatArray,
vt_double_array VtDoubleArray,
vt_date_time_array VtDateTimeArray,
vt_string_array VtStringArray,
vt_binary_array VtBinaryArray,
vin VtString,
create_time VtDateTime DEFAULT '1970-01-01 08:00:00',
sort_num VtInt64 DEFAULT 0
) Metatable
在上述建表语句中,我们创建了一个名为 vehicle_all_type
的配置表,包含 vt_*
的普通列,以及 vin
,create_time
,sort_num
。
改表语句
sql
-- 新增列 field_name
ALTER TABLE <table_name>
ADD COLUMN <field_name> <data_type> [NOT NULL] [DEFAULT <defaultValue>] [TIMERELEVANTACCURACY <'time_unit'>] [COMMENT <'commentContent'>]
-- 修改列 field_name
ALTER TABLE <table_name>
MODIFY COLUMN <field_name> <data_type> [NOT NULL] [DEFAULT <defaultValue>] [TIMERELEVANTACCURACY <'time_unit'>] [COMMENT <'commentContent'>]
-- 删除列 field_name
ALTER TABLE <table_name>
DROP COLUMN <field_name>
-- 重命名列 field_name 为 new_field_name
ALTER TABLE <table_name>
RENAME COLUMN <field_name> TO <new_field_name>
-- 更新表 Option
ALTER TABLE <table_name>
<table_option_list>
table_options_list:
table_option[, table_option]
table_option:
optionKey | optionKey = optionValue
说明:
key 列和时间列是不能增加和修改的
修改类型支持同类型从小范围改到大范围,例如由 VtInt8 改为 VtInt32,不支持改为不同类型
optionKey 当前支持:
DataSpace: 标识该表占用的最大磁盘空间,其值为带单位或不带单位的数字,例如:100G、102400,可选的单位有:B、K、M、G,非正整数表示改为无限制。默认单位为 M,即 DataSpace=N 表示 N(M),如果不设置或值小于等于 0,则不限制,仅对 数据表) 生效
MemorySpace: 标识该表最大可使用的内存空间,其值为带单位或不带单位的数字,例如:100G、102400,可选的单位有:B、K、M、G,非正整数表示改为无限制,默认单位为 M,即 MemorySpace=N 表示 N(M),如果不设置或值小于等于 0,则不限制,仅对 数据表 生效
DateSpace: 标识该表保存数据的天数,如果不设置或值小于等于 0,则不限制,仅对 数据表) 生效
SpaceOption: 标识 dataSpace 和 dateSpace 的关系,可选值有:AND、OR,AND 表示 DataSpace 和 DateSpace 都满足时才会删除数据,OR 表示 DataSpace 和 DateSpace 满足一个即会删除数据,不填默认为 OR,仅对 数据表) 生效
SpaceHook: 删除多余数据的脚本,例如:rm -ef,仅对 数据表 生效
EnableTimeslot: 标识该表是否启用时间槽,值为 true 或 false,true 表示启用时间槽,false 表示不启用时间槽;不填为 false,只填写 optionKey 为 true,仅对 数据表 生效
FillTime: 标识该表在未传入时间 (时间列为空时),自动使用当前服务器时间填充,填充的时间精度为秒,如果传入的时间列不为空就不再填充 (仅对 数据表) 生效)
例子:
sql
ALTER TABLE vehicle_all_type
ADD COLUMN add_test3 VtInt8 DEFAULT 0,
RENAME COLUMN vt_binary_array TO vt_ba,
DROP COLUMN vt_double,
MODIFY COLUMN vt_int32 VtInt64 DEFAULT 0;
在上述 SQL 中,我们修改了表 vehicle_all_type
:
- 增加列
add_test3
,类型为 VtInt8,默认值为 0 - 重命名列
vt_binary_array
为vt_ba
- 删除列
vt_double
- 修改列
vt_int32
的类型为VtInt64
,默认值为 0
sql
ALTER TABLE vehicle_all_type
dataSpace = 1M, memorySpace = 1k;
修改表 vehicle_all_type
的数据空间大小为 1M,内存空间大小为 1K
将表 dataSpace 从 1M 改回无限制的方式为可以设置 dataSpace = -1
sql
ALTER TABLE vehicle_all_type
dataSpace = -1
删表语句
sql
DROP TABLE [IF EXISTS] <table_name>
说明:
- 只会删除表结构,不会删除数据
- 没有 IF EXISTS 关键字时,如果表不存在,则会报错
例子:
sql
DROP TABLE vehicle_all_type
查看表结构
sql
SHOW COLUMNS FROM [db_name.]<table_name> [FROM <db_name>]
ID(VtInt32) | Name(VtString) | Type(VtInt8) | NotNull(VtBool) | DefaultValue(VtString) | Remarks(VtString) | KeyCol(VtBool) | TimeCol(VtBool) | TimeRelevant(VtBool) | RelevantAccuracy(VtInt8) | GenerateTime(VtInt32) |
---|---|---|---|---|---|---|---|---|---|---|
1 | IsArray | 7 | true | 0 | false | false | false | 0 | 1693900930 | |
2 | Quality | 7 | true | 0 | false | false | false | 0 | 1693900930 | |
3 | TagValue | 7 | true | 0 | false | false | false | 0 | 1693900930 | |
4 | UaDataType | 7 | true | 0 | false | false | false | 0 | 1693900930 | |
5 | TagStringValue | 9 | true | false | false | false | 0 | 1693900930 | ||
6 | HostNameTag | 9 | true | true | false | false | 0 | 1693900930 | ||
7 | e_date | 8 | true | 2000-01-01 00:00:00 | false | true | false | 0 | 1693900930 |
查看表 DDL
语法
sql
SHOW CREATE TABLE [db.]<table_name>
text
db > SHOW CREATE TABLE dsc;
+-----------------+--------------------------------------------------------------------+
| Table(VtString) | Create Table(VtString) |
| dsc | CREATE TABLE db.dsc ( |
| | asd VtDateTime NOT NULL DEFAULT '1970-01-01 08:00:00' TIMECOL, |
| | dss VtString NOT NULL DEFAULT '' KEYCOL |
| | ); |
+-----------------+--------------------------------------------------------------------+