全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:LOAD

更新时间:Mar 24, 2026

LOAD 命令用于将外部存储(OSS、Hologres、Amazon Redshift、BigQuery)中的数据导入到 MaxCompute 表或分区中。

功能介绍

MaxCompute支持使用load overwriteload into命令将实时数仓Hologres对象存储OSSAmazon RedshiftBigQuery外部存储的CSV格式或其他开源格式数据导入MaxCompute的表或表的分区。其中:

  • Amazon Redshift和BigQuery的数据需要先导入OSS,才可以通过OSS导入MaxCompute。

  • MaxCompute支持将数据按照动态分区方式导入MaxCompute的分区表的分区。

  • load into命令会直接向表或分区中追加数据。load overwrite命令会先清空表或分区中的原有数据,再向表或分区中插入数据。

使用限制

权限要求

  • MaxCompute 权限

    • CreateTableAlter 权限:用于在 MaxCompute 项目空间中创建表或修改表数据。授权操作请参见MaxCompute权限

  • 外部存储权限

    • OSS 权限:需要授权 MaxCompute 访问 OSS 的权限(读取/列举 Object)。推荐使用 STS 模式授权,具备更高安全性。详情请参见STS模式授权

    • Hologres 权限:需要创建一个 RAM 角色,为其授权允许MaxCompute访问的权限,并将角色添加至Hologres实例,完成授权,操作详情请参见创建Hologres外部表(STS模式)

其他限制

  • LOAD命令不支持使用黑白名单参数。

  • 当前只支持将外部存储的数据导入至同区域的MaxCompute项目空间中。

  • 通过OSS导入数据时:

    导入到目标MaxCompute分区表时,目标表的Schema(除分区列)需要和外部数据格式一致,且外部数据的Schema不包含分区列。

  • 通过Hologres导入数据时:

    • 不支持将Hologres分区表数据导入MaxCompute。

    • 不支持使用双签名授权模式的Hologres外表导入数据至MaxCompute。

导入数据

导入外部存储OSS或Hologres数据

导入外部存储OSS或Hologres数据

命令格式

{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES (<Options>)];

参数说明

外部存储:OSS

点击展开查看参数详情

  • table_name:必填。

    需要插入数据的目标表名称。目标表需要提前创建,目标表的Schema(除分区列)需要和外部数据格式一致。

  • pt_spec:可选。

    需要插入数据的目标表分区信息。格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

  • external_location:必填。

    指定读取外部存储数据的OSS目录,格式为'oss://<oss_endpoint>/<object>',详情请参见通过Endpoint和Bucket域名访问OSS,系统会默认读取该目录下所有的文件。

  • StorageHandler:必填。

    指定内置的StorageHandler名称。com.aliyun.odps.CsvStorageHandler是内置的处理CSV格式文件的StorageHandler,定义了如何读或写CSV文件。您只需要指定该参数,相关逻辑已经由系统实现。使用方法和MaxCompute外部表一致,详情请参见创建OSS外部表

  • Options:可选。

    指定外部表相关参数,SERDEPROPERTIES支持的属性和MaxCompute外部表一致,属性列表详情请参见创建OSS外部表

外部存储:Hologres

