全部產品
Search
文件中心

MaxCompute:GET_SIGNED_URL_FROM_OSS

更新時間:Sep 24, 2025

GET_SIGNED_URL_FROM_OSS函數用於為Object Storage Service中的檔案產生一個預簽名URL。使用此URL可以在一定時間內通過HTTP協議直接上傳(PUT)或下載(GET)檔案,無需提供額外的訪問憑證。

使用情境

MaxCompute提供了Object Table功能,支援數倉計算引擎訪問OSS儲存的非結構化資料及其元資訊。詳情請參見OBJECT TABLE定義

Object Table中儲存了對應路徑下OSS對象的元資訊,同時可通過GET_SIGNED_URL_FROM_OSS函數,動態產生OSS預簽名URL,實現對檔案的上傳和下載訪問。更多資訊請參見產生簽名地址上傳和下載OSS對象

使用限制

  • 目前僅支援通過OSS內網方式建立Object Table。

  • 暫不支援用於MaxQA查詢加速。需添加參數SET odps.mcqa.disable=true;與SQL語句一併運行。

  • 如果OSS Bucket啟用了阻止公用訪問功能,則無法通過GET_SIGNED_URL_FROM_OSS函數產生公網可訪問的簽名地址。請確保Bucket許可權配置允許產生和使用簽名地址。

命令格式

STRING GET_SIGNED_URL_FROM_OSS (
  STRING <full_object_table_name>, 
  STRING <key>
  [, INT <timeToLiveSeconds>] 
  [, DATETIME <expiration>]
  [, STRING <httpMethod>]
)

參數說明

參數

是否必填

資料類型

說明

預設值

full_object_table_name

STRING

三層模型下,完整的OBJECT TABLE路徑,包括Project和Schema名稱,如project.schema.object_table

如果在建表時選擇了RoleARN的認證方式,該參數將協助使用者自動產生訪問OSS的STS Token。

key

STRING

即被訪問對象在該Object Table中的名稱。詳情請參見查看OBJECT TABLE屬性返回結果中的key參數說明。

timeToLiveSeconds

INT

簽名URL的有效期間時間長度,最小1秒,最大7天(604800秒)。與expiration不可同時使用。

預設為3600秒。

expiration

DATETIME

簽名URL到期時間點。最小比目前時間大1秒,最大比目前時間多7天(604800秒)。 與timeToLiveSeconds不可同時使用。

預設比目前時間大3600秒。

httpMethod

STRING

產生URL之後使用方式,是下載(讀取OSS資料)還是上傳(資料寫入OSS)。

  • GET表示下載。

  • PUT表示上傳。

預設值是GET。

傳回值說明

返回STRING類型,產生的預簽名URL。

使用樣本

此處以杭州地區為例,展示如何在ECS中通過產生預簽名URL下載OSS對象。

執行下述代碼時,需要將project_nameschema_name替換成實際的專案名稱和Schema名稱。

步驟一:產生下載OSS對象的URL

  1. 登入OSS控制台,上傳測試資料signedget.txtobject-table-test/object_table_folder目錄下。具體操作請參見上傳檔案

  2. 使用本地用戶端(odpscmd),或在DataWorks中建立MaxCompute SQL節點,以建立Object Table並重新整理中繼資料資訊緩衝。

    -- Object Table在MaxCompute專案中支援Schema功能,開啟三層模型。 
    SET odps.namespace.schema=true;
    
    -- 選擇對應MaxCompute專案。 
    USE <project_name>;
    
    -- 選擇對應的schema。 
    USE SCHEMA <schema_name>;
    
    -- Object Table在MaxCompute專案中支援2.0資料類型系統。 
    SET odps.sql.type.system.odps2=true;
    
    -- 目前在MaxQA查詢加速中暫不支援使用。 
    SET odps.mcqa.disable=true;
    
    -- 建立Object Table。 
    CREATE OBJECT TABLE IF NOT EXISTS test_get_signed_url_from_oss 
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/object_table_folder/';
    
    -- 重新整理表緩衝。 
    ALTER TABLE test_get_signed_url_from_oss REFRESH METADATA;
  3. 查詢Object Table表中的中繼資料資訊。

    SELECT * FROM test_get_signed_url_from_oss;

    返回結果如下:

    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
    | key           | size       | type       | last_modified       | storage_class | etag                             | restore_info | owner_id   | owner_display_name |
    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
    | signedget.txt | 38         | Normal     | 2025-06-04 01:36:52 | Standard      | 96D8258845DAB51BC9B****6E61A2563 | NONE         | 13****     | 13****             |
    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
  4. 通過函數GET_DATA_FROM_OSS讀取對象資料。

    SELECT 
      STRING(   
        GET_DATA_FROM_OSS(
          '<project_name>.<schema_name>.test_get_signed_url_from_oss',
          key
        )
      )
    FROM test_get_signed_url_from_oss;

    返回結果如下:

    +----------------------------------------+
    | _c0                                    |
    +----------------------------------------+
    | test maxcompute download files by url  |
    +----------------------------------------+
  5. 查詢Object Table並產生簽名地址URL。

    SELECT GET_SIGNED_URL_FROM_OSS(  
      '<project_name>.<schema_name>.test_get_signed_url_from_oss',    
      key) 
    FROM test_get_signed_url_from_oss;

    返回結果如下:

    +------------+
    | _c0        |
    +------------+
    | http://object-table-test.oss-cn-hangzhou-internal.aliyuncs.com/object_table_folder%2Fsignedget.txt?Expires=17490****&OSSAccessKeyId=STS.****&Signature=****&security-token=**** |
    +------------+

步驟二:通過ECS伺服器下載

  1. 登入ECS控制台,單擊左側導覽列執行個體與鏡像 > 執行個體

  2. 切換杭州地區,選擇目標執行個體,單擊遠端連線,通過Workbench串連ECS執行個體。

  3. 在終端對話方塊執行如下指令,下載OSS對象:

    -- 切換至opt目錄下
    cd /opt
    
    --通過簽名URL下載對應OSS對象。
    curl -o /opt/ecs_signed.txt "http://object-table-test.oss-cn-hangzhou-internal.aliyuncs.com/object_table_folder%2Fsignedget.txt?Expires=17490****&OSSAccessKeyId=STS.****&Signature=****&security-token=****"

    返回結果如圖所示:

    yuddd

相關函數

GET_SIGNED_URL_FROM_OSS函數屬於非結構化處理函數,更多非結構化處理相關函數請參見非結構化處理函數