联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.2 数据定义语言(DDL)
更新时间:4/29/2025, 9:00:32 AM

数据定义语言(Data Definition Language)一般由 CREATE和DROP开头,作用于DATABASE,TABLE,FUNCTION等表对象,对它们进行添加,删除和修改等操作。

DDL 用于创建、删除、修改和清空数据库中的对象,包括数据库、表、视图等等。 DDL 语句包含: ALTER …​ 、CREATE …​ 、DROP …​ 、COMMENT、RENAME。

按照操作对象,我们主要展示本产品中定义数据库定义表定义视图

  • 本产品不支持 CREATE USER 语句,请在 Guardian 中统一进行用户及角色的管理

定义数据库

数据库是组织、存储和管理数据的仓库,而定义数据库主要包括创建数据库修改数据库属性以及删除数据库

另外我们还向你提供使用显示描述数据库的基本操作方式。

CREATE DATABASE

功能描述

  • 使用 CREATE DATABASE 创建一个新的数据库。

注意事项

  • 建议根据业务系统和项目创建 DATABASE,并通过Guardian分别设置不同用户的权限。

  • DATABASE 的创建者默认为 DATABASE 的 OWNER。

  • 如果 <database_name> 指定的数据库已经存在,会报错, 加上 IF NOT EXISTS 选项在建库前检测是否已存在同名库。

  • 在安全模式下,在指定的 HDFS 路径创建数据库的用户必须是这个 HDFS 路径的 OWNER。

语法格式

CREATE DATABASE [IF NOT EXISTS] <database_name>--[1]
[COMMENT '<text>'] --[2]
[WITH DBPROPERTIES ('<property_name>'='<property_value>', ...)]--[3]
复制

参数说明

  • <database_name>:数据库名称,支持中文、英文、数字、下划线,但是不能只使用数字; 最大长度 128 字节。

  • <text>:注释信息。

  • <property_name>:数据库属性名称。

  • <property_value>:数据库属性值。

  • 可选项 [1],如果 <database_name> 指定的数据库已经存在,会报错,加上 IF NOT EXISTS 选项在建库前检测是否已存在同名库。

  • 可选项 [2],用 [COMMENT] 为数据库加注释,注意注释要放在引号中。

  • 可选项 [3],用于添加一些键值来定义数据库属性。

示例

例 6. 创建数据库 db_test
CREATE DATABASE IF NOT EXISTS db_test COMMENT 'SQL测试';
复制

推荐阅读

ALTER DATABASE

功能描述

  • 使用 ALTER DATABASE 修改数据库的所有者数据库属性

  • 不建议您重命名数据库,如果一定需要进行此操作,须更改参数 inceptor.rename.database.enabled = true(默认为 false,不支持重命名数据库),再对数据库的名字进行修改。

注意事项

  • 只有拥有数据库所有者权限的用户才能执行 ALTER DATABASE 命令,系统管理员默认拥有此权限。

  • 如果需要查询指定数据库的属性,可以使用 DESC DATABASE 命令查看。

语法格式

  • 修改数据库 DBPROPERTIES

ALTER DATABASE <database_name> SET DBPROPERTIES ('<property_name>'='<property_value>', ...);
复制
  • 修改数据库 OWNER

ALTER DATABASE <database_name> SET OWNER [USER|ROLE] <user_or_role>;--[1]
复制

参数说明

  • <database_name>:已存在的数据库的名称。

  • <property_name>:数据库的属性名称。

  • <property_value>:数据库属性值。

  • <user_or_role>:更改数据库所属者,如果可选项 [1] 中为 USER 则此处取用户名;若为 ROLE 则此处取角色名。

  • 可选项 [1],数据库 OWNER 可以是的用户也可以是角色。

示例

例 7. 修改数据库 DBPROPERTIES、所属者
--修改数据库日期 date 为‘2015-12’
ALTER DATABASE db_test SET DBPROPERTIES ('date'= '2015-12');
复制
--修改数据库所属者为 rachel
ALTER DATABASE db_test SET OWNER USER rachel;
复制

推荐阅读

DROP DATABASE

功能描述

  • 使用 DROP DATABASE 删除已存在的指定数据库。

注意事项

  • 只有数据库所有者有权限执行 DROP DATABASE 命令,系统管理员默认拥有此权限。

  • 不能对系统默认的数据库执行删除操作。如果想查看当前服务中有哪几个数据库,可以用 SHOW DATABASES 命令查看。

  • 执行删除数据库命令,默认需要该数据库为空。若需直接删除非空数据库,添加 CASCADE 来实现。

