Data Lake Analytics: 基于OSS文件自动推断建表

背景

用户在使用Data Lake Analytics对OSS上的数据建表时,需要预先知道目标文件的格式和schema信息。当目标文件中每条记录对应的列数很多时,需要一个个手动匹配,很不方便。

在新版的Data Lake Analytics中,支持了CREATE EXTERNAL TABLE LIKE 的语法。用户只需要提供表名和目标文件的路径,即可完成建表过程。

本文将重点介绍如何在Data Lake Analytics中使用该语句进行建表。

对OSS文件自动建表

基本语法

CREATE EXTERNAL TABLE table_name LIKE MAPPING ('oss://path/to/target/dir')

例子1

我想针对OSS上的一个包含相同schema的parquet文件的目录建表

  1. 目标表的名字为 my_new_table
  2. 该文件在OSS上的目录结构如下,且file1.parquet, file2.parquet和file3.parquet的schema结构完全相同
oss://mybucket/my_new_table/file1.parquet
oss://mybucket/my_new_table/file2.parquet
oss://mybucket/my_new_table/file3.parquet
  1. 目标表期待的LOCATION为
oss://mybucket/my_new_table/

相应的在Data Lake Analytics中的建表语句如下:

CREATE EXTERNAL TABLE my_new_table LIKE
MAPPING ('oss://mybucket/my_new_table/')

建表成功后,执行SHOW CREATE TABLE语句进行验证。

CREATE EXTERNAL TABLE `my_new_table` (
    `optionalPrimitive` int,
    `requiredPrimitive` int,
    `repeatedPrimitive` ARRAY<int>,
    `optionalMessage` STRUCT<someId:int>,
    `requiredMessage` STRUCT<someId:int>,
    `repeatedMessage` ARRAY<int>
)
STORED AS `PARQUET`
LOCATION 'oss://oss://mybucket/my_new_table/'
TBLPROPERTIES (
    'create.table.like.file' = 'oss://mybucket/my_new_table/'
)

例子2

我想针对OSS上的一个特定Parquet文件建表

  1. 目标表的名字为 my_new_table
  2. 该文件在OSS上的目录结构如下,且file1.parquet, file2.parquet和file3.parquet的schema结构不一样
oss://mybucket/my_new_table/file1.parquet
oss://mybucket/my_new_table/file2.parquet
oss://mybucket/my_new_table/file3.parquet
  1. 目标表期待的LOCATION为
oss://mybucket/my_new_table/file1.parquet

相应的在Data Lake Analytics中的建表语句如下:

CREATE EXTERNAL TABLE my_new_table LIKE
MAPPING ('oss://mybucket/my_new_table/file1.parquet');

建表成功后,执行SHOW CREATE TABLE语句进行验证。

CREATE EXTERNAL TABLE `my_new_table` (
    `optionalPrimitive` int,
    `requiredPrimitive` int,
    `repeatedPrimitive` ARRAY<int>,
    `optionalMessage` STRUCT<someId:int>,
    `requiredMessage` STRUCT<someId:int>,
    `repeatedMessage` ARRAY<int>
)
STORED AS `PARQUET`
LOCATION 'oss://oss://mybucket/my_new_table/file1.parquet'
TBLPROPERTIES (
    'create.table.like.file' = 'oss://mybucket/my_new_table/file1.parquet'
)

小结

  1. 对OSS数据源,CREATE EXTERNAL TABLE LIKE目前已经支持Parquet, ORC, JSON, Avro等格式。
  2. 对于目录结构中含有格式为 partCol=partVal 的分区目录,DLA也可以自动识别分区列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值