OSS支持用户在OSS目录下上传不同表结构的数据,MaxCompute建立的OSS外部表可以根据字段名称对数据进行读写。本文为您介绍在MaxCompute中使用OSS外部表根据字段名称对数据进行读写。
前提条件
- 已开通MaxCompute并创建项目,详情请参见创建MaxCompute项目。
- 已开通OSS并创建存储空间,详情请参见创建存储空间。
根据字段名称对数据进行读写
- 上传ORC数据至OSS指定目录。
本示例在OSS上创建目录
demo7
并上传两个数据文件。说明 实际使用过程中,请以您OSS和文件的实际情况为准。orc_file_with_schema0
:-- 字段信息 `#id` bigint,`#name` stirng -- 对应数据如下: {`#id`:1,`#name`:"a"} {`#id`:2,`#name`:null}
orc_file_with_schema1
:-- 字段信息 age bigint,`#name` string,`#id` string -- 对应数据如下 {age:10,`#name`:"c",`#id`:"3"} {age:20,`#name`:"d",`#id`:"4"}
- 登录MaxCompute连接开发工具。
MaxCompute支持您从如下平台创建OSS外部表,选择一个开发工具使用。
创建方式 平台 基于MaxCompute SQL创建OSS外部表 MaxCompute客户端 使用控制台(查询编辑器)连接 DataWorks控制台-ODPS SQL节点 MaxCompute Studio-SQL程序 以可视化方式创建OSS外部表 MaxCompute Studio-SQL程序 DataWorks控制台-外部表 - 在MaxCompute中创建OSS外部表。
通过执行如下示例命令创建OSS外部表,创建外部表语法详情请参见 创建OSS外部表。
CREATE EXTERNAL TABLE mf_oss_diff_schm ( `#name` string, `#id` string, age bigint ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'mcfed.orc.schema.resolution'='name' ) STORED AS ORC LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/mfoss*******/demo7/';
- 查询数据。
返回结果如下。set odps.ext.oss.orc.native=true; select * from mf_oss_diff_schm;
+------------+------------+------------+ | #name | #id | age | +------------+------------+------------+ | a | 1 | NULL | | NULL | 2 | NULL | | c | 3 | 10 | | d | 4 | 20 | +------------+------------+------------+
- 向OSS外部表写入数据并查询。
insert into table mf_oss_diff_schm values("e","5",30); --查询数据 select * from mf_oss_diff_schm; --返回结果 +------------+------------+------------+ | #name | #id | age | +------------+------------+------------+ | a | 1 | NULL | | NULL | 2 | NULL | | e | 5 | 30 | | c | 3 | 10 | | d | 4 | 20 | +------------+------------+------------+