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也可以自动识别分区列。
上一篇:使用Data Lake Analytics快速分析OSS上的日志文件


下一篇:教程:Data Lake Analytics + OSS数据文件格式处理大全