背景
用户在使用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文件的目录建表
- 目标表的名字为 my_new_table
- 该文件在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
- 目标表期待的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文件建表
- 目标表的名字为 my_new_table
- 该文件在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
- 目标表期待的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'
)
小结
- 对OSS数据源,CREATE EXTERNAL TABLE LIKE目前已经支持Parquet, ORC, JSON, Avro等格式。
- 对于目录结构中含有格式为 partCol=partVal 的分区目录,DLA也可以自动识别分区列。