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