Data Lake Analytic(后文简称 DLA)能够帮助用户经过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。spa
在查询前,用户须要根据数据文件的格式和内容在DLA中建立一张表。Data Lake Analytics + OSS数据文件格式处理大全 一文中介绍了如何定义表的SERDE和ROW FORMAT。code
本文将以存储在OSS上的文件为例详细介绍如何指定表LOCATION。orm
DLA中的建表语句的语法为ci
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能够是数据文件自己,也能够是数据文件所在的目录。get
建表时能够将表直接关联到数据文件,此时的LOCATION须要是该文件在OSS上的绝对路径。
例如:io
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也能够指向OSS上的目录,该目录下的文件便是表的数据文件。
建表时,能够经过设置属性 recursive.directories 来控制是遍历该目录下的全部数据文件。默认或不显式指定recursive.directories,DLA会解析为false,即不遍历。社区
例如,OSS上的目录结构为table
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
建表语句为:form
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一个文件,即class
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
例如,建表时指定STORED AS TEXTFILE,可是目录下除了csv文件,还有orc格式的文件。这种状况下,在建表和查询时并不会报错,可是SELECT时可能会看到数据乱码或不许确。
为了给你们带来更好的查询分析体验, 目前DLA还在不断完善中,欢迎你们试用,提出您的宝贵意见或建议。
本文做者:金络
本文为云栖社区原创内容,未经容许不得转载。