All Products
Search
Document Center

MaxCompute:GET_SIGNED_URL_FROM_OSS

Last Updated:Sep 10, 2026

Menghasilkan URL yang ditandatangani sebelumnya untuk suatu objek di Object Storage Service (OSS), memberikan akses sementara untuk mengunggah (PUT) atau mengunduh (GET) objek tersebut melalui HTTP tanpa kredensial terpisah.

Use cases

MaxCompute menyediakan fitur Object Table yang memungkinkan mesin gudang data mengakses data tidak terstruktur dan metadata-nya yang disimpan di OSS. Untuk informasi selengkapnya, lihat Object Table definition.

Object Table menyimpan metadata objek OSS dalam path tertentu. Gunakan GET_SIGNED_URL_FROM_OSS untuk menghasilkan URL yang ditandatangani secara dinamis guna memungkinkan pengunggahan dan pengunduhan file. Untuk informasi selengkapnya, lihat Generate a pre-signed URL to upload and download OSS objects.

Limitations

  • Anda hanya dapat membuat Object Table menggunakan titik akhir internal OSS.

  • Fungsi ini tidak didukung untuk akselerasi kueri MaxQA. Anda harus menyertakan perintah SET odps.mcqa.disable=true; bersama pernyataan SQL Anda.

  • Jika bucket OSS memiliki fitur Block Public Access yang diaktifkan, fungsi GET_SIGNED_URL_FROM_OSS tidak dapat menghasilkan URL yang ditandatangani yang dapat diakses publik. Pastikan izin bucket Anda mengizinkan pembuatan dan penggunaan URL yang ditandatangani.

Syntax

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

Parameters

Parameter

Required

Type

Description

Default

full_object_table_name

Yes

STRING

Path lengkap Object Table dalam model tiga lapis, termasuk nama project dan schema. Contoh: project.schema.object_table.

Jika Anda memilih otentikasi RoleARN saat membuat tabel, token STS akan dibuat secara otomatis untuk mengakses OSS.

None

key

Yes

STRING

Nama objek yang akan diakses dalam Object Table. Untuk informasi selengkapnya tentang parameter key, lihat deskripsi dalam hasil yang dikembalikan oleh View Object Table properties.

None

timeToLiveSeconds

No

INT

Waktu hidup (TTL) URL yang ditandatangani dalam detik. Minimum: 1 detik. Maksimum: 604.800 detik (7 hari). Parameter ini saling eksklusif dengan expiration.

3.600 detik

expiration

No

DATETIME

Waktu kedaluwarsa URL yang ditandatangani. Nilainya harus minimal 1 detik dan maksimal 604.800 detik (7 hari) setelah waktu saat ini. Parameter ini saling eksklusif dengan timeToLiveSeconds.

3.600 detik setelah waktu saat ini

httpMethod

No

STRING

Metode HTTP untuk URL yang dihasilkan, menentukan apakah akan mengunduh (membaca) dari atau mengunggah (menulis) ke OSS.

  • GET: Unduh

  • PUT: Unggah

GET

Return value

Mengembalikan URL yang ditandatangani yang dihasilkan sebagai STRING.

Examples

Contoh berikut menghasilkan URL yang ditandatangani untuk mengunduh objek OSS dari instans Elastic Compute Service (ECS) di wilayah China (Hangzhou).

Sebelum menjalankan kode berikut, ganti project_name dan schema_name dengan nama project dan schema Anda yang sebenarnya.

Step 1: Generate a download URL

  1. Masuk ke OSS console dan unggah file uji signedget.txt ke direktori object-table-test/object_table_folder. Untuk informasi selengkapnya, lihat Upload files.

  2. Gunakan local client (odpscmd) atau buat MaxCompute SQL node di DataWorks untuk membuat Object Table dan merefresh cache metadata.

    -- Aktifkan model tiga lapis untuk mendukung schema dalam project MaxCompute. 
    SET odps.namespace.schema=true;
    -- Pilih project MaxCompute. 
    USE <project_name>;
    -- Pilih schema. 
    USE SCHEMA <schema_name>;
    -- Aktifkan sistem tipe data 2.0 dalam project MaxCompute. 
    SET odps.sql.type.system.odps2=true;
    -- Fungsi ini tidak didukung untuk akselerasi kueri MaxQA. 
    SET odps.mcqa.disable=true;
    -- Buat Object Table. 
    CREATE OBJECT TABLE IF NOT EXISTS test_get_signed_url_from_oss 
    WITH serdeproperties (
      'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
    ) 
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/object_table_folder/';
    -- Refresh cache tabel. 
    ALTER TABLE test_get_signed_url_from_oss REFRESH METADATA;
  3. Kueri metadata dalam Object Table.

    SET odps.namespace.schema=true;
    SELECT * FROM test_get_signed_url_from_oss;

    Output yang diharapkan:

    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
    | 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. Baca data objek menggunakan fungsi GET_DATA_FROM_OSS.

    SET odps.namespace.schema=true;
    SELECT 
      STRING(   
        GET_DATA_FROM_OSS(
          '<project_name>.<schema_name>.test_get_signed_url_from_oss',
          key
        )
      )
    FROM test_get_signed_url_from_oss;

    Output yang diharapkan:

    +----------------------------------------+
    | _c0                                    |
    +----------------------------------------+
    | test maxcompute download files by url  |
    +----------------------------------------+
  5. Kueri Object Table dan hasilkan URL yang ditandatangani.

    SET odps.namespace.schema=true;
    SELECT GET_SIGNED_URL_FROM_OSS(  
      '<project_name>.<schema_name>.test_get_signed_url_from_oss',    
      key) 
    FROM test_get_signed_url_from_oss;

    Output yang diharapkan:

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

