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_OSStidak 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: 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 |
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
Masuk ke OSS console dan unggah file uji signedget.txt ke direktori
object-table-test/object_table_folder. Untuk informasi selengkapnya, lihat Upload files.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;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**** | +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+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 | +----------------------------------------+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
Masuk ke ECS console. Di panel navigasi kiri, pilih .
Di wilayah China (Hangzhou), pilih instans target, klik Remote Connection, lalu sambungkan ke instans menggunakan Workbench.
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_ossxxxxxxtidak 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.tabletidak 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.