点击展开查看参数详情

  • table_name:必填。

    需要插入数据的目标表名称。目标表需要提前创建,目标表的Schema(除分区列)需要和外部数据格式一致。

  • pt_spec:可选。

    需要插入数据的目标表分区信息。格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

  • external_location:必填。

    指定Hologres的JDBC连接地址,格式为'<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'

    • endpoint:必填。

      Hologres实例的经典网络域名。获取方式,请参见实例详情

      重要

      目前仅支持通过经典网络域名进行访问。不支持通过VPC 网络域名访问Hologres。

    • port:必填。

      Hologres实例的网络端口。获取方式,请参见实例详情

    • database:必填。

      连接的Hologres数据库名称。更多Hologres数据库信息,请参见CREATE DATABASE

    • ApplicationName:必填。

      默认为MaxCompute,无需修改。

    • schema:可选。

      如果表名在Hologres数据库内是唯一的,或源表是默认Schema中的表,可以不配置该属性。更多Schema信息,请参见CREATE SCHEMA

    • holo_table_name:必填。

      Hologres源表名称。更多Hologres源表信息,请参见CREATE TABLE

  • StorageHandler:必填。

    定义了如何查询Hologres外部表。固定取值为com.aliyun.odps.jdbc.JdbcStorageHandler,使用JdbcStorageHandler连接方式。

  • tblproperties必填。

    指定外部表相关参数,SERDEPROPERTIES支持的属性和MaxCompute外部表一致。

    • mcfed.mapreduce.jdbc.driver.class:必填。

      指定连接Hologres数据库的驱动程序。固定取值为org.postgresql.Driver

    • odps.federation.jdbc.target.db.type:必填。

      指定连接的数据库类型。固定取值为holo

    • odps.federation.jdbc.colmapping:可选。

      如果需要将指定数据源的部分列映射至Hologres外部表,需要配置该参数,指定Hologres源表的字段和Hologres外部表字段的映射关系。

      • 若未配置该参数,按照源表字段名映射至Hologres外部表同名列。

      • 若配置该参数,但是只指定Hologres外部表部分列的映射关系,则按照源表字段名映射至Hologres外部表同名列,其他未指定的列,列名或类型不匹配会报错。

      • 若配置该参数,Hologres里的字段名称存在大写的情形,需要为Hologres字段名称添加双引号("")。格式为:MaxCompute字段1 : "Hologres字段1"[ ,MaxCompute字段2 : "Hologres字段2" ,...]

        说明

        Hologres源表字段是c bool, map_B string, a bigint。Hologres外部表字段是a bigint, x string, c bool

        该参数若配置'x: "map_B"',则可以成功映射并查询Hologres数据。

    • mcfed.mapreduce.jdbc.input.query:可选。读取Hologres数据源表数据。外部表的列、列名与直接查询的Hologres数据源表的列、列名及数据类型保持一致。如果使用了别名,则与别名保持一致。select_sentence格式为SELECT xxx FROM <holo_database_name>.<holo_schema_name>.<holo_table_name>

使用示例

外部存储:OSS

通过内置Extractor(StorageHandler)导入数据。假设MaxCompute和OSS的Owner是同一个账号,通过阿里云内网将vehicle.csv文件的数据导入MaxCompute。

  1. 单击此处完成一键授权

  2. vehicle.csv文件保存至OSS Bucket目录下mc-test/data_location/,地域为oss-cn-hangzhou,并组织OSS目录路径。创建OSS Bucket详情请参见创建存储空间

    根据Bucket、地域、Endpoint信息组织OSS目录路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
  3. 登录MaxCompute本地客户端(odpscmd)创建目标表ambulance_data_csv_load。命令示例如下:

    CREATE TABLE ambulance_data_csv_load (
    vehicleId INT,
    recordId INT,
    patientId INT,
    calls INT,
    locationLatitute DOUBLE,
    locationLongtitue DOUBLE,
    recordTime STRING,
    direction STRING );
    
  4. 执行load overwrite命令,将OSS上的vehicle.csv文件导入目标表。命令示例如下:

    LOAD OVERWRITE TABLE ambulance_data_csv_load
    FROM
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
    STORED BY 'com.aliyun.odps.CsvStorageHandler'
    WITH SERDEPROPERTIES (
        -- AliyunODPSDefaultRole的ARN信息,可通过RAM角色管理页面获取。
        'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole',
        'odps.text.option.delimiter'=','
    );
    

    查看角色的ARN信息请参见查看RAM角色

  5. 查看目标表ambulance_data_csv_load的导入结果。命令示例如下:

    -- 开启全表扫描,仅此Session有效。set odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_csv_load;
    
    -- 返回结果如下:
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | W          |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW         |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+