语法格式

DROP DATABASE [IF EXISTS] <database_name> --[1]
[RESTRICT|CASCADE]; --[2]
复制

参数说明

  • <database_name>:已存在且指定需要删除的数据库的名称。

  • 可选项 [1],如果 <database_name> 指定的数据库不存在,会报错,加上 IF EXISTS 选项避免报错。

  • 可选项 [2],RESTRICT 只能删除空数据库,RESTRICT 能够删除非空数据库。若不设置则默认为 RESTRICT 无法设置非空数据库。

示例

例 8. 删除数据库
DROP DATABASE IF EXISTS db_test;
复制

推荐阅读

USE DATABASE

功能描述

  • 使用 USE 转换当前数据库,运行之后的操作将默认在指定的目标数据库中执行。

注意事项

  • 用户需要具备该数据库的相关权限。

语法格式

USE <database_name>;
复制

参数说明

  • <database_name>:已存在且需要使用的数据库的名称。

示例

USE db_test;
复制

推荐阅读

SHOW DATABASES

功能描述

  • 使用 SHOW DATABASES 展示当前集群中的所有数据库。

语法格式

SHOW DATABASES;
复制

推荐阅读

DESCRIBE DATABASE

功能描述

  • 使用 DESCRIBE DATABASE 查看已存在的数据库的名称、注释信息、位置、所属者名称及类型、参数等信息。

语法格式

DESCRIBE|DESC DATABASE --[1]
[EXTENDED] <database_name>; --[2]
复制

参数说明

  • <database_name>:已存在的数据库的名称。

  • 可选项 [1],描述数据库的关键字支持使用 DESC 缩写。

  • 可选项 [2],添加关键字 EXTENDED 展示完整信息。

示例

DESCRIBE DATABASE db_test;
复制

输出示例:

+-------------+-------+---------------------------------------------------------------+----------+----------+----------+
|   db_name   |comment|                             location                          |owner_name|owner_type|parameters|
+-------------+-------+---------------------------------------------------------------+----------+----------+----------+
|db_test      |SQL |hdfs://nameservice1/quark3/user/hive/warehouse/argo_sql_test.db| admin    | USER     |          |
+-------------+-------+---------------------------------------------------------------+----------+----------+----------+
复制

推荐阅读

定义表

表是数据库中的一种特殊数据结构,用于存储数据对象以及对象之间的关系。 所涉及的 SQL 语句,主要包含创建表修改表删除表以及清空表数据

另外我们还向你提供显示描述表的基本操作方式。

TimeLyre表是分布在多个存储实例上的,表有分片数量的属性,由表属性timelyre.tablet.num控制,默认跟集群总磁盘数相同

CREATE TABLE
  • 使用 CREATE TABLE 基础建表语句直接建表(建表时定义列)

  • 使用 CREATE TEMPORARY TABLE 创建临时表

  • 使用 CREATE EXTERNAL TABLE 创建外表

推荐阅读

基本语法创建表

功能描述

  • 使用 CREATE TABLE columns 直接定义列的方式进行建表。

语法格式

  • 定义列建表

    CREATE TABLE [IF NOT EXISTS] --[1]
    [<database_name>.]<table_name> --[2]
    (<column_name1> <DATATYPE1> [NOT NULL] [COMMENT "<column_text>"], --[3]
    <column_name2> <DATATYPE2> [NOT NULL] [COMMENT "<column_text>"],
    <column_name3> <DATATYPE3> [NOT NULL] [COMMENT "<column_text>"],
    ...) [COMMENT "<table_text>"] --[4]
    [STORED AS TIMELYRE/TIMELYRE2] --[5]
    [TBLPROPERTIES|SERDEPROPERTIES ("<property_name>"="<property_value>", ...)];--[6]
    复制

参数说明

  • <database_name>:将表建在指定的数据库中。

  • <table_name>:表名称。

  • <column_name>:列名称,长度不超过 128。

  • <DATATYPE>:数据类型。

  • <column_text>:列注释信息。

  • <table_text>:表注释信息。

  • <property_name>:表属性名称,包括。

  • <property_value>:表属性值。

  • 可选项 [1],如果 <table_name> 指定的表已经存在,会报错,加上 IF NOT EXISTS 选项在建表前检测是否已存在同名表。

  • 可选项 [2],支持指明表所在的数据库名称。

  • 可选项 [3],支持非空 [NOT NULL] 约束。

  • 可选项 [4],用 [COMMENT] 为表或列加注释,注意注释要放在引号中。

  • 可选项 [5],支持使用 STORED AS 指定表的存储格式,TimeLyre中支持的存储格式请参考表格存储格式

  • 可选项 [6],支持使用 TBLPROPERTIES 或 SERDEPROPERTIES 对表的属性进行设定,TimeLyre表中支持的表参数请参考timelyre表格式

