全部產品
Search
文件中心

MaxCompute:使用OBJECT TABLE處理非結構化資料

更新時間:Dec 03, 2025

本文通過樣本介紹如何使用Object Table訪問資料湖儲存中的非結構化資料及其元資訊。

費用說明

  • 重新整理OBJECT TABLE快取資料,後付費模式基於外表的計費模式收費,輸入資料量與OSS檔案數量相關,與檔案實際大小無關。

  • 查看OBJECT TABLE中的對象並過濾排序,後付費模式基於內表計費模式收費,本質是查詢儲存在MaxCompute中的Delta Table中的中繼資料資訊。

  • 調用UDF擷取PDF文本樣本,後付費模式基於外表計費模式收費,輸入的資料量與OSS檔案實際大小有關。

可以通過中繼資料過濾來減少處理任務中對不需要的OSS目錄中檔案的讀取。

計費詳情請參見Object Table費用說明

前提條件

  • 已建立OSS Bucket。Bucket名稱例如:object-table-bucket,建立目錄名稱:ot_openlake

  • 已完成上傳解壓後的非結構化資料unstruct data.zip至OSS Bucket為object-table-bucketot_openlake目錄下。

  • 建立MaxCompute專案,並開啟Schema功能。例如:阿里雲帳號(主帳號)的UID為111740****241234,所屬地區為華南1(深圳)region="cn-shengzhen",專案名稱為lakehouse_yunqi_demo_sz

建立OBJECT TABLE

SET odps.namespace.schema=true; 
DROP TABLE IF EXISTS lakehouse_yunqi_demo_sz.default.ot_openlake_demo; 

CREATE OBJECT TABLE lakehouse_yunqi_demo_sz.default.ot_openlake_demo 
WITH serdeproperties ( 
 'odps.properties.rolearn'='acs:ram::111740****241234:role/aliyunodpsdefaultrole') 
LOCATION 'oss://oss-cn-shengzhen-internal.aliyuncs.com/object-table-bucket/ot_openlake/';

查看OBJECT TABLE

SET odps.namespace.schema=true;
SHOW TABLES;

返回結果如下。

111740****241234:ot_openlake_demo

查看OBJECT TABLE建表語句

SET odps.namespace.schema=true;
SHOW CREATE TABLE ot_openlake_demo;

返回結果如下。

CREATE OBJECT TABLE IF NOT EXISTS lakehouse_yunqi_demo_sz.`default`.ot_openlake_demo 
WITH SERDEPROPERTIES ( 
  'serialization.format'='1', 
  'odps.properties.rolearn'='acs:ram::111740****241234:role/aliyunodpsdefaultrole') 
LOCATION 'oss://oss-cn-shenzhen-internal.aliyuncs.com/object-table-bucket/ot_openlake/' 
TBLPROPERTIES ( 
  'last_modified_time'='1726564699', 
  'transient_lastDdlTime'='1726564699', 
  'metadata.cache.mode'='manual', 
  'metadata.staleness.seconds'='3600');

重新整理OBJECT TABLE快取資料

SET odps.namespace.schema=true; 
ALTER TABLE ot_openlake_demo REFRESH METADATA;

查看OBJECT TABLE中對象數量

SET odps.namespace.schema=true; 
SELECT COUNT(*) AS ROW_COUNT FROM ot_openlake_demo;

返回結果如下。

+---------+
|row_count|
+---------+
|4       |
+---------+

查詢過濾排序資料

按大小和檔案尾碼過濾再排序。

SET odps.namespace.schema=true; 
SELECT key,size FROM ot_openlake_demo 
WHERE key LIKE '%.json' 
AND size  > 100 
ORDER BY size 
DESC limit 10; 

返回結果如下。

+-----------------+-------+
|key	            | size  |
+-----------------+-------+
|hex-char.json	  | 122   | 
+-----------------+-------+

調用UDF擷取PDF文本

  1. 準備binary_pdf2text.py的UDF函數,試用工具包pdf_tools_cp37.tar.gz提取PDF中的文本數。

    -- 在控制台上傳檔案至maxcompute專案
    ADD py binary_pdf2text.py -f;
    ADD archive pdf_tools_cp37.tar.gz -f;
    
    -- 註冊UDF函數
    CREATE FUNCTION pdf2text AS binary_pdf2text.ExtractPDFText 
      USING 'binary_pdf2text.py, pdf_tools_cp37.tar.gz' -f;
  2. 調用pdf2textUDF函數,將demoday.pdf中的內容提取成文本。更多GET_DATA_FROM_OSS函數操作詳見查詢對象內容進行業務計算

    SET odps.namespace.schema=true; 
    SET odps.sql.python.version=cp37; 
    SELECT key, size, get_json_object( 
      pdf2text( 
        key, 
        GET_DATA_FROM_OSS("lakehouse_yunqi_demo_sz.default.ot_openlake_demo", key) 
      ),'$.text.0' 
    ) AS text 
    FROM ot_openlake_demo 
    WHERE ends_with(cast(key as string), 'demoday.pdf') = true;

    返回結果如下。

    +------------+------------+------------+
    | key        | size       | text       |
    +------------+------------+------------+
    | demoday.pdf | 261567     | Simple Home Styling Simple Home Styling Easy Decorating To get started, just tap or click this placeholder text and begin typing. You 
    can view and edit this document on your Mac, iPad, iPhone, or on... 

相關文檔