外部存储:Hologres

  1. 示例场景

    已创建Hologres实例及数据库,并创建一张表;

    已在MaxCompute创建了一个Hologres外部表,通过外部表查询已创建的Hologres表数据如下。

    -- 查询hologres外表:
    SELECT * FROM holo_ext;
    
    -- 返回结果:
    +------------+------+
    | id         | name |
    +------------+------+
    | 1          | abc  |
    | 2          | ereg |
    +------------+------+
  2. 通过LOAD命令将此Hologres表数据导入MaxCompute内表操作示例。

    1. 创建一个MaxCompute内表。

      -- 创建内部表
      CREATE TABLE from_holo(id BIGINT, name STRING);
    2. 通过LOAD命令导入数据至MaxCompute。

      -- load hologres表数据到MaxCompute内部表
      LOAD INTO TABLE from_holo 
      FROM LOCATION 'jdbc:postgresql://hgprecn-cn-wwo3ft0l****-cn-beijing-internal.hologres.aliyuncs.com:80/<YOUR_HOLO_DB_NAME>?application_name=MaxCompute&currentSchema=public&useSSL=false&table=<YOUR_HOLOGRES_TABLE_NAME>/' 
      STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
      WITH SERDEPROPERTIES (
        'odps.properties.rolearn'='acs:ram::18927322887*****:role/hologressrole',
        'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
        'odps.federation.jdbc.target.db.type'='holo'
      );
      
  3. 查询导入结果。

    SELECT * FROM from_holo;
    
    -- 返回结果:
    +------------+------+
    | id         | name |
    +------------+------+
    | 2          | ereg |
    | 1          | abc  |
    +------------+------+

导入其他开源格式数据

导入其他开源格式数据

导入的单个文件大小不能超过3 GB,如果文件过大,建议拆分后导入

命令格式

