创建OSS分区表后,可以通过INSERT OVERWRITE重写OSS数据。本文介绍如何写入数据到分区表。

步骤一:创建Schema

  1. 登录DLA控制台
  2. 单击左侧导航栏的Serverless Presto > SQL访问点
  3. 单击登录到DMS,执行以下SQL创建OSS Schema。

    您也可以通过MySQL客户端或者程序代码等方式连接DLA,然后执行以下SQL创建OSS Schema。

    ​CREATE SCHEMA dla_oss_demo with DBPROPERTIES(
     catalog='oss',  #指定创建的Schema类型为OSS。
     location= 'oss://oss-bucket-name/dla/'  #文件所在的OSS Bucket目录,需以/结尾。
     );​

步骤二:创建分区表

​CREATE EXTERNAL TABLE dla (
    prod_name string,
    cnt bigint)
PARTITIONED BY (y string, m string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE
LOCATION 'oss://bucket-name/dla/';​

假设OSS文件的存储路径为:https://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/y=2019/m=3/cnt.txthttps://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/y=2018/m=12/cnt2.txt

步骤三:执行MSCK命令更新分区信息

MSCK REPAIR TABLE dla;

步骤四:执行SHOW PARTITIONS命令查看分区信息

​show partitions dla;
+-----------+
| y=2018/m=12|
| y=2019/m=3 |​

步骤五:查询分区表数据

​select * from dla;
+---------------------------+
|prod_name | cnt | y  |  m  |
+---------------------------+
|鼠标      | 1   |2019 |  3  |
|显示器    | 2   |2019 |  3  |
|键盘      | 4   |2019 |  3  |
|办公桌    | 100 |2018 |  12 |
|椅子      | 150 |2018 |  12 |​

步骤六:向分区表插入一条数据

​insert into dla values ("硬盘",10,"2019","3");
+---------------------------+
select * from dla;
+---------------------------+
|prod_name | cnt | y  |  m  |
+---------------------------+
|硬盘      | 10  |2019 |  3  |
|鼠标      | 1   |2019 |  3  |
|显示器    | 2   |2019 |  3  |
|键盘      | 4   |2019 |  3  |
|办公桌    | 100 |2018 |  12 |
|椅子      | 150 |2018 |  12 |​

步骤七:执行INSERT OVERWRITE向分区表插入数据

​insert overwrite dla values ("电脑",10,"2019","3");
select * from dla;
+---------------------------+
|prod_name | cnt | y  |  m  |
+---------------------------+
|电脑      | 10  |2019 |  3  |
|办公桌    | 100 |2018 |  12 |
|椅子      | 150 |2018 |  12 |​

执行INSERT OVERWRITE后,表中的数据更新为新插入的数据。OSS Bucket中dla/y=2018/m=12/目录下的数据无变化,而dla/y=2019/m=3/目录中cnt.txt文件已被删除,仅剩INSERT OVERWRITE插入的一条数据。