博客 Trino 中的 SQL 语法 ——表 DDL 语法

Trino 中的 SQL 语法 ——表 DDL 语法

   数栈君   发表于 2024-01-19 10:45  198  0

在Trino中,你可以使用CREATE TABLE语句来创建表,使用ALTER TABLE来修改表的结构和元数据,并使用DROP TABLE来删除表。

下面分别介绍一下这几个操作的语法和参数:

1、创建表 - CREATE TABLE
语法:

CREATE TABLE [ IF NOT EXISTS ]
table_name (
{ column_name data_type [ NOT NULL ]
[ COMMENT comment ]
[ WITH ( property_name = expression [, ...] ) ]
| LIKE existing_table_name
[ { INCLUDING | EXCLUDING } PROPERTIES ]
}
[, ...]
)
[ COMMENT table_comment ]
[ WITH ( property_name = expression [, ...] ) ]
1
2
3
4
5
6
7
8
9
10
11
12
使用CREATE TABLE创建一个新的表。下面是一个示例:

CREATE TABLE orders (
orderkey bigint,
orderstatus varchar,
totalprice double,
orderdate date
)
WITH (format = 'ORC')

# 在Trino中,你可以使用 FORMAT 子句指定查询结果输出的格式。Trino支持多种常见格式,包括文本(text)、CSV、JSON、javax.json、Avro、Parquet、ORC、RCFile等。
1
2
3
4
5
6
7
8
9
其中,my_table是你想要创建的表名,后面的括号中列出了表的列和对应的数据类型。在Trino中可以定义多种数据类型,如integer、varchar、boolean等等。更多数据类型可以查看Trino官方文档。

你可以使用CREATE TABLE的参数进行更高级的操作,例如指定分桶(bucket)、分区(partition)和格式(format),以下是一些常用参数的示例:

CREATE TABLE my_table3 (
column1 int,
column2 varchar(64),
column3 varchar(64),
column4 varchar(64)
)
WITH (
format = 'ORC',
partitioned_by = ARRAY['column3','column4'],
bucketed_by = ARRAY['column2'],
bucket_count = 10
);
# 注意:partitioned字段必须是表的最后的字段
1
2
3
4
5
6
7
8
9
10
11
12
13
这个示例中,表使用ORC格式存储,按照column3和column4列进行了分区,使用column2列进行了分桶,并设置了10个桶。

2、修改表 - ALTER TABLE
使用ALTER TABLE命令修改现有表。下面是一些常见的用法:

添加列
ALTER TABLE my_table ADD COLUMN new_column datatype;
1
修改列
ALTER TABLE my_table ALTER COLUMN column1 TYPE new_datatype;
1
删除列
ALTER TABLE my_table DROP COLUMN column1;
1
添加分区
ALTER TABLE my_table ADD PARTITION (column1 = 'value1', column2 = 'value2');
1
删除分区
ALTER TABLE my_table DROP PARTITION (column1 = 'value1', column2 = 'value2', ...);
1
3、删除表 - DROP TABLE
使用DROP TABLE语句删除现有表。下面是一个示例:

DROP TABLE my_table;

-- 如报错:io.prestosql.spi.security.AccessDeniedException: Access Denied: Cannot drop table
-- 在catalog hive中添加以下两行
-- hive.allow-drop-table=true
-- hive.allow-rename-table=true
1
2
3
4
5
6
注意:删除一个表将会永久删除该表的全部数据,慎重操作!

4、trino 中的分区分桶
在Trino中,你可以使用分区(partition)和分桶(bucket)来优化查询性能,提高查询速度和效率。

1、分区(partition)
分区是指把数据按照一定规则划分成若干部分(比如按照日期、地区、类别等),每个部分就是一个分区。在Trino中,你可以使用 CREATE TABLE 语句的 partitioned_by 子句来创建一个分区表,你可以写入数据到这个表的每个分区。

使用分区对于查询过滤条件的列进行过滤非常高效。Trino实际上将所有数据按照分区规则分布到磁盘的不同目录下,当你执行包含了分区过滤的查询时,Trino会自动发现这个过滤条件,并且只读取符合条件的分区数据,这样就可以大大提高查询效率。

以下是一个创建一个按照日期分区的示例:

CREATE TABLE my_part_table (
id bigint,
name varchar(64),
event_date date
)
WITH (
partitioned_by = ARRAY['event_date']
);
1
2
3
4
5
6
7
8
2、分桶(bucket)
分桶是将表中的数据划分成若干个桶(bucket)存储的方式。在Trino中,你可以使用 CREATE TABLE 语句的 bucketed_by 和 bucket_count 子句来创建一个分桶表。在建表时,你需要定义一个或多个bucket列并设置桶的数量,Trino会根据这些设置把表中的数据分配到不同的桶中。
使用分桶后,Trino优化器可以将查询操作分配到不同的节点上并行执行,以实现更快的查询速度。比如,如果你的分桶表中有100个桶,Trino可以把这100个桶分配到100个不同的节点上并行执行查询操作,从而大大提高查询效率。


以下是一个创建分桶的示例:

CREATE TABLE my_bucket_table (
id INT,
name VARCHAR,
age INT
)
WITH (
bucket_count = 10,
bucketed_by = ARRAY['id']
);

CREATE TABLE my_bucket_table_new (
id INT,
name VARCHAR,
age INT
)
WITH (
bucket_count = 10,
bucketed_by = ARRAY['id']
);

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_35745940/article/details/130665852

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!


《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack  
0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群