{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
[ROW FORMAT SERDE '<serde_class>'
  [WITH SERDEPROPERTIES (<Options>)]
]
STORED AS <file_format>;

参数说明

点击展开查看参数详情

  • table_name:必填。

    需要插入数据的目标表名称。目标表需要提前创建,目标表的Schema(除分区列)需要和外部数据格式一致。

  • pt_spec:可选。

    需要插入数据的目标表分区信息。格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

  • external_location:必填。

    指定读取外部存储数据的OSS目录,格式为'oss://<oss_endpoint>/<object>',详情请参见通过Endpoint和Bucket域名访问OSS,系统会默认读取该目录下所有的文件。

  • serde_class:可选。

    使用默认值时,可以省略不写。使用方法和MaxCompute外部表一致,详情请参见创建OSS外部表

  • Options:必填。

    使用默认值时,可以省略不写。指定外部表相关参数,SERDEPROPERTIES支持的属性和MaxCompute外部表一致,属性列表详情请参见创建OSS外部表

  • file_format:必填。

    指定导入数据文件格式。例如ORC、PARQUET、RCFILE、SEQUENCEFILE和TEXTFILE。使用方法和MaxCompute外部表一致,详情请参见创建OSS外部表

使用示例

MaxCompute和OSS的Owner是同一个账号

MaxCompute和OSS的Owner是同一个账号

通过阿里云内网将vehicle.textfile文件的数据导入MaxCompute。

说明

若MaxCompute和OSS的Owner不是同一个账号,授权方式可参见STS模式授权

  1. 单击此处完成一键授权

  2. vehicle.textfile文件保存至OSS Bucket目录下mc-test/data_location/,地域为oss-cn-hangzhou,并组织OSS目录路径。创建OSS Bucket详情请参见创建存储空间

    根据Bucket、地域、Endpoint信息组织OSS目录路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/
  3. 登录本地MaxCompute客户端(odpscmd)创建目标表ambulance_data_textfile_load_pt。命令示例如下:

    CREATE TABLE ambulance_data_textfile_load_pt (
      vehicleId STRING,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitute STRING,
      locationLongtitue STRING,
      recordTime STRING,
      direction STRING
    )
    PARTITIONED BY (
      ds STRING
    );
  4. 执行load overwrite命令,将OSS上的vehicle.textfile文件导入目标表。命令示例如下:

    LOAD OVERWRITE TABLE ambulance_data_textfile_load_pt PARTITION(ds='20200910')
    FROM
      LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
    STORED AS TEXTFILE;
  5. 查看目标表ambulance_data_textfile_load_pt的导入结果。命令示例如下:

    -- 开启全表扫描,仅此Session有效。
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_textfile_load_pt;
    
    -- 返回结果:
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | ds         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | 1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

数据按动态分区方式导入目标表

数据按动态分区方式导入目标表

说明

如果OSS目录下的子目录是以分区名方式组织的,则可以将数据按动态分区的方式导入到分区表。

  1. 单击此处完成一键授权

  2. vehicle1.csv文件和vehicle2.csv文件分别保存至OSS Bucket目录mc-test/data_location/ds=20200909/mc-test/data_location/ds=20200910/,地域为oss-cn-hangzhou,并组织OSS目录路径。创建OSS Bucket详情请参见创建存储空间

    根据Bucket、地域、Endpoint信息组织OSS目录路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200909/'
    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200910/'
  3. 登录MaxCompute本地客户端(odpscmd)创建目标表ambulance_data_csv_load_dynpt。命令示例如下:

    CREATE TABLE ambulance_data_csv_load_dynpt (
      vehicleId STRING,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitute STRING,
      locationLongtitue STRING,
      recordTime STRING,
      direction STRING
    )
    PARTITIONED BY (
      ds STRING
    );
  4. 执行load overwrite命令,将OSS上的文件导入目标表。命令示例如下:

    LOAD OVERWRITE TABLE ambulance_data_csv_load_dynpt PARTITION(ds)
    FROM
      LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    STORED AS TEXTFILE;
    
  5. 查看目标表ambulance_data_csv_load_dynpt的导入结果。命令示例如下:

    -- 开启全表扫描,仅此Session有效。
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_csv_load_dynpt;
    
    -- 返回结果:
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime     | direction  | ds         |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW         | 20200909   |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200909   |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | W          | 20200910   |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+

计费说明

LOAD命令将外部数据加载入数仓,按量付费方式免去对输入的外部数据量的计量,包年包月方式也没有任务计量,但会占用LOAD任务所运行的资源组的计算资源。

相关文档

若希望将MaxCompute项目中的数据导出到外部存储(OSS、Hologres),以供其他计算引擎使用,请参见UNLOAD

导入至MaxCompute

Amazon Redshift 和 BigQuery 的数据需要先导入 OSS,再通过 OSS 导入 MaxCompute。

导入OSS数据

导入到目标MaxCompute分区表时,目标表的Schema(除分区列)需要和外部数据格式一致,且外部数据的Schema不包含分区列。

导入文本格式(CSV / TSV)

使用内置的 StorageHandler 导入 CSV 或 TSV 格式数据。

命令格式

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)];

参数说明

配置项

说明

oss_location

目标 OSS 路径。格式为 oss://<oss_endpoint>/<bucket>/<object_path>

StorageHandler

指定内置处理器:

  • 'com.aliyun.odps.CsvStorageHandler':内置的处理CSV格式文件的StorageHandler,定义了如何读或写CSV文件。

SERDEPROPERTIES

属性配置:

  • 'odps.properties.rolearn':必填,访问 OSS 的 RAM 角色 ARN。

  • 'odps.text.option.delimiter':选填,指定列分隔符,默认为逗号 ,

使用示例

示例1:导入 CSV 文件数据至 MaxCompute

将存储在 OSS 中的 vehicle.csv 文件数据导入至 MaxCompute。vehicle.csv 文件的数据如下:

1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

