Appearance
创建数据库/数据表
创建数据库 (CREATE DATABASE)
该查询用于根据指定名称创建数据库。
语法
sql
CREATE DATABASE [IF NOT EXISTS] <db_name>
数据库其实只是用于存放表的一个目录。
如果查询中存在IF NOT EXISTS
,则当数据库已经存在时,该查询不会返回任何错误。
Database Options
CREATE DATABASE 暂时不支持 Options
IF NOT EXISTS
如果 db_name
不存在,则会执行创建,否则返回空,不会报错
示例
sql
CREATE DATABASE IF NOT EXISTS magus;
创建数据表 (CREATE TABLE)
语法
sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
<column_define_list>
) [table_options]
column_define_list:
column_define[, column_define]
column_define:
field_name data_type [column_options]
column_options:
[NULL | NOT NULL]
|
[DEFAULT <default_value>]
|
[KEYCOL]
|
[TIMECOL]
|
[TIMERELEVANTACCURACY <'time_unit'>]
|
[COMMENT <'comment for column'>]
table_options:
table_option[, table_option]
table_option:
option_key
|
option_key = option_value
在指定的’db’数据库中创建一个名为’table_name’的表,如果查询中没有包含’db’,则默认使用当前选择的数据库作为’db’。后面的是包含在括号中的表结构以及表引擎的声明。
其中表结构声明是一个包含一组列描述声明的组合。
Database Name
如果 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
字段名。只可以包含英文字母、下划线、阿拉伯数字,并且必须以英文字母开头
Data Type
数据类型:
# | 类型 | Bytes | 说明 | 取值范围 |
---|---|---|---|---|
1 | VtBool/bool/boolean | 1 | 布尔型 | |
2 | VtInt8/tinyint | 1 | 1 字节整型 | [-128, 127] |
3 | VtInt16/smallint | 2 | 2 字节整型 | [-2^15, 2^15-1] |
4 | VtInt32/int/integer | 4 | 4 字节整型 | [-2^31, 2^31-1] |
5 | VtInt64/bigint | 8 | 8 字节整型 | [-2^63, 2^63-1] |
6 | VtFloat32/float | 4 | 单精度浮点数 | [-3.40282e+38, 3.40282e+38], 有效数字位 7 位 |
7 | VtFloat64/double | 8 | 双精度浮点数 | [-1.79769e+308, 1.79769e+308],有效数字位 16 位 |
8 | VtDateTime | 8 | 时间,支持纳秒 | [1970-01-01T00:00:00Z, 2262-04-11T23:47:16854775807Z] |
9 | VtString/char/varchar | n | 字符串 | |
10 | VtBinary/binary | n | 字节串 | |
11 | VtBoolArray | n | 布尔数组 | |
12 | VtInt8Array | n | 1 字节整型数组 | |
13 | VtInt16Array | n | 2 字节整型数组 | |
14 | VtInt32Array | n | 4 字节整型数组 | |
15 | VtInt64Array | n | 8 字节整型数组 | |
16 | VtFloat32Array | n | 单精度浮点数数组 | |
17 | VtFloat64Array | n | 双精度浮点数数组 | |
18 | VtDateTimeArray | n | 时间数组 | |
19 | VtStringArray | n | 字符串数组 | |
20 | VtBinaryArray | n | 字节串数组 |
Not Null
如果设置了 NOT NULL 且没有设置默认值,则写入数据时,如果不传入该字段的值,将会报错。
如果设置了 NOT NULL,不管有没有设置默认值,传入的值为 null,将会报错。
Default Values
字段的默认值,根据不同类型的字段,可以使用不同的默认值,时间类型默认值用字符串表示,例如:'1970-01-01 08:00:00',数组类型默认值用 json 数组表示,例如:[1,2,3,4,5] 或者 ["a","b","c","d","e"],特别的 VtBinaryArray 类型暂时不支持默认值。
写入数据时,如果不传入该字段的值,将会使用默认值填充,如果没有默认值,则使用 null 填充。
写数据时,如果传入了该字段的值,将会使用传入的值,即使传入的 null 也会使用。
当表选项 FillTime 为 true 时,写入数据时,如果时间列为 null(不管是传入 null 还是没有传入该字段的值),系统将补上当前时间,精确到秒。
Key Col
该关键字标识当前列为 key 列,数据表必须有一个 key 列
Time Col
该关键字标识当前列为时间列,数据表必须有一个时间列
Time Relevant Accuracy
该关键字标识当前列是时间相关的列,其中 time_unit 为时间单位,可取的值有:s、ms、us、m,分别表示秒、毫秒、微秒、分
Comment
注释信息
Table Options
该关键字表示当前表的配置信息
当前支持:
- MetaTable: 标识该表为配置表,值为 true 或 false,true 表示该表为配置表,false 表示该表为数据表;不填为 false,只填写 option_key 为 true
- 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,则不限制,仅对数据表生效
- DateSpace: 标识该表保存数据的天数,如果不设置或值小于等于 0,则不限制,仅对数据表生效
- SpaceOption: 标识 dataSpace 和 dateSpace 的关系,可选值有:AND、OR,AND 表示 dataSpace 和 dateSpace 都满足时才会删除数据,OR 表示 dataSpace 和 dateSpace 满足一个即会删除数据,不填默认为 OR,仅对数据表生效
- SpaceHook: 删除多余数据的脚本,例如:rm -ef,仅对数据表生效
- EnableTimeslot: 标识该表是否启用时间槽,值为 true 或 false,true 表示启用时间槽,false 表示不启用时间槽;不填为 false,只填写 option_key 为 true, 仅对数据表生效
- FillTime: 标识该表在未传入时间 (时间列为空时),自动使用当前服务器时间填充,填充的时间精度为秒,如果传入的时间列不为空就不再填充 (仅对数据表生效),值为 true 或 false,true 表示支持填充时间,false 表示不支持填充时间;不填为 false,只填写 option_key 为 true
示例
sql
CREATE TABLE kudu_all_type (
vt_bool VtBool DEFAULT false,
vt_int8 VtInt8 DEFAULT 0,
vt_float64 VtFloat64 DEFAULT 0.0,
vt_date_time VtDateTime DEFAULT '1970-01-01 08:00:00',
vt_string VtString,
vt_int32_array VtInt32Array,
vt_int64_array VtInt64Array,
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=100G, MemorySpace=4G, MetaTable=false, FillTime=true;