GET_SIGNED_URL_FROM_OSS 関数は、Object Storage Service (OSS) 内のファイルの署名付き URL を生成します。この URL を使用すると、一定期間、追加のアクセス認証情報なしで HTTP プロトコル経由でファイルを直接アップロード (PUT) またはダウンロード (GET) できます。
利用シーン
MaxCompute は、データウェアハウスのコンピューティングエンジンが OSS に保存されている非構造化データとそのメタデータにアクセスできるようにする、オブジェクトテーブル機能を提供します。詳細については、「OBJECT TABLE の定義」をご参照ください。
オブジェクトテーブルには、対応するパスにある OSS オブジェクトのメタデータが格納されます。GET_SIGNED_URL_FROM_OSS 関数を使用して OSS の署名付き URL を動的に生成し、ファイルのアップロードやダウンロードも行えます。詳細については、「署名付き URL を生成して OSS オブジェクトをアップロードおよびダウンロードする」をご参照ください。
制限事項
-
現在、OSS 内部ネットワーク経由でのオブジェクトテーブルの作成のみをサポートしています。
-
MaxQA のクエリ高速化は現在サポートされていません。SQL 文と一緒に
SET odps.mcqa.disable=true;パラメーターを追加して実行する必要があります。 -
OSS バケットでパブリックアクセスブロック 機能が有効になっている場合、
GET_SIGNED_URL_FROM_OSS関数を使用してパブリックにアクセス可能な署名付き URL を生成することはできません。バケットの権限設定が署名付き URL の生成と使用を許可していることを確認してください。
コマンド構文
STRING GET_SIGNED_URL_FROM_OSS (
STRING <full_object_table_name>,
STRING <key>
[, INT <timeToLiveSeconds>]
[, DATETIME <expiration>]
[, STRING <httpMethod>]
)
パラメーター
|
パラメーター |
必須 |
データ型 |
説明 |
デフォルト値 |
|
full_object_table_name |
はい |
STRING |
3層モデルでは、Project 名と Schema 名を含む完全なOBJECT TABLE パスは、 テーブル作成時に RoleARN 認証方式を選択した場合、このパラメーターにより、ユーザーが OSS にアクセスするための STS トークンが自動的に生成されます。 |
なし |
|
key |
はい |
STRING |
このオブジェクトテーブル内にある、アクセス対象オブジェクトの名前です。詳細については、「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 |
戻り値
生成された署名付き URL を、STRING 型で返します。
使用例
ここでは杭州リージョンを例に、Elastic Compute Service (ECS) で署名付き URL を生成して OSS オブジェクトをダウンロードする方法を示します。
以下のコードを実行する際は、project_nameとschema_nameを実際のプロジェクト名とスキーマ名に置き換えてください。
ステップ 1:OSS オブジェクトをダウンロードするための URL 生成
-
OSS コンソールにログインし、テストデータ signedget.txt を
object-table-test/object_table_folderディレクトリにアップロードします。詳細については、「オブジェクトのアップロード」をご参照ください。 -
ローカルクライアント (odpscmd) を使用するか、DataWorks で MaxCompute SQL ノードを作成して、オブジェクトテーブルを作成し、メタデータ キャッシュを更新します。
-- MaxCompute プロジェクトでスキーマ機能を有効化し、3層モデルを使用できるようにします。 SET odps.namespace.schema=true; -- 対応する MaxCompute プロジェクトを選択します。 USE <project_name>; -- 対応するスキーマを選択します。 USE SCHEMA <schema_name>; -- MaxCompute プロジェクトで 2.0 データ型システムを有効にします。 SET odps.sql.type.system.odps2=true; -- 現在、MaxQA のクエリ高速化ではサポートされていません。 SET odps.mcqa.disable=true; -- オブジェクトテーブルを作成します。 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; -
オブジェクトテーブルのメタデータをクエリします。
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**** | +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+ -
関数 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 | +----------------------------------------+ -
オブジェクトテーブルをクエリして署名付き 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=**** | +------------+
ステップ 2:ECS インスタンス経由のダウンロード
-
ECS コンソールにログインし、左側メニューで をクリックします。
-
杭州リージョンに切り替え、対象のインスタンスを選択し、リモート接続をクリックして、Workbench 経由で ECS インスタンスに接続します。
-
ターミナル ダイアログで次のコマンドを実行して、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=****"戻り結果:
[xxx] opt]# curl -o /opt/ecs_signed.txt "http://object-table-test.oss-cn-hangzhou-inxxx&OSSAccessKeyId=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]#
関連関数
GET_SIGNED_URL_FROM_OSS 関数は非構造化処理関数です。その他の非構造化処理関数については、「非構造化処理関数」をご参照ください。