Step 2: Download the object from ECS

  1. Masuk ke ECS console. Di panel navigasi kiri, pilih Instances & Images > Instances.

  2. Di wilayah China (Hangzhou), pilih instans target, klik Remote Connection, lalu sambungkan ke instans menggunakan Workbench.

  3. Di terminal, jalankan perintah berikut untuk mengunduh objek OSS:

    -- Ubah direktori ke /opt.
    cd /opt
    -- Unduh objek OSS menggunakan URL yang ditandatangani.
    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=****"

    Output:

    [xxx] opt]# curl -o /opt/ecs_signed.txt "http://object-table-test.oss-cn-hangzhou-inxxx&SAccessKeyId=STS.xxx&Signature=xxx&security-token=CAIS3gJxxx
    xxx
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100    38  100    38    0     0    263      0 --:--:-- --:--:-- --:--:--   265
    opt]# ls
    aliyun-security  ecs_signed.txt
    [root@iZbp1al9u5z0axrqx50mptZ opt]# cat ecs_signed.txt
    test maxcompute download files by url
    xxx opt]#

FAQ

Problem 1: The table path in the function is different from the path of the underlying table being queried

  • Error message

    ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: Can't do ObjectTableTwoPhasesSplitting process (Caused by: java.lang.IllegalArgumentException: The first arg[xxx.default.test_get_signed_url_from_ossxxxxxx] of function GET_SIGNED_URL_FROM_OSS({object_table_full_name}, {object_key}, ...) can't be found in the underlying object table scans[xxx.default.test_get_signed_url_from_oss]).

  • Problem description

    Nama tabel test_get_signed_url_from_ossxxxxxx tidak ada atau berbeda dari nama tabel yang ditentukan dalam pernyataan SQL.

  • Solution

    Tentukan nama Object Table yang ada dalam format project.schema.table.

The `timeToLiveSeconds` parameter value is invalid

  • Error message

    ODPS-0121095:[1,8] Invalid argument - The parameter <timeToLiveSeconds> of the function GET_SIGNED_URL_FROM_OSS() you specified (0) is invalid, it should be in the range [1, 604800].

  • Problem description

    Nilai parameter `timeToLiveSeconds` tidak valid. Nilainya harus berada dalam rentang [1, 604800].

  • Solution

    Tentukan nilai Waktu hidup (TTL) yang valid.

The `HttpMethod` parameter value is invalid

  • Error message

    ODPS-0121095:[1,8] Invalid argument - The parameter <httpMethod> of the function GET_SIGNED_URL_FROM_OSS() you specified 'PU' is invalid, it can only be 'GET' or 'PUT'.

  • Problem description

    Nilai parameter `HttpMethod` tidak valid.

  • Solution

    Atur parameter `HttpMethod` menjadi GET atau PUT.

The link has expired because the validity period is too short

  • Error message

    Terjadi error `Request has expired` saat menjalankan perintah curl.

  • Problem Description

    URL yang ditandatangani telah kedaluwarsa sebelum digunakan.

  • Solution

    Tentukan nilai yang wajar untuk parameter `expiration`. Jangan atur nilai yang terlalu panjang atau terlalu pendek.

The three-layer model syntax is not enabled

  • Error message

    ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: Can't do ObjectTableTwoPhasesSplitting process (Caused by: java.lang.IllegalArgumentException: Invalid parameter of object table full name[str=xxx.test_get_signed_url_from_oss], which should be split up into 3 parts by '.' like '${project}.${schema}.${table}').

  • Problem description

    Sintaks schema belum diaktifkan. Oleh karena itu, format project.schema.table tidak dapat diurai.

  • Solution

    Tambahkan perintah set odps.namespace.schema=true; sebelum pernyataan SQL untuk mengaktifkan sintaks schema.

Related functions

GET_SIGNED_URL_FROM_OSS adalah fungsi pemrosesan data tidak terstruktur. Untuk fungsi terkait lainnya, lihat Functions for processing unstructured data.