OSS支持用户在OSS目录下上传不同表结构的数据,MaxCompute建立的OSS外部表可以根据字段名称对数据进行读写。本文为您介绍在MaxCompute中使用OSS外部表根据字段名称对数据进行读写。

前提条件

根据字段名称对数据进行读写

  1. 上传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"}
  2. 登录MaxCompute连接开发工具。
    MaxCompute支持您从如下平台创建OSS外部表,选择一个开发工具使用。
    创建方式 平台
    基于MaxCompute SQL创建OSS外部表 MaxCompute客户端
    使用控制台(查询编辑器)连接
    DataWorks控制台-ODPS SQL节点
    MaxCompute Studio-SQL程序
    以可视化方式创建OSS外部表 MaxCompute Studio-SQL程序
    DataWorks控制台-外部表
  3. 在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/';
  4. 查询数据。
    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         |
    +------------+------------+------------+
  5. 向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         |
    +------------+------------+------------+