Data Lake Analytics中OSS LOCATION的使用说明-阿里云开发者社区

开发者社区> 云原生数据湖 Data Lake Analytics> 正文

Data Lake Analytics中OSS LOCATION的使用说明

简介: 前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。 在查询前,用户需要根据数据文件的格式和内容在DLA中创建一张表。

前言

Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。

在查询前,用户需要根据数据文件的格式和内容在DLA中创建一张表。Data Lake Analytics + OSS数据文件格式处理大全 一文中介绍了如何定义表的SERDE和ROW FORMAT。

本文将以存储在OSS上的文件为例详细介绍如何指定表LOCATION。

LOCATION

DLA中的建表语句的语法为

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name
    [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
    [COMMENT table_comment]
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
    [ROW FORMAT row_format]
    [STORE AS file_format]
        | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
    LOCATION oss_path

其中 LOCATION可以是数据文件本身,也可以是数据文件所在的目录。

LOCATION是数据文件

建表时可以将表直接关联到数据文件,此时的LOCATION需要是该文件在OSS上的绝对路径。
例如:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv';

LOCATION是目录

LOCATION也可以指向OSS上的目录,该目录下的文件即是表的数据文件。
建表时,可以通过设置属性 recursive.directories 来控制是遍历该目录下的所有数据文件。默认或不显式指定recursive.directories,DLA会解析为false,即不遍历。

例如,OSS上的目录结构为

2018-07-05 11:16:11 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv
2018-07-05 11:15:57 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
2018-07-05 11:16:17 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv

建表语句为:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/'
TBLPROPERTIES ('recursive.directories' = 'false');

recursive.directories=false,该表的数据文件为只有LOCATION下的nation.csv一个文件,即

oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv

建表语句为:

CREATE EXTERNAL TABLE loc_file_csv(
    N_NATIONKEY INT,
    N_NAME STRING,
    N_REGIONKEY INT,
    N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/'
TBLPROPERTIES ('recursive.directories' = 'true');

recursive.directories=true,该表的数据文件为LOCATION目录下及其子目录下的所有csv文件,即

oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv

注意事项

  1. 当LOCATION为目录时,DLA默认该目录下的数据文件为相同的数据格式,并根据建表语句中指定的SERDE解析文件。当目录下的数据文件格式不同时,DLA会解析失败,导致表中的数据信息错误,影响查询结果。

例如,建表时指定STORED AS TEXTFILE,但是目录下除了csv文件,还有orc格式的文件。这种情况下,在建表和查询时并不会报错,但是SELECT时可能会看到数据乱码或不准确。

  1. 目前不支持CSV文件有header。当文件的第一行为header时,需要用户自己手动处理数据;否则,会将header识别为一条数据记录

为了给大家带来更好的查询分析体验, 目前DLA还在不断完善中,欢迎大家试用,提出您的宝贵意见或建议。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生数据湖 Data Lake Analytics
使用钉钉扫一扫加入圈子
+ 订阅

云原生数据湖分析Data Lake Analytics是云原生数据湖的分析与计算产品形态,存储计算分离。提供 Serverless Spark、Serverless Presto、一站式数据湖管理;

官方博客
官网链接