示例

例 9. 创建一张TimeLyre表
DROP TABLE IF EXISTS exchange_platform.user_info_tab;
CREATE TABLE exchange_platform.user_info_tab (
  name STRING,
  acc_num INT,
  password STRING,
  citizen_id STRING,
  bank_acc INT,
  reg_date TIMESTAMP,
  acc_level Int
)
STORED AS TIMELYRE
TBLPROPERTIES (
"timelyre.tag.cols"="name",
"timelyre.timestamp.col"="reg_date",
"epoch.engine.enabled"="false"
);
复制
例 10. 创建一张TimeLyre2表
DROP TABLE IF EXISTS exchange_platform.user_info_tab;
CREATE TABLE exchange_platform.user_info_tab (
  name STRING,
  acc_num INT,
  password STRING,
  citizen_id STRING,
  bank_acc INT,
  reg_date TIMESTAMP,
  acc_level Int
)
STORED AS TIMELYRE2
TBLPROPERTIES (
"timelyre.tag.cols"="name",
"timelyre.timestamp.col"="reg_date"
);
复制
创建临时表

临时表可分为局部临时表和全局临时表:

  • 局部临时表 TEMPORARY TABLE 仅在当前 session 可见,当前 session 结束后会被删除。如果一张临时表和一张永久表重名,在临时表所在的 session 中该表名将指代临时表,同名永久表将无法在 session 中访问。临时表不支持分区。

  • 全局临时表 GLOBAL TEMPORARY TABLE 在当前 session1 创建后,其他 session 可见,并可以使用,当 session1 结束后,会等待其他使用到该表的 session 结束使用后删除。全局临时表无法与永久表重名,且其他 session 无法创建同名。全局临时表不支持分区。

功能描述

  • 使用 CREATE TEMPORARY TABLE 命令创建局部临时表。

  • 使用 CREATE GLOBAL TEMPORARY TABLE 命令创建全局临时表。

语法格式

CREATE [GLOBAL] TEMPORARY TABLE  --[1]
[IF NOT EXISTS] -- [2]
[<database_name>.]<table_name>( --[3]
<column_name1> <DATATYPE1> [NOT NULL] [COMMENT "<column_text>"], --[4]
<column_name2> <DATATYPE2> [NOT NULL] [COMMENT "<column_text>"],
<column_name3> <DATATYPE3> [NOT NULL] [COMMENT "<column_text>"],
...) [COMMENT "<table_text>"] --[5]
[STORED AS TIMELYRE/TIMELYRE2] --[6]
[TBLPROPERTIES|SERDEPROPERTIES ("<property_name>"="<property_value>", ...)]; --[7]
复制

参数说明

  • <database_name>:将表建在指定的数据库中。

  • <table_name>:表名称。

  • <column_name>:列名称。

  • <DATATYPE>:数据类型。

  • <column_text>:列注释信息。

  • <table_text>:表注释信息。

  • 可选项 [1],选择创建局部临时表 TEMPORARY TABLE,或是全局临时表 GLOBAL TEMPORARY TABLE。

  • 可选项 [2],如果 <table_name> 指定的表已经存在,会报错,加上 IF NOT EXISTS 选项在建表前检测是否已存在同名表。

  • 可选项 [3],指明表所在的数据库名称。

  • 可选项 [4],支持 [NOT NULL] 约束列数据不能为空 NULL。

  • 可选项 [5],用 [COMMENT] 为表或列加注释,注意注释要放在引号中。

  • 可选项 [6],支持使用 STORED AS 指定表的存储格式,TimeLyre 中支持的存储格式请参考表格存储格式

  • 可选项 [7],支持使用 TBLPROPERTIES 或 SERDEPROPERTIES 对临时表的属性进行设定。

示例

例 11. 创建临时表
-- 创建一张局部临时表
CREATE TEMPORARY TABLE t2_tmp(code STRING, datetime TIMESTAMP, price DOUBLE)
STORED AS TIMELYRE
TBLPROPERTIES (
"timelyre.tag.cols"="code",
"timelyre.timestamp.col"="datetime",
"epoch.engine.enabled"="false"
);;

