GET_SIGNED_URL_FROM_OSS 関数は、Object Storage Service (OSS) 内のファイルの署名付き URL を生成します。この URL を使用すると、指定された期間、追加のアクセス資格情報を必要とせずに、HTTP 経由でファイルを直接アップロード (PUT) またはダウンロード (GET) できます。
シナリオ
MaxCompute は Object Table 機能を提供します。この機能により、データウェアハウスコンピュートエンジンは、OSS に保存されている非構造化データとそのメタデータにアクセスできます。詳細については、「OBJECT TABLE の定義」をご参照ください。
Object Table は、指定されたパスにある OSS オブジェクトのメタデータを格納します。GET_SIGNED_URL_FROM_OSS 関数は、対応するファイルをアップロードおよびダウンロードするための署名付き URL を動的に生成します。詳細については、「署名付き URL を生成して OSS オブジェクトをアップロードおよびダウンロードする」をご参照ください。
制限事項
Object Table は、OSS 内部ネットワーク内でのみ作成できます。
この関数は MaxQA クエリアクセラレーションではサポートされていません。
SET odps.mcqa.disable=true;パラメーターを追加し、SQL 文と一緒に実行する必要があります。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 層モデルでは、これは OBJECT TABLE の完全なパスです。パスには、 テーブルの作成時に RoleARN 認証を選択した場合、このパラメーターは OSS にアクセスするためのセキュリティトークンサービス (STS) トークンを自動的に生成するのに役立ちます。 | なし |
key | はい | STRING | Object Table でアクセスするオブジェクトの名前。詳細については、「OBJECT TABLE のプロパティの表示」の戻り結果における key パラメーターの説明をご参照ください。 | なし |
timeToLiveSeconds | いいえ | INT | 署名付き URL の有効期間 (秒単位)。最小値は 1 秒です。最大値は 7 日 (604,800 秒) です。このパラメーターは expiration と一緒に使用することはできません。 | 3600 秒。 |
expiration | いいえ | DATETIME | 署名付き URL の有効期限。時刻は現在時刻の 1 秒後以降で、かつ現在時刻の 7 日 (604,800 秒) 後までである必要があります。このパラメーターは timeToLiveSeconds と一緒に使用することはできません。 | 現在時刻から 3600 秒後。 |
httpMethod | いいえ | STRING | 生成された URL で使用する HTTP メソッド。これにより、ダウンロード (OSS からのデータ読み取り) するか、アップロード (OSS へのデータ書き込み) するかを指定します。
| デフォルト値は GET です。 |
戻り値
生成された署名付き URL である STRING 値を返します。
例
このセクションでは、中国 (杭州) リージョンでの例を示します。署名付き URL を生成し、それを使用して Elastic Compute Service (ECS) インスタンスから OSS オブジェクトをダウンロードする方法を示します。
次のコードを実行するときは、project_name と schema_name を実際のプロジェクト名とスキーマ名に置き換えてください。
ステップ 1: OSS オブジェクトをダウンロードするための URL を生成する
OSS コンソールにログインし、テストデータファイル signedget.txt を
object-table-test/object_table_folderディレクトリにアップロードします。詳細については、「ファイルのアップロード」をご参照ください。ローカルクライアント (odpscmd) を使用するか、DataWorks で MaxCompute SQL ノードを作成して、Object Table を作成し、そのメタデータキャッシュをリフレッシュします。
-- MaxCompute プロジェクトの Object Table はスキーマをサポートしています。3 層モデルを有効にします。 SET odps.namespace.schema=true; -- ターゲットの MaxCompute プロジェクトを選択します。 USE <project_name>; -- ターゲットスキーマを選択します。 USE SCHEMA <schema_name>; -- MaxCompute プロジェクトの Object Table は 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;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**** | +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+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 | +----------------------------------------+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=**** | +------------+
ステップ 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=****"次の図に、返された結果を示します。

関連関数
GET_SIGNED_URL_FROM_OSS 関数は、非構造化データを処理するために使用されます。非構造化データを処理するための関数の詳細については、「非構造化データを処理するための関数」をご参照ください。