操作步骤

  1. OSS 侧:登录OSS管理控制台,将 vehicle.csv 文件保存至 OSS Bucket 目录 mc-load/data_location/,地域为oss-cn-hangzhou,并构造 OSS 路径。更多创建 OSS Bucket 信息,请参见控制台创建存储空间。根据 Bucket、区域、Endpoint 信息构造 OSS 路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/
  2. MaxCompute 侧:登录 MaxCompute客户端,创建目标表并执行 LOAD 命令。

    -- 创建目标表
    CREATE TABLE IF NOT EXISTS ambulance_data_csv_load (
        vehicleId INT,
        recordId INT,
        patientId INT,
        calls INT,
        locationLatitute DOUBLE,
        locationLongtitue DOUBLE,
        recordTime STRING,
        direction STRING
    );
    
    -- 执行 LOAD 命令
    LOAD OVERWRITE TABLE ambulance_data_csv_load
    FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/'
    STORED BY 'com.aliyun.odps.CsvStorageHandler'
    WITH SERDEPROPERTIES (
        'odps.properties.rolearn'='acs:ram::123456789:role/AliyunODPSDefaultRole',
        'odps.text.option.delimiter'=','
    );
  3. 验证结果:

    -- 开启全表扫描(仅当前 Session 有效)
    SET odps.sql.allow.fullscan=true;
    
    SELECT * FROM ambulance_data_csv_load;

    返回结果:

    +------------+------------+------------+------------+------------------+-------------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+

示例2:将数据按照动态分区方式导入目标表

将存储在 OSS 中的 vehicle1.csvvehicle2.csv 文件数据导入至 MaxCompute 对应的分区中。vehicle1.csvvehicle2.csv 文件数据如下:

--vehicle1.csv
1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S

--vehicle2.csv
1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

操作步骤

  1. OSS 侧:登录OSS管理控制台,将 vehicle1.csv 文件和 vehicle2.csv 文件分别保存至OSS Bucket目录mc-load/data_location/ds=20200909/mc-load/data_location/ds=20200910/,地域为oss-cn-hangzhou,并构造 OSS 路径。更多创建 OSS Bucket 信息,请参见控制台创建存储空间。根据 Bucket、区域、Endpoint 信息构造 OSS 路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/ds=20200909/'
    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/ds=20200910/'
  2. MaxCompute 侧:登录 MaxCompute客户端,创建目标表并执行 LOAD 命令。

    -- 创建目标表
    create table ambulance_data_csv_load_dynpt (
    vehicleId STRING,
    recordId STRING,
    patientId STRING,
    calls STRING,
    locationLatitute STRING,
    locationLongtitue STRING,
    recordTime STRING,
    direction STRING)
    partitioned by (ds STRING);
    
    -- 执行 LOAD 命令
    load overwrite table ambulance_data_csv_load_dynpt partition(ds)
    from
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
    row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    stored as textfile;
  3. 验证结果:查看目标表的导入结果。

    set odps.sql.allow.fullscan=true;
    select * from ambulance_data_csv_load_dynpt;

    返回结果:

    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | ds         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | SW         | 20200909   |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200909   |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | N          | 20200909   |
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | NE         | 20200910   |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | W          | 20200910   |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20200910   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

导入开源格式(Parquet / ORC 等)

支持导入 Parquet、ORC、JSON、AVRO、RCFILE、SEQUENCEFILE、TEXTFILE 等格式。

语法

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <oss_location>
ROW FORMAT SERDE '<serde_class>'
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)]
STORED AS <file_format>;

核心配置

配置项

说明

oss_location

目标 OSS 路径。格式为 oss://<oss_endpoint>/<bucket>/<object_path>

file_format

文件格式。支持 PARQUETORCJSONTEXTFILE 等。

serde_class

序列化类。如 Parquet 为 org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

使用示例

将存储在 OSS 中的 vehicle.textfile 文件数据导入至 MaxCompute。vehicle.textfile 文件的数据如下:

1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S
1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N
1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW
1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE
1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N