-- 创建一张全局临时表
CREATE global TEMPORARY TABLE global_tmp(code STRING, datetime TIMESTAMP, price DOUBLE)
STORED AS TIMELYRE
TBLPROPERTIES (
"timelyre.tag.cols"="code",
"timelyre.timestamp.col"="datetime",
"epoch.engine.enabled"="false"
);;
复制
创建外表

外表(External table)是一种特殊类型的数据库对象,它定义了一个可读的数据源,但它不是数据库中的表,而是指向一个外部数据源中数据的元数据。外表提供了一种将外部数据文件与数据库相关联的方法,可以在 SQL 查询中像操作普通表一样使用它们。

外表常用于以下场景中:

  • 数据的导入与导出:可以使用外表将外部数据源中的数据导入到数据库中或者将数据库中的数据导出到外部数据文件中,比如可以将 Excel 或 CSV 格式的数据文件导入到 TimeLyre 数据库中。

  • 数据库数据的备份和恢复:可以将数据库中的数据备份到外部数据文件中,然后再将其恢复到数据库中。

  • 数据的转换和集成:可以使用外表将多个数据源中的数据进行集成,并通过 SQL 查询来获取需要的数据。

需要注意的是,使用外表需要确保外部数据源的数据格式与外表的定义相符,否则会出现查询失败等问题。

语法格式

CREATE [TEMPORARY] EXTERNAL TABLE  --[1]
[IF NOT EXISTS] -- [2]
[<database_name>.]<table_name>( --[3]
<column_name1> <DATATYPE1> [NOT NULL] [COMMENT "<column_text>"], --[4]
<column_name2> <DATATYPE2> [NOT NULL] [COMMENT "<column_text>"],
<column_name3> <DATATYPE3> [NOT NULL] [COMMENT "<column_text>"],
...) [COMMENT "<table_text>"] --[5]
[STORED AS TEXTFILE] --[6]
[TBLPROPERTIES|SERDEPROPERTIES ("<property_name>"="<property_value>", ...)]; --[7]
复制

参数说明

  • <database_name>:将表建在指定的数据库中。

  • <table_name>:表名称。

  • <column_name>:列名称。

  • <DATATYPE>:数据类型。

  • <column_text>:列注释信息。

  • <table_text>:表注释信息。

  • 可选项 [1],添加 TEMPORARY 关键字创建临时表

  • 可选项 [2],如果 <table_name> 指定的表已经存在,会报错,加上 IF NOT EXISTS 选项在建表前检测是否已存在同名表。

  • 可选项 [3],指明表所在的数据库名称。

  • 可选项 [4],支持非空 [NOT NULL] 约束。

  • 可选项 [5],用 [COMMENT] 为表或列加注释,注意注释要放在引号中。

  • 可选项 [6],支持使用 STORED AS 指定外表表的存储格式。TimeLyre 中支持的存储格式请参考表格存储格式

  • 可选项 [7],支持使用 TBLPROPERTIES 或 SERDEPROPERTIES 对临时表的属性进行设定。

示例

例 12. 创建外表
CREATE EXTERNAL TABLE external_t(trans_id INT, acc_num INT, trans_time DATE, trans_type STRING, stock_id STRING, price DECIMAL, amount INT)
STORED AS TEXTFILE;
复制
ALTER TABLE

本节主要向您介绍:

推荐阅读

重命名表

功能描述

  • 使用 RENAME 关键字修改表名称。

语法格式

ALTER TABLE <table_name_old> RENAME TO <table_name_new>;
复制

参数说明

  • <table_name_old>:表原有名称。

  • <table_name_new>:表重命名之后的新名字

示例

ALTER TABLE t7_copy RENAME TO t7_rename;
复制
设置表属性

功能描述

  • 使用 TBLPROPERTIES 设置整个表的一些属性信息,如表的压缩格式、表的存储位置、表的格式、表的注释等。

  • 使用 SERDEPROPERTIES 用于描述表中数据的序列化和反序列化格式,包括分隔符、数据类型等等,

语法格式

ALTER TABLE <table_name> SET TBLPROPERTIES|SERDEPROPERTIES --[1]
('<property_name>' = '<property_value>' ... );
复制

