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

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
6月前
表格存储表删除后重建,为什么会占用空间
表格存储表删除后重建,为什么会占用空间
52 3
|
Web App开发 存储 NoSQL
阿里云表格存储(table store)属于存储类别还是数据库类别?
什么是表格存储? 表格存储是阿里云提供的一种数据服务。阿里云官方文档的定义如下: 表格存储(Table Store)是阿里云自研的NoSQL多模型数据库,提供海量结构化数据存储以及快速的查询和分析服务。
2738 0
|
9月前
|
存储 NoSQL JavaScript
OTS(Table Store)
OTS(Table Store)是阿里云提供的分布式NoSQL数据库服务,支持海量结构化数据的存储、查询和分析。OTS具有高可用、高性能、高扩展性和低成本等特点,适用于各种场景下的数据存储和处理,例如电商、物流、游戏等。
2406 2
|
存储 运维 负载均衡
基于Tablestore的一站式物联网存储解决方案-表设计篇
## 前言 本章节主要讲解表格存储Tablestore的实例、表的创建步骤和共享充电宝场景的数据表设计。 ​ ## 表设计 ### 表功能设计 这里按照功能需求分为三张数据表:元数据表、订单数据表、元数据时序表 - 元数据表 元数据表保存了机柜的最新状态数据。用户租借、归还充电宝,以及运维人员上下线机柜,都会更新元数据表记录。在元数据表上建立索引,可提供多维查询的能力。对元数据表按照字段进行
717 0
|
存储 SQL 开发框架
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
本文主要结合物模型的结构体类型属性数据,演示payLoad的设置及规则引擎的配置。
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
|
存储 NoSQL JavaScript
Tablestore入门手册--表(Table)管理
表管理接口概述 API 描述 createTable 创建表 deleteTable 删除表 listTable 列出实例下的所有表 updateTable 更新表(在表被创建之后,动态的更改表的配置或预留吞吐量)
1833 0
|
NoSQL 数据库 索引
海量结构化数据存储技术揭秘:Tablestore表设计最佳实践
前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库。在处理海量数据时,方案设计非常重要,合理的设计才能够发挥出数据库的性能水平。本文主要介绍Tablestore在表设计方面的一些实践经验,供大家参考。
9782 0