操作步骤

  1. OSS 侧:登录OSS管理控制台,将 vehicle.csv 文件保存至 OSS Bucket 目录 mc-load/data_location/,地域为oss-cn-hangzhou,并构造 OSS 路径。更多创建 OSS Bucket 信息,请参见控制台创建存储空间。根据 Bucket、区域、Endpoint 信息构造 OSS 路径如下:

    oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-load/data_location/
  2. MaxCompute 侧:登录 MaxCompute客户端,创建目标表并执行 LOAD 命令。

    -- 创建目标表
    CREATE TABLE IF NOT EXISTS ambulance_data_textfile_load_pt (
        vehicleId STRING,
        recordId STRING,
        patientId STRING,
        calls STRING,
        locationLatitute STRING,
        locationLongtitue STRING,
        recordTime STRING,
        direction STRING
    )
    PARTITIONED BY (ds STRING);
    
    -- 执行 LOAD 命令
    LOAD OVERWRITE TABLE ambulance_data_textfile_load_pt PARTITION(ds='20200910')
    FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
    STORED AS TEXTFILE;
  3. 验证结果:查看目标表的导入结果。

    SET odps.sql.allow.fullscan=true;
    SELECT * FROM ambulance_data_textfile_load_pt;

    返回结果:

    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | ds         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | 1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,6,9,1,46.81006,-92.08174,9/14/2014 0:00,S | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,7,53,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,8,63,1,46.81006,-92.08174,9/14/2014 0:00,SW | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,9,4,1,46.81006,-92.08174,9/14/2014 0:00,NE | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    | 1,10,31,1,46.81006,-92.08174,9/14/2014 0:00,N | NULL       | NULL       | NULL       | NULL             | NULL              | NULL       | NULL       | 20200910   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+

导入Hologres数据

支持直接从 Hologres 外部表导入数据到 MaxCompute 内部表。

  • 不支持双签名:不支持使用双签名授权模式。

  • 不支持分区表:不支持将导入 Hologres 分区表数据。

语法

LOAD {OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <hologres_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES ('<property_name>'='<property_value>',...)];

核心配置

配置项

说明

hologres_jdbc_url

Hologres JDBC 连接串。格式:jdbc:postgresql://<endpoint>:<port>/<db>?table=<holo_table_name>

StorageHandler

指定内置处理器。固定取值为com.aliyun.odps.jdbc.JdbcStorageHandler,使用JdbcStorageHandler连接方式。

SERDEPROPERTIES

必须包含:

  • 'odps.properties.rolearn' (RAM Role ARN)

  • 'mcfed.mapreduce.jdbc.driver.class' (固定为 org.postgresql.Driver)

  • 'odps.federation.jdbc.target.db.type' (固定为 holo)

使用示例

将 Hologres 中 holo_2_mc 表数据导入至 MaxCompute 中,数据如下:

id | name
---|-----
1  | abc
2  | ereg

操作步骤

  1. Hologres 侧:在 Hologres 中创建源表 holo_2_mc ,并导入数据。

  2. MaxCompute 侧:登录 MaxCompute客户端,创建目标表并执行 LOAD 命令。

    -- 创建目标表
    CREATE TABLE IF NOT EXISTS mf_from_holo (
        id BIGINT,
        name STRING
    );
    
    -- 执行 LOAD 命令
    LOAD INTO TABLE mf_from_holo 
    FROM LOCATION 'jdbc:postgresql://hgprecn-cn-xxx-cn-beijing-internal.hologres.aliyuncs.com:80/mf_db?application_name=MaxCompute&currentSchema=public&useSSL=false&table=mf_holo/' 
    STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
    WITH SERDEPROPERTIES (
      'odps.properties.rolearn'='acs:ram::189273xxx:role/hologressrole',
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
      'odps.federation.jdbc.target.db.type'='holo'
    );
    
  3. 验证结果:在 MaxCompute 中查询导入的表数据。

    SELECT * FROM mf_from_holo;

    返回结果:

    +------------+------+
    | id         | name |
    +------------+------+
    | 1          | abc  |
    | 2          | ereg |
    +------------+------+