参数说明

  • <table_name>:表名称。

  • <column_name>:列名称。

  • <DATATYPE>:数据类型。

  • <property_name>:表属性名称。

  • <property_value>:表属性值。

  • 可选项 [1],使用 TBLPROPERTIES 或 SERDEPROPERTIES 对表的属性进行设定。

示例

ALTER TABLE t2_tmp SET TBLPROPERTIES ('date'= '2015-12-34')
复制
增加列

功能描述

  • 使用 ALTER TABLE ADD COLUMNS 增加指定表中的列。

注意事项

  • ADD COLUMNS 可以将新的列加入到表中。列的位置不能被定义或更改:

    • 新增加列的默认位置在所有列之后

  • TimeLyre表目前只支持时序主键表进行加列操作

语法格式

ALTER TABLE <table_name> ADD COLUMNS
(<column_name> <DATATYPE> [NOT NULL]--[1]
[COMMENT '<text>']); --[2]
复制

参数说明

  • <table_name>:表名称。

  • <column_name>:列名称。

  • <text>:注释信息。

  • <DATATYPE>:数据类型。

  • 可选项 [1],支持非空 [NOT NULL] 约束。

  • 可选项 [2],用 [COMMENT] 为新增列加注释,注意注释要放在引号中。

示例

例 13. 增加列 add_col, 数据类型为 INT
ALTER TABLE t1 ADD COLUMNS (add_col INT comment '增加列');
复制
修改列

功能描述

  • 使用 ALTER CHANGE COLUMN 修改表中的列名称,数据类型,注释信息

注意事项

  • 该指令仅仅修改表的元数据。

  • TimeLyre表只支持修改列名称,不支持修改数据类型

语法格式

ALTER TABLE <table_name> CHANGE [COLUMN] <col_old_name> <col_new_name> <column_type>--[1]
[COMMENT '<text>']; --[2]
复制

参数说明

  • <table_name>:表名称。

  • <col_old_name>:列的原名称

  • <col_new_name>:列的新名词,可以和 <col_old_name> 相同。

  • <DATATYPE>:数据类型,必须填写,请填写原有数据类型,TimeLyre表不支持修改数据类型。

  • <text>:注释信息。

  • 可选项 [1],缩写时 COLUMN 可省略。

  • 可选项 [2],用 [COMMENT] 为列加注释,注意注释要放在引号中。

示例

例 14. 重命名列
ALTER TABLE t7_rename CHANGE COLUMN trans_id trans_id_changed int COMMENT '重命名列';
复制
改变注释

功能描述

  • 使用 COMMENT ON TABLE 或修改 TBLPROPERTIES 的 'comment' 参数的方式改变表注释信息。

  • 使用 COMMENT ON COLUMN 或 CHANGE [COLUMN] 的方式改变指定表中某一个字段的注释信息

注意事项

  • 使用 CHANGE [COLUMN] 语法时,可以同时修改列名称或添加字段长度,具体操作请参考改变列的相关信息语法格式

定义表注释
  • COMMENT ON TABLE 方式

    -- 设置表注释
    COMMENT ON TABLE [<database_name>.]<table_name> is '<text>';
    
    -- 删除表注释
    COMMENT ON TABLE [<database_name>.]<table_name> is '';
    复制
  • 修改 TBLPROPERTIES 参数方式

    -- 设置表注释
    ALTER TABLE [<database_name>.]<table_name> SET TBLPROPERTIES ('COMMENT' = '<text>');--[1]
    
    -- 删除表注释
    ALTER TABLE [<database_name>.]<table_name> UNSET TBLPROPERTIES ('comment');
    复制
定义列注释
  • COMMENT ON COLUMN 语法

    -- 设置列注释
    COMMENT ON COLUMN [<database_name>.]<table_name>.<column_name> is '<text>';
    
    -- 删除列注释
    COMMENT ON COLUMN [<database_name>.]<table_name>.<column_name> is '';
    复制
  • CHANGE COLUMN 参数方式

    -- 设置列注释
    ALTER TABLE [<database_name>.]<table_name> CHANGE [COLUMN] <column_name> <column_name> <DATATYPE> COMMENT '<text>';
    
    -- 删除列注释
    ALTER TABLE [<database_name>.]<table_name> CHANGE [COLUMN] <column_name> <column_name> <DATATYPE> COMMENT '';
    复制

参数说明

  • <database_name>:将表建在指定的数据库中。

  • <table_name>:表名称。

  • <column_name>:列名称。

  • <DATATYPE>:数据类型。

  • <text>:注释信息。

  • 可选项 [1],可以指定目标表所处数据库名称。

