表格 (Table)
在平台中创建的表格包含结构化的不限数量的数据行。表中的数据以多级文件的方式通过高效的列式存储加密保存在云对象存储中,表的元数据保存在平台的元存储中。
平台中你能够使用的表包括:
- 表格: 基础的表,由平台进行托管。下面对表格的使用进行介绍。
- 增量同步表 (binlog表): 用于各类数据库源的基于binlog日志增量同步的表。请参阅 什么是增量同步格
创建表格
在平台中创建的表默认为表格, 采用平台优化的存储方式和格式进行加密储存。 可以通过网页或者使用SQL创建表格。
创建表格必须要有数据库(Database)的写权限。
在网页创建表可以通过以下操作创建一个空表:
- 选择导航栏 数据 » 数据库, 查看当前数据库的列表。
- 选择需要创建表的数据库, 进入数据库详情页。
- 鼠标移动到 创建, 在下拉菜单中选择 表格。
- 在弹出的窗口输入要创建的表的名称和描述。你可以选择指定数据结构信息(列名和列数据类型),如果未指定默认会从后面加载数据中推理出数据结构信息。
- 点击 确认 完成表格创建。
如果在数据库 example 创建空表 person 可以使用SQL:
# 创建空的表格
CREATE TABLE example.person;
# 创建指定schema的表格
CREATE TABLE example.person (name STRING, age INT, salary DOUBLE);
# 指定表格的描述
CREATE TABLE example.person COMMENT '<description>';
也可以在创之前指定默认的数据库, 或在工作表里指定默认的数据库:
USE DATABASE example;
CREATE TABLE person (name STRING, age INT, salary DOUBLE);
您可以通过上传文件创建一个新表:
- 选择导航栏 数据 » 数据库, 查看当前数据库的列表。
- 选择需要创建表的数据库, 进入数据库详情页。
- 鼠标移动到 创建, 在下拉菜单中选择 导入数据创建新表。
- 在弹出的窗口选择数据源, 包括: 本地数据, 文件卷, http文件 和 云对象存储。
- 如果选择文件卷, 需要输入以@开头的文件卷路径。
- 如果选择http文件, 需要输入以http或https开头的文件下载路径。
- 如果选择云对象存储, 需要输入对象存储路径,接入点(ENDPOINT), ACCESS_KEY, SECRET_KEY, SECURITY_TOKEN。
- 点击 确认 来创建表格。
- 对于本地数据, 可以直接创建表格。
- 对于文件卷、http文件和云对象存储, 系统创建工作表并执行建表语句。
可以使用SQL从 文件卷 或 http文件 或 云对象存储 创建新的表:
CREATE TABLE person from @<database_name>.<volume_name>;
下面文章提供了在平台上通过SQL创建表格的几种方式:
删除和恢复表
需要有表所在的数据库(Database)写权限才能删除表。可以通过平台数据库页或者SQL删除表。
在网页可以通过以下操作删除表:
- 选择导航栏 数据 » 数据库, 查看当前数据库的列表。
- 选择需要创建表的数据库, 进入数据库详情页。
- 选择 表格 部分,并在表的列表种找到需要删除的表。
- 在 操作 种选择 删除 来删除选择的表。
如果删除数据库 example 里的 person 表, 可以使用SQL:
DROP TABLE IF EXISTS example.person;
注意删除的表平台默认会保留7天, 在7天之内删除的表可以恢复。如果想强制删除并清空相应的存储空间, 可以使用参数 PURGE:
DROP TABLE IF EXISTS example.person PURGE;
如果在7天之内想恢复删除的表, 可以使用UNDROP命令:
UNDROP TABLE example.person;
关于使用SQL删除和恢复表请参阅:
表的结构 (Schema)
表的结构包含了表的列名、类型等信息。为了兼容不同数据源和支持数据源数据结构的演化, 平台允许提交到同一张表的数据具有不同的结构,并按照原始源数的结构 (data schema) 存储。当读该表的时候,会根据用户指定的表的结构 (read schema) 将底层的数据进行转换,并最终得到跟表结构一致的结果。平台采用了这种 ELT (提取-加载-转换) 的数据加载方式,可以支持更加兼容性的数据整合。
可以在选中的表的页面修改表的列信息:
- 选择导航栏 数据 » 数据库, 选择相应的数据库以及数据库中的表,进入表详情。
- 选择 列信息 可以查看表的列名、数据类型、描述等信息。
- 点击 操作 » 修改, 您可以对列重命名、也可以修改列的数据类型,当读取表数据时,引擎会根据您修改后的数据格式进行数据格式转换。
您也可以通过SQL修改表的结构。例如, 使用SQL在 person 表添加一列 ip:
ALTER TABLE person ADD COLUMN ip STRING;
关于使用SQL修改表的结构请参阅:
数据预览
您可以进入表格详情页,点击 数据预览 栏可以看到表格的一部分样例数据。注意数据预览并不保证显示的样例数据是最新的样例数据。
数据历史
您可以进入表格详情页,点击 数据历史 栏可以看到表格的历史操作 (commit)。一个表格可以看成是一个由很多历史commit构成的只能单向添加的链条。第一个commit的版本号是0, 第二个commit的版本号是1, 以此类推。在数据历史列表里,您可以看到每个历史commit的类型、描述、操作用户、数据量等信息。系统通过事务管理保证在并发情况下每个commit的版本号是连续递增的。
平台也支持用户对表格数据进行回滚。如果一个表格由 commit 0 到 commit k 构成, 那么我们称这个表格的版本是 k。通过版本回滚可以避免错误操作或错误数据比如误删等对数据的影响。
例如版本4和版本5的操作是错误的,您可以回滚到版本3:
- 在表格详情页选择 数据历史 可以查看表的历史 commit。
- 点击 ... 和选择 回滚到版本3。这时候表格会创建一个新的commit, 它undo了版本4和版本5的commit。
您也可以使用sql来查看表格的历史操作:
DESCRIBE HISTORY <table_name>;
您可以通过时间戳和指定版本号来使用sql实现表格的回滚:
# 指定时间戳回滚表格
RESTORE TABLE <table_name> TO TIMESTAMP '2023-01-01 00:00:00';
# 回滚表格到版本1
RESTORE TABLE <table_name> TO VERSION 1;
关于sql查看历史操作和回滚请参阅: