全部產品
Search
文件中心

MaxCompute:AVRO外部表格

更新時間:Aug 08, 2025

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

前提條件

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

  • (可選)已準備好OSS儲存空間(Bucket)、OSS目錄及OSS資料檔案。具體操作請參見建立儲存空間管理目錄簡單上傳

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

    由於MaxCompute只在部分地區部署,跨地區的資料連通性可能存在問題,因此建議Bucket與MaxCompute專案所在地區保持一致。
  • 已具備在MaxCompute專案中建立表(CreateTable)的許可權。表操作的許可權資訊請參見MaxCompute許可權

使用限制

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

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

資料類型支援

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 <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED AS avro
LOCATION '<oss_location>';

參數說明

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

寫入資料

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

查詢分析

使用樣本

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

  1. 準備資料。

    登入OSS控制台,上傳測試資料20250612TableSink至OSSBucket指定目錄external-table-test/avro/dt=20250521/。具體操作請參見OSS檔案上傳

  2. 建立AVRO格式外部表格。

    CREATE EXTERNAL TABLE mc_oss_extable_name_avro_pt 
    (
      vehicleId STRING,
      recordId STRING,
      patientId STRING,
      calls STRING,
      locationLatitute STRING,
      locationLongtitue STRING,
      recordTime STRING,
      direction STRING
    ) 
    PARTITIONED BY (dt STRING) 
    STORED AS avro 
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/avro/';
  3. 引入分區資料。當建立的OSS外部表格為分區表時,需要額外執行引入分區資料的操作,詳情請參見補全OSS外部表格分區資料文法

    --引入分區資料。
    MSCK REPAIR TABLE mc_oss_extable_name_avro_pt ADD PARTITIONS;
  4. 讀取AVRO外部表格。

    SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;

    返回結果如下:

    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | dt         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | 1          | 12         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20250521   |
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20250521   |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:01 | NE         | 20250521   |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:02 | NE         | 20250521   |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:03 | W          | 20250521   |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:04 | S          | 20250521   |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:05 | S          | 20250521   |
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:06 | N          | 20250521   |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:07 | SW         | 20250521   |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:08 | NE         | 20250521   |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:09 | N          | 20250521   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
  5. 寫入AVRO外部表格。

    INSERT INTO mc_oss_extable_name_avro_pt PARTITION (dt='20250521') VALUES ('1','16','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');
  6. 查詢寫入資料。

    SELECT * FROM mc_oss_extable_name_avro_pt WHERE dt=20250521;

    返回結果如下:

    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | vehicleid  | recordid   | patientid  | calls      | locationlatitute | locationlongtitue | recordtime | direction  | dt         |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+
    | 1          | 16         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20250521   |
    | 1          | 12         | 76         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:10 | SW         | 20250521   |
    | 1          | 1          | 51         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:00 | S          | 20250521   |
    | 1          | 2          | 13         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:01 | NE         | 20250521   |
    | 1          | 3          | 48         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:02 | NE         | 20250521   |
    | 1          | 4          | 30         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:03 | W          | 20250521   |
    | 1          | 5          | 47         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:04 | S          | 20250521   |
    | 1          | 6          | 9          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:05 | S          | 20250521   |
    | 1          | 7          | 53         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:06 | N          | 20250521   |
    | 1          | 8          | 63         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:07 | SW         | 20250521   |
    | 1          | 9          | 4          | 1          | 46.81006         | -92.08174         | 9/14/2014 0:08 | NE         | 20250521   |
    | 1          | 10         | 31         | 1          | 46.81006         | -92.08174         | 9/14/2014 0:09 | N          | 20250521   |
    +------------+------------+------------+------------+------------------+-------------------+------------+------------+------------+