实例

例 15. 通过 COLUMN ON TABLE 定义表注释

添加设置表注释:

COMMENT ON TABLE t1 is 'timelyre 表 t1 的注释 comment on';
SHOW CREATE TABLE t1; --查看建表语句命令,查看添加的注释信息。
复制

删除表注释:

COMMENT ON TABLE t1 is '';
DESC FORMATTED t1; --描述表详细信息命令,查看删除的注释信息。
复制
例 16. 通过 COMMENT ON COLUMN 定义列注释

添加设置表中的列注释:

COMMENT ON COLUMN test_db.tt.c1 is '表 tt 中列 c1 的注释 comment on';
desc table test_db.tt; --查看列信息
复制

删除表中的列注释:

COMMENT ON COLUMN test_db.tt.c1 is '';
desc table test_db.tt; --查看列信息
复制
例 17. 通过 TBLPROPERTIE 定义表注释

添加设置表注释:

ALTER TABLE t1 SET TBLPROPERTIES ('comment' = 'holo 表 t1 的注释');
SHOW CREATE TABLE t1; --查看建表语句命令,查看表的注释信息。
复制

删除表注释:

ALTER TABLE t1 UNSET TBLPROPERTIES ('comment');
DESC FORMATTED t1; --描述表详细信息命令,查看删除的注释信息。
复制
例 18. 通过 CHANGE COLUMN 定义列注释

添加设置表中的列注释:

ALTER TABLE t1 change column trans_id trans_id int COMMENT 't1 表 trans_id 列的注释';
DESC TABLE t1; --查看列信息
复制

删除表中的列注释:

ALTER TABLE t1 change column trans_id trans_id int COMMENT '';
desc table t1; --查看列信息
复制
更改路径

功能描述

  • 使用 ALTER TABLE SET LOCATION 设置表的 HDFS 路径。

  • 使用 ALTER TABLE PARTITION SET LOCATION 设置表中某个分区的 HDFS 路径;

    分区路径可以与其所在表的 HDFS 路径不同,如果不手动更改则默认存在表的 HDFS 路径下。

注意事项

  • TimeLyre 表暂时不支持修改路径功能,因为TimeLyre的数据文件不保存在HDFS上。

  • 修改表位置的用户必须是 <new_location> 的 OWNER,需要具有对应的 HDFS 路径的写入权限。具体查看方式如下:

    1. 集群节点上运行 hdfs dfs -ls <hdfs_path> 查询路径的详细信息:

    2. 输出结果的前三列分别是权限信息,路径拥有者,用户组。

    3. 权限信息中第一位 d 表示这是一个目录,后面三组 rwx 分别表示文件拥有者、用户组和其他用户的读、写和执行权限。其中 r 表示读权限,w 表示写权限,x 表示执行权限,而 - 表示没有对应的权限。

  • 我们建议只对外表进行修改表路径的操作。

语法格式

修改表路径
ALTER TABLE [<database_name>.]<table_name> SET LOCATION '<hdfs_path>';--[1]
复制
修改单值分区路径
ALTER TABLE [<database_name>.]<table_name> PARTITION (<partition_key> = <value>) SET LOCATION "<hdfs_path>";
复制
修改范围分区路径
ALTER TABLE [<database_name>.]<table_name> PARTITION <partition_name> SET LOCATION "<hdfs_path>";
复制

参数说明

  • <database_name>:将表建在指定的数据库中。

  • <table_name>:表名称。

  • <hdfs_path>:HDFS 目录,可以是相对路径也可以是绝对路径。

  • <partition_key>:分区键。

  • <partition_name>:范围分区中的指定某个分区名称。

  • <value>:分区对应取值。

  • 可选项 [1],可以指定目标表所处数据库名称。

示例

--创建 torc 分区分桶表
CREATE TABLE torc_location (a int, b double) partitioned by (p int) CLUSTERED BY (a) INTO 3 BUCKETS STORED  AS  ORC_TRANSACTION;
alter table torc_location add partition (p=1) partition (p=2);

-- 修改表路径
ALTER TABLE torc_location SET LOCATION '';

-- 修改分区路径
ALTER TABLE torc_location partition (p=1) SET LOCATION '';
复制
DROP TABLE

功能描述

  • 使用 DROP TABLE 删除指定的表。

注意事项

  • 默认情况下,删除表会将表移入回收站,7天后才能彻底删除。

语法格式

