全部產品
Search
文件中心

MaxCompute:RCFILE外部表格

更新時間:Jan 01, 2026

本文介紹RCFILE格式的OSS外部表格的建立、讀取及寫入方法。

適用範圍

  • OSS外部表格不支援cluster屬性。

  • 單個檔案大小不能超過2GB,如果檔案過大,建議拆分。

  • MaxCompute需要與OSS部署在同一地區。

支援資料類型

MaxCompute資料類型詳情請參見1.0資料類型版本2.0資料類型版本

資料類型

是否支援

資料類型

是否支援

TINYINT

已開通

STRING

已開通

SMALLINT

已開通

DATE

已開通

INT

已開通

DATETIME

已開通

BIGINT

已開通

TIMESTAMP

已開通

BINARY

已開通

TIMESTAMP_NTZ

已開通

FLOAT

已開通

BOOLEAN

已開通

DOUBLE

已開通

ARRAY

已開通

DECIMAL(precision,scale)

已開通

MAP

已開通

VARCHAR(n)

已開通

STRUCT

已開通

CHAR(n)

已開通

JSON

未開通

建立外部表格

文法結構

CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_rcfile_extable
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss_location';

參數說明

詳情請參見基礎文法參數說明

寫入資料

MaxCompute寫入資料至OSS的文法,詳情請參見將資料寫入OSS

查詢分析

情境樣本

通過內建開來源資料解析器建立RCFILE格式外部表格,將資料寫入OSS並查詢。

  1. 前置準備

    • 建立MaxCompute專案

    • 已準備好OSS儲存空間(Bucket)、OSS目錄。具體操作請參見建立儲存空間管理目錄

      MaxCompute已支援在OSS側自動建立目錄,對於攜帶外部表格及UDF的SQL語句,可以通過一條SQL語句執行讀寫外部表格及UDF的操作。原手動建立目錄方式仍然支援。

      由於MaxCompute只在部分地區部署,跨地區的資料連通性可能存在問題,因此建議Bucket與MaxCompute專案所在地區保持一致。
    • 授權

      • 已具備訪問OSS的許可權。阿里雲帳號(主帳號)、RAM使用者或RAMRole身份可以訪問OSS外部表格,授權資訊請參見OSS的STS模式授權

      • 已具備在MaxCompute專案中建立表(CreateTable)的許可權。表操作的許可權資訊請參見MaxCompute許可權

  2. 上傳測試資料

    登入OSS控制台,上傳測試資料RCFILE格式資料檔案至OSS Bucket指定目錄oss-mc-test/Rcfile/dt=20241223/。具體操作請參見OSS檔案上傳

  3. 建立RCFILE外部表格

    CREATE EXTERNAL TABLE  mc_oss_rcfile_extable
    (
      vehicleId STRING ,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitute STRING,
      locationLongtitue STRING,
      recordTime STRING,
      direction STRING
    )
    PARTITIONED BY (dt STRING)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
    STORED AS rcfile
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Rcfile/';
  4. 引入分區資料。當建立的OSS外部表格為分區表時,需要額外執行引入分區資料的操作,詳情請參見補全OSS外部表格分區資料文法

    -- 引入分區資料。
    MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS;
  5. 查詢RCFILE外表。

    SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223;
    
    -- 查詢結果如下:
    +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime       | direction  | dt         | 
    +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
    | 1          | 1          | 7          | 1          | 39.995353        | 116.410101        | 2025/12/23 10:01 | NW         | 20241223   | 
    | 1          | 2          | 15         | 1          | 39.996123        | 116.412345        | 2025/12/24 10:01 | NE         | 20241223   | 
    | 2          | 3          | 22         | 2          | 40.001234        | 116.425678        | 2025/12/25 10:01 | SE         | 20241223   | 
    | 1          | 4          | 71         | 1          | 39.998888        | 106.419999        | 2025/12/26 10:01 | NW         | 20241223   | 
    | 3          | 5          | 50         | 1          | 29.989999        | 116.401111        | 2025/12/27 10:01 | NE         | 20241223   | 
    | 2          | 6          | 28         | 3          | 40.003456        | 110.42891         | 2025/12/28 10:01 | NW         | 20241223   | 
    | 4          | 7          | 20         | 2          | 39.991234        | 116.435555        | 2025/12/29 10:01 | NE         | 20241223   | 
    | 1          | 8          | 13         | 1          | 39.994567        | 116.41789         | 2025/12/30 10:01 | SE         | 20241223   | 
    +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+
  6. 寫入RCFILE外表。

    INSERT INTO TABLE mc_oss_rcfile_extable2_pt PARTITION (dt=20251223) VALUES ('1','13','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
  7. 查看是否寫入成功。

    SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13';
    
    -- 查詢結果如下:
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime     | direction  | dt         | 
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
    | 1          | 13         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20251223   | 
    +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+