DLA支持Parquet/ORC/OTS表的Alter Table Add Column

简介: 蛮多客户提过需求:要给一个表添加列,之前推荐的做法是让客户把表删掉重建,因为DLA是计算存储分离的,删掉的其实只是计算层的元数据,存储层的数据不会动,还是比较轻量级的一个操作。不过这种做法对于一些有特别多分区的表来说代价还是还是挺大的,要删掉所有的分区,而且可能会影响其它正在使用这个表的任务,为了解决用户的这个痛点,我们现在对部分数据源(Parquet/Orc)进行了的Alter Table Add Column的支持。

蛮多客户提过需求:要给一个表添加列,之前推荐的做法是让客户把表删掉重建,因为DLA是计算存储分离的,删掉的其实只是计算层的元数据,存储层的数据不会动,还是比较轻量级的一个操作。不过这种做法对于一些有特别多分区的表来说代价还是还是挺大的,要删掉所有的分区,而且可能会影响其它正在使用这个表的任务,为了解决用户的这个痛点,我们现在对部分数据源(Parquet/ORC/OTS)进行了的Alter Table Add Column的支持。

Alter Table Add Column

下面我们以Parquet表为例来介绍一下这个功能。首先我们先创建一个parquet的库表:

mysql> CREATE DATABASE alter_table_add_column_db with dbproperties (
    ->     catalog = 'oss',
    ->     location = 'oss://hello/datasets/test/');
Query OK, 0 rows affected (0.58 sec)

mysql> CREATE EXTERNAL TABLE alter_table_add_column_db.`parquet_test` (
    -> `id` int,
    -> `name` string,
    -> `age` int
    -> )
    -> stored as parquet
    -> LOCATION 'oss://hello/datasets/test/alter_table_add_column_db/parquet_test/'
    -> TBLPROPERTIES (
    ->     'auto.create.location' = 'true'
    -> );
Query OK, 0 rows affected (0.65 sec)

我们再往里面插入一条数据进行验证:

mysql> insert into alter_table_add_column_db.`parquet_test` values (1, 'james', 10);
+------+
| rows |
+------+
|    1 |
+------+
1 row in set (0.98 sec)

mysql> select * from alter_table_add_column_db.`parquet_test`;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | james |   10 |
+------+-------+------+
1 row in set (0.23 sec)

然后我们添加一个列:

mysql> alter table alter_table_add_column_db.`parquet_test` add columns(gender string);
Query OK, 0 rows affected (0.94 sec)

查询一下老数据:

mysql> select * from alter_table_add_column_db.`parquet_test`;
+------+-------+------+--------+
| id   | name  | age  | gender |
+------+-------+------+--------+
|    1 | james |   10 | NULL   |
+------+-------+------+--------+
1 row in set (0.27 sec)

可以看到,新加的列有了,对于老数据这个列的值是NULL。我们再来插入一条新数据,这个新数据里面新列gender是有值的:

mysql> insert into alter_table_add_column_db.`parquet_test` values (2, 'bond', 20, 'male');
+------+
| rows |
+------+
|    1 |
+------+
1 row in set (0.91 sec)

最后再来验证一下插入之后新老数据:

mysql> select * from alter_table_add_column_db.`parquet_test`;
+------+-------+------+--------+
| id   | name  | age  | gender |
+------+-------+------+--------+
|    1 | james |   10 | NULL   |
|    2 | bond  |   20 | male   |
+------+-------+------+--------+
2 rows in set (0.32 sec)

可以看到新老数据对于新字段gender都有了对应的正确的值。
Happy DLAing.

欢迎关注数据湖技术社区

数据湖开发者社区由 阿里云开发者社区 与 阿里云Data Lake Analytics团队 共同发起,致力于推广数据湖相关技术,包括hudi、delta、spark、presto、oss、元数据、存储加速、格式发现等,学习如何构建数据湖分析系统,打造适合业务的数据架构。

x

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
表格存储表删除后重建,为什么会占用空间
表格存储表删除后重建,为什么会占用空间
102 3
|
存储 NoSQL Java
OTS(Table Store)
OTS(Table Store)是阿里云提供的分布式NoSQL数据库服务,支持海量结构化数据的存储、查询和分析。OTS具有高可用、高性能、高扩展性和低成本等特点,适用于各种场景下的数据存储和处理,例如电商、物流、游戏等。
4541 2
|
存储 SQL 开发框架
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
本文主要结合物模型的结构体类型属性数据,演示payLoad的设置及规则引擎的配置。
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
|
存储 NoSQL JavaScript
Tablestore入门手册--表(Table)管理
表管理接口概述 API 描述 createTable 创建表 deleteTable 删除表 listTable 列出实例下的所有表 updateTable 更新表(在表被创建之后,动态的更改表的配置或预留吞吐量)
1990 0
|
NoSQL 数据库 索引
海量结构化数据存储技术揭秘:Tablestore表设计最佳实践
前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库。在处理海量数据时,方案设计非常重要,合理的设计才能够发挥出数据库的性能水平。本文主要介绍Tablestore在表设计方面的一些实践经验,供大家参考。
10281 1
|
NoSQL 开发工具
Table Store(原OTS) 如何支持大cell写入
TableStore设计目标是快速读写简单的表数据,所以对单列大小限制在2M Byte(一次写入超大cell会引起系统波动),对大部分用户来说,这个值都是足够的,但是仍然有一些用户碰到了如下问题:用户自身绝大部分cell都能保证低于2M,按时有极个别的Cell高达20M,此时如果专门为这些大cell
3099 1
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
118 3