DROP TABLE [IF EXISTS] <table_name> --[1]
复制

参数说明

  • <table_name>:表名称。

  • 可选项 [1],如果 <table_name> 指定的表不存在,会报错,加上 IF EXISTS 选项避免报错。

示例

例 19. 删除表
DROP TABLE t7_rename;
复制

推荐阅读

TRUNCATE TABLE

功能描述

  • 使用 TRUNCATE TABLE 清空指定表中的所有数据,但不删除表的元数据。

语法格式

TRUNCATE TABLE <table_name>;
复制

参数说明

  • <table_name>:表名称。

示例

例 20. 清空表数据
--插入批量数据:
BATCHINSERT INTO t1 BATCHVALUES (
VALUES (1, 1, '2014-2-1', 'discount', 'NO20140201', 10.00,10),
VALUES(1, 2, '2023-2-28', 'online', 'NO20230228', 12.11,10),
VALUES (1, 3, '2019-10-1', 'wholesale', 'NO20191001', 8.99,1000));

--插入单条数据:
INSERT INTO t1 VALUES(0, 1, '2014-2-1', 'discount', 'NO20140201', 10.00,10);

--清空表数据:
TRUNCATE TABLE t1;

-- 查询表数据
SELECT * from t1;
复制

推荐阅读

SHOW TABLES

功能描述

  • 使用 SHOW TABLES 展示当前数据库中的所有表。

  • SHOW TABLES 还会同时展示当前数据库中的所有视图

  • 使用 SHOW CREATE TABLE 展示指定表的建表信息及部分属性信息。

注意事项

  • 展示建表信息时,可以设置参数使输出结果中不包含表的位置信息:

    set inceptor.show.create.table.without.location=true;
    复制

语法格式

展示数据库中的全部表及视图
SHOW TABLES;
复制
展示某一个表的建表信息及部分属性
SHOW CREATE TABLE <table_name>;
复制

参数说明

  • <table_name>:表名称。

示例

SHOW CREATE TABLE t1;
复制

推荐阅读

DESCRIBE TBALE

功能描述

  • 使用 DESCRIBE TABLE 命令查看表的列信息,包括列名、数据类型、列注释等信息。

  • 使用 DESCRIBE FORMATTED 命令查看指定表的完整信息,包括表所在数据库、用户、创建时间、表注释等属性信息。

  • 使用 DESCRIBE 还可以查看指定表中某一列的信息。

语法格式

查看表中所有列信息
DESCRIBE|DESC --[1]
[TABLE] <table_name>;--[2]
复制
查看表的完整信息
DESCRIBE|DESC FORMATTED <table_name>;
复制
查看目标表中指定某一列的信息
DESCRIBE|DESC <table_name>.<column_name>;
复制

参数说明

  • <table_name>:表名称。

  • <column_name>:列名称。

  • 可选项 [1],描述关键字支持使用 DESC 缩写。

  • 可选项 [2],关键字 TABLE 可省略。

示例

DESC TABLE t1;

DESC FORMATTED t1;

DESCRIBE t1.acc_num;
复制

推荐阅读

定义视图

TimeLyre 支持普通/物化视图,普通视图只是一层简单的查询代理,所涉及的 SQL 语句, 主要包含创建视图替换视图定义改变视图属性删除视图,以及显示描述普通视图及物化视图。

物化视图的更多介绍,请参考见物化视图

  • 视图由一个预定义的查询 SELECT 语句组成。

    1. 对视图可以像表一样进行 INSERT,UPDATE,DELETE 操作。

    2. 但普通视图是一个虚拟的表,是非实物化 (unmaterialized),是一个表中的数据经过某种筛选后的显示方式。 也就是说视图中没有实际的数据,每次对视图进行查询时,创建视图所用的查询语句会被再次执行一次。

  • 视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。

  • 视图可以被嵌套,一个视图中可以嵌套另一个视图。

  • 视图不能有相关联的触发器和默认值,不能在视图后使用 ORDER BY 排序。

  • 当普通视图对应的基本表修改后(如数据写入,增删列等),视图可以进行自动更新。

CREATE VIEW

功能描述

  • 使用 CREATE VIEW AS SELECT 创建视图。

注意事项

  • 在创建视图时可以选择定义列名,但是不能定义列类型,列类型由 AS SELECT <select_statement> 的查询结果决定。

  • CREATE VIEW 的语法和 CTAS 非常相像。区别在于VIEW是非实体化的,CREATE VIEW 给查询创建一个快捷方式,而 CTAS 将查询结果写入磁盘中。

