Skip to content

创建数据库/数据表

创建数据库 (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说明取值范围
1VtBool/bool/boolean1布尔型
2VtInt8/tinyint11 字节整型[-128, 127]
3VtInt16/smallint22 字节整型[-2^15, 2^15-1]
4VtInt32/int/integer44 字节整型[-2^31, 2^31-1]
5VtInt64/bigint88 字节整型[-2^63, 2^63-1]
6VtFloat32/float4单精度浮点数[-3.40282e+38, 3.40282e+38], 有效数字位 7 位
7VtFloat64/double8双精度浮点数[-1.79769e+308, 1.79769e+308],有效数字位 16 位
8VtDateTime8时间,支持纳秒[1970-01-01T00:00:00Z, 2262-04-11T23:47:16854775807Z]
9VtString/char/varcharn字符串
10VtBinary/binaryn字节串
11VtBoolArrayn布尔数组
12VtInt8Arrayn1 字节整型数组
13VtInt16Arrayn2 字节整型数组
14VtInt32Arrayn4 字节整型数组
15VtInt64Arrayn8 字节整型数组
16VtFloat32Arrayn单精度浮点数数组
17VtFloat64Arrayn双精度浮点数数组
18VtDateTimeArrayn时间数组
19VtStringArrayn字符串数组
20VtBinaryArrayn字节串数组

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;