DLA支持分区表的INSERT OVERWRITE

本文涉及的产品
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
对象存储 OSS,恶意文件检测 1000次 1年
简介: ![insert-vs-overwrite.jpg](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/2cb3c0a8d7d3ea7a2468dfc154b93573.jpg) [DLA](https://www.aliyun.com/product/datalakeanalytics) 最近加入了对分区表insert overwrit

insert-vs-overwrite.jpg

DLA 最近加入了对分区表insert overwrite的支持,这篇文章给您介绍一下。

授权

DLA目前对用户的OSS文件是没有删除权限的,因为insert overwrite需要对分区表中的老数据进行删除,因此需要做有删除数据的权限,因此我们要进行一个授权, 这个授权分两步:

  1. 创建一个自定义授权策略。
  2. 把策略授权给DLA的角色。

创建一个自定义授权策略

首先我们访问阿里云RAM的权限策略管理页面, 点击"点击新建权限策略":

policies.png

输入策略名称,比如 DLADeleteOssObject , "配置模式"选择 脚本配置 , 贴入如下内容:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:DeleteObject"
            ],
            "Resource": "acs:oss:*:*:<your-bucket-name>/*",
            "Effect": "Allow"
        }
    ]
}

注意: 这里<your-bucket-name> 要换成你自己使用DLA过程中要用的bucket的名字。
如果你想更细粒度的控制DLA拥有的权限,你可以在这里填上运行DLA删除文件的具体OSS的完整路径 -- 这也是我们推荐的。

把策略授权给DLA的角色

打开RAM角色管理 页面,DLA使用的是一个名叫AliyunOpenAnalyticsAccessingOSSRole 的角色来访问用户的OSS,我们这一步需要把前面创建的策略授权给这个角色, 我们搜索 AliyunOpenAnalyticsAccessingOSSRole 找到这个角色:

search-dla-oss-role.png

点击角色名称上的链接进入详情页面,点击"添加权限":

click-add-privilege-button.png

筛选框里面选择”自定义策略“,找到前面创建的策略,完成授权。

complete-auth.png

Insert Overwrite!

权限授予完成之后,我们就可以来试一下了, 语法上跟普通的Insert Into类似,只要把INTO 换成OVERWRITE即可:

mysql> CREATE EXTERNAL TABLE `oss_demo`.`person_test` (
    -> `id` int,
    -> `name` string,
    -> `age` int
    -> )
    -> PARTITIONED BY (
    ->     dt string
    -> )
    -> STORED AS `PARQUET`
    -> LOCATION 'oss://test_bucket/datasets/oss_demo/person_test/'
    -> TBLPROPERTIES (
    ->     'auto.create.location' = 'true'
    -> );
Query OK, 0 rows affected (0.52 sec)

mysql> insert into person_test values (1, 'james', 10, '20190101');
+------+
| rows |
+------+
|    1 |
+------+
1 row in set (0.52 sec)

mysql> select * from person_test;
+------+-------+------+----------+
| id   | name  | age  | dt       |
+------+-------+------+----------+
|    1 | james |   10 | 20190101 |
+------+-------+------+----------+
1 row in set (0.15 sec)

mysql> insert into person_test values (2, 'bond', 20, '20190101');
+------+
| rows |
+------+
|    1 |
+------+
1 row in set (0.21 sec)

mysql> select * from person_test;
+------+-------+------+----------+
| id   | name  | age  | dt       |
+------+-------+------+----------+
|    2 | bond  |   20 | 20190101 |
|    1 | james |   10 | 20190101 |
+------+-------+------+----------+
2 rows in set (0.09 sec)

mysql> insert overwrite person_test values (3, 'lily', 30, '20190101');
+------+
| rows |
+------+
|    1 |
+------+
1 row in set (0.61 sec)

mysql> select * from person_test;
+------+------+------+----------+
| id   | name | age  | dt       |
+------+------+------+----------+
|    3 | lily |   30 | 20190101 |
+------+------+------+----------+
1 row in set (0.13 sec)

注意倒数最后两句SQL,在执行了 insert overwrite 之后,表里面的数据被换成了新插入的一条数据。

总结

今天给大家介绍了一下DLA分区表的insert overwrite的功能,如果用户想做一定的ETL清洗,那么insert overwrite的功能还是非常必要的。

Happy DLAing

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
分布式计算 MaxCompute 开发工具
在MaxCompute中,使用`CREATE TEMPORARY TABLE`语句创建的临时表
【2月更文挑战第18天】在MaxCompute中,使用`CREATE TEMPORARY TABLE`语句创建的临时表
37 3
|
4月前
|
SQL HIVE
hive insert to 和insert overwrite 区别
hive insert to 和insert overwrite 区别
44 0
|
SQL 分布式计算 数据库
HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中
HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中
594 0
|
SQL 存储 数据挖掘
HIVE 表 DLL 基本操作(一)——第2关:Create/Drop/Truncate 表任务描述
HIVE 表 DLL 基本操作(一)——第2关:Create/Drop/Truncate 表任务描述
279 0
|
SQL Linux 数据库
Hive 表 DML 操作——Hive 表 DML 操作——第1关:将文件中的数据导入(Load)到 Hive 表中
Hive 表 DML 操作——Hive 表 DML 操作——第1关:将文件中的数据导入(Load)到 Hive 表中
580 0
|
SQL 算法 关系型数据库
开发指南—DDL语句—分区表语法—CREATE TABLE
本文主要介绍使用DDL语句进行建表的语法、子句、参数和基本方式
|
存储 分布式计算 数据库
Hive----建库、建表扩展语句--2
建库、建表扩展语句
223 0
|
存储 SQL 数据库
Hive----建库、建表扩展语句--1
建库、建表扩展语句
253 0
|
SQL 存储 Shell
hive:建库建表、表分区、内部表外部表、数据导入导出
hive:建库建表、表分区、内部表外部表、数据导入导出
366 0
|
SQL 存储 分布式计算
Apache Hive--DDL--创建表--分桶表创建&amp;分桶数据导入| 学习笔记
快速学习Apache Hive--DDL--创建表--分桶表创建&amp;分桶数据导入
Apache Hive--DDL--创建表--分桶表创建&amp;分桶数据导入| 学习笔记