语法格式

CREATE VIEW [IF NOT EXISTS] <view_name> --[1]
[(<column_name>, <column_name>,...)]--[2]
AS SELECT <select_statement>;
复制

参数说明

  • <view_name>:视图名称。

  • <column_name>:列名称。

  • <select_statement>:子查询语句结果。

  • 可选项 [1],如果 <view_name> 指定的视图已经存在,会报错,加上 IF NOT EXISTS 选项避免报错。

  • 可选项 [2],支持定义视图的列名。

示例

例 21. 创建视图
CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1;
复制

推荐阅读

CREATE OR REPLACE VIEW

功能描述

  • 当定义的视图名称已经存在时,将修改替换原视图的定义。

  • 当定义的视图名称不存在,则与 CREATE VIEW 语法功能相同。

注意事项

  • 如果一个视图有分区,那么它不能通过 CREATE OR REPLACE VIEW 替换。

语法格式

CREATE OR REPLACE VIEW <view_name> AS SELECT <select_statement>;
复制

参数说明

  • <view_name>:视图名称。

  • <select_statement>:子查询语句结果。

示例

例 22. 替换视图定义
CREATE OR REPLACE VIEW v1 AS SELECT trans_id,acc_num FROM t1;
复制

推荐阅读

ALTER VIEW

功能描述

  • 使用 ALTER VIEW SET TBLPROPERTIES 设定指定视图的自定义属性。

语法格式

ALTER VIEW <view_name> SET TBLPROPERTIES ('<property_name>'='<property_value>');
复制

参数说明

  • <view_name>:视图名称。

  • <property_name>:视图属性名称。

  • <property_value>:视图属性值。

示例

例 23. 改变视图参数
ALTER VIEW v1 SET TBLPROPERTIES ('date'='2023-2-8');
复制

推荐阅读

DROP VIEW

功能描述

  • 使用 DROP VIEW 删除视图。

注意事项

  • DROP VIEW 将指定视图的元数据删除。虽然视图和表有很多共同之处,但是 DROP TABLE 不能用来删除 VIEW。

  • 如果删除的视图被其他视图所使用,不会给出任何警告。

  • 依靠于被删除视图的视图会变成无效视图,但是用户需要自行处理这些变成无效视图的视图。

语法格式

DROP VIEW [IF EXISTS] <view_name>; --[1]
复制

参数说明

  • <view_name>:视图名称。

  • 可选项 [1],如果 <view_name> 指定的视图已经不存在,会报错,加上 IF EXISTS 选项避免报错。

示例

例 24. 删除视图
DROP VIEW IF EXISTS v1;
复制

推荐阅读

SHOW VIEWS

功能描述

  • 使用 SHOW VIEWS 查看当前数据库中的所有普通视图,不会展示物化视图。

  • 使用 SHOW MATERIALIZED VIEWS 查看当前数据库中的所有物化视图,不会展示普通视图。

注意事项

  • 使用 SHOW TABLES 可以查看当前数据库中的所有表、视图以及物化视图。

语法格式

SHOW VIEWS;
SHOW MATERIALIZED VIEWS;
复制

推荐阅读

DESC VIEW

功能描述

  • 使用 DESCRIBE 查看目标视图查询输出列的信息。

  • 使用 DESCRIBE FORMATTED 查看目标视图的完整信息,包括列信息,所处数据库,所属者信息,表类型,创建视图的原始语句等,查询结果中的部分属性信息及含义如下所示:

    属性名称 含义

    View Original Text

    创建视图时指定的 query 字符串

    View Expanded Text

    是 View Original Text 的扩展形式,主要是为所有列加上限定名等。后续使用视图时主要基于该字符串,而不是View Original Text.

    View Rewrite Enabled

    是否允许用改写该视图。

    View Source Tables(仅物化视图)

    该 materialized view 中涉及到的源表名称

    View Out Of Date(仅物化视图)

    该 materialized view 是否过期,如果源表的数据在建 materialized view 之后有更新,那表示该 materialized view 已过期。

语法格式

DESCRIBE|DESC [TABLE] <view_name>;--[1]
复制
DESCRIBE|DESC FORMATTED <view_name>;
复制

参数说明

  • <view_name>:视图(包括物化视图)的名称。

  • 可选项 [1]:可以选择省略关键字 TABLE。

示例

desc v1;
desc formatted materialized_v1;
复制

推荐阅读