すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:GET_SIGNED_URL_FROM_OSS

最終更新日:Sep 10, 2026

Object Storage Service (OSS) 内のオブジェクトの署名付き URL を生成し、個別の認証情報なしで HTTP 経由でオブジェクトをアップロード (PUT) またはダウンロード (GET) するための一時的なアクセス権を付与します。

ユースケース

MaxCompute はオブジェクトテーブル機能を提供しており、データウェアハウスエンジンが OSS に保存された非構造化データとそのメタデータにアクセスできるようにします。詳細については、「オブジェクトテーブルの定義」をご参照ください。

オブジェクトテーブルは、指定されたパス内の OSS オブジェクトのメタデータを保存します。GET_SIGNED_URL_FROM_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

オブジェクトテーブル内でアクセスするオブジェクトの名前。key パラメータの詳細については、オブジェクトテーブルのプロパティを表示するの戻り結果の説明をご参照ください。

なし

timeToLiveSeconds

いいえ

INT

署名付き URL の有効期間 (秒単位)。最小値:1 秒。最大値:604,800 秒 (7 日間)。このパラメータは expiration と相互に排他的です。

3,600 秒

expiration

いいえ

DATETIME

署名付き URL の有効期限。値は、現在時刻の 1 秒後から 604,800 秒 (7日間) 後までの範囲で指定する必要があります。このパラメータは timeToLiveSeconds と相互に排他的です。

現在時刻から 3,600 秒後

httpMethod

いいえ

STRING

生成される URL の HTTP メソッド。OSS からのダウンロード (読み取り) か、OSS へのアップロード (書き込み) かを指定します。

  • GET:ダウンロード

  • PUT:アップロード

GET

戻り値

生成された署名付き URL を STRING として返します。

次の例では、中国 (杭州) リージョンの Elastic Compute Service (ECS) インスタンスから OSS オブジェクトをダウンロードするための署名付き URL を生成します。

次のコードを実行する前に、project_nameschema_name を実際のプロジェクト名とスキーマ名に置き換えてください。

ステップ 1: ダウンロード URL の生成

  1. OSS コンソールにログインし、テストファイル signedget.txtobject-table-test/object_table_folder ディレクトリにアップロードします。詳細については、「ファイルのアップロード」をご参照ください。

  2. ローカルクライアント (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 
    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/';
    -- テーブルキャッシュを更新します。
    ALTER TABLE test_get_signed_url_from_oss REFRESH METADATA;
  3. オブジェクトテーブル内のメタデータをクエリします。

    SET odps.namespace.schema=true;
    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         | 標準       | 2025-06-04 01:36:52 | Standard      | 96D8258845DAB51BC9B****6E61A2563 | NONE         | 13****     | 13****             |
    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
  4. 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;

    想定される出力:

    +----------------------------------------+
    | _c0                                    |
    +----------------------------------------+
    | test maxcompute download files by url  |
    +----------------------------------------+
  5. オブジェクトテーブルをクエリし、署名付き URL を生成します。

    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;

    想定される出力:

    +------------+
    | _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 からのオブジェクトのダウンロード

  1. ECS コンソールにログインします。左側メニューで、インスタンス & イメージ > Instances を選択します。

  2. 中国 (杭州) リージョンで、対象のインスタンスを選択し、[Remote Connection] をクリックし、Workbench を使用してインスタンスに接続します。

  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=****"

    出力:

    [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]#

よくある質問

問題 1:関数で指定したテーブルパスが、クエリ対象のテーブルパスと異なる

  • エラーメッセージ

    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])

  • 問題の説明

    テーブル名 test_get_signed_url_from_ossxxxxxx が存在しないか、SQL ステートメントで指定されたテーブル名と異なります。

  • 解決策

    既存のオブジェクトテーブルの名前を project.schema.table の形式で指定してください。

timeToLiveSeconds パラメータの値が無効

  • エラーメッセージ

    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]

  • 問題の説明

    timeToLiveSeconds パラメータの値が無効です。値は [1, 604800] の範囲内である必要があります。

  • 解決策

    有効な有効期間 (TTL) の値を指定してください。

HttpMethod パラメータの値が無効

  • エラーメッセージ

    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'

  • 問題の説明

    HttpMethod パラメータの値が無効です。

  • 解決策

    HttpMethod パラメータを GET または PUT に設定してください。

有効期間が短すぎてリンクが期限切れになる

  • エラーメッセージ

    curl コマンドを実行すると Request has expired エラーが表示されます。

  • 問題の説明

    署名付き URL が使用される前に有効期限が切れました。

  • 解決策

    expiration パラメータに適切な値を設定してください。過度に長い値や短い値を設定しないでください。

3 層モデル構文が有効になっていない

  • エラーメッセージ

    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}')

  • 問題の説明

    スキーマ構文が有効になっていません。そのため、project.schema.table の形式を解析できません。

  • 解決策

    SQL ステートメントの前に set odps.namespace.schema=true; コマンドを追加して、スキーマ構文を有効にしてください。

関連関数

GET_SIGNED_URL_FROM_OSS は非構造化データ処理関数です。その他の関連関数については、非構造化データを処理する関数をご参照ください。