阿里云数据湖分析(dla) 使您能够使用标准 sql 语句直接查询和分析存储在对象存储服务 (oss) 和表存储实例中的数据。

在查询数据之前, 必须根据数据文件的格式和内容在 dla 中创建一个表。本教程以存储在 oss 实例中的文件为例, 说明如何指定表的位置。

开放源码软件位置

在 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可以设置为数据文件本身或数据文件所在的目录。

如果位置设置为数据文件

创建表时, 可以直接将表与数据文件关联。在这种情况下, 必须将 < cn/> 设置为 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';

如果位置设置为目录

如果 < cn/> 设置为 oss 实例中的目录, 则此目录下的所有文件都是表的数据文件。

创建表时, 可以设置 < cn/, 以确定是否遍历此目录下的所有数据文件。如果 < cn/> 设置为默认值或未明确指定, 则 dla 将解析为 < cqut\ 为 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
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive.directories' = 'false');

如果 < cn/> 设置为 false, 则此表的数据文件是 < cn/> 下的 < c2/> 文件:

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
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive

目录设置为 true, 此表的数据文件都是 < cqu> 下的. 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. 如果 < cn/> 是一个目录, 则默认情况下, dla 确定此目录下所有数据文件的格式相同, 并根据表创建语句中指定的 serde 分析文件。如果此目录下的数据文件格式不同, 则 dla 会遇到分析失败。因此, 表中的数据不正确, 查询结果会受到影响。例如, 如果在表创建语句中指定了 .orc as textfile, 但在目录下都有. csv 和. orc 文件, 则在表创建和查询过程中不会报告任何错误。但是, 在运行 < cn/> 语句时, 您可能会看到带有乱码字符或不正确数据的数据。
  2. 目前, dla 不支持带有标头的. csv 文件。如果文件的第一行是标题, 则必须手动处理数据。否则, dla 将标头标识为数据记录。
Comments are closed.