Tous les produits
Search
Centre de documentation

MaxCompute:GET_SIGNED_URL_FROM_OSS

Dernière mise à jour :Sep 14, 2026

Génère une URL pré-signée pour un objet dans Object Storage Service (OSS), accordant un accès temporaire pour le téléversement (PUT) ou le téléchargement (GET) de l'objet via HTTP sans informations d'identification distinctes.

Cas d'utilisation

MaxCompute propose la fonctionnalité Object Table, qui permet au moteur d'entrepôt de données d'accéder aux données non structurées et à leurs métadonnées stockées dans OSS. Pour plus d'informations, consultez la rubrique Définition d'une Object Table.

Une Object Table stocke les métadonnées des objets OSS situés dans un chemin d'accès spécifié. Utilisez GET_SIGNED_URL_FROM_OSS pour générer dynamiquement une URL pré-signée pour un objet, ce qui permet le téléversement et le téléchargement de fichiers. Pour plus d'informations, consultez la rubrique Générer une URL pré-signée pour téléverser et télécharger des objets OSS.

Limitations

  • Créez des Object Tables uniquement en utilisant le point de terminaison interne d'OSS.

  • Cette fonction n'est pas prise en charge pour l'accélération des requêtes MaxQA. Incluez la commande SET odps.mcqa.disable=true; avec votre instruction SQL.

  • Si la fonctionnalité Block Public Access est activée sur un bucket OSS, la fonction GET_SIGNED_URL_FROM_OSS ne peut pas générer d'URL pré-signée accessible publiquement. Assurez-vous que les autorisations de votre bucket permettent la génération et l'utilisation d'URL pré-signées.

Syntaxe

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

Paramètres

Paramètre

Obligatoire

Type

Description

Valeur par défaut

full_object_table_name

Oui

STRING

Le chemin d'accès complet de l'Object Table dans le modèle à trois couches, incluant les noms du projet et du schéma. Exemple : project.schema.object_table.

Si vous sélectionnez l'authentification RoleARN lors de la création de la table, un jeton STS est automatiquement généré pour accéder à OSS.

Aucune

key

Oui

STRING

Le nom de l'objet auquel accéder au sein de l'Object Table. Pour plus d'informations sur le paramètre key, consultez la description dans les résultats renvoyés par la rubrique Afficher les propriétés d'une Object Table.

Aucune

timeToLiveSeconds

Non

INT

La durée de vie de l'URL pré-signée en secondes. Minimum : 1 seconde. Maximum : 604 800 secondes (7 jours). Ce paramètre est mutuellement exclusif avec expiration.

3 600 secondes

expiration

Non

DATETIME

L'heure d'expiration de l'URL pré-signée. La valeur doit être comprise entre 1 seconde et 604 800 secondes (7 jours) après l'heure actuelle. Ce paramètre est mutuellement exclusif avec timeToLiveSeconds.

3 600 secondes après l'heure actuelle

httpMethod

Non

STRING

La méthode HTTP pour l'URL générée, spécifiant s'il s'agit d'un téléchargement (lecture) depuis OSS ou d'un téléversement (écriture) vers OSS.

  • GET : Téléchargement

  • PUT : Téléversement

GET

Valeur de retour

Renvoie l'URL pré-signée générée sous forme de STRING.

Exemples

L'exemple suivant génère une URL pré-signée pour télécharger un objet OSS depuis une instance Elastic Compute Service (ECS) dans la région Chine (Hangzhou).

Avant d'exécuter le code suivant, remplacez project_name et schema_name par vos noms de projet et de schéma réels.

Étape 1 : Générer une URL de téléchargement

  1. Connectez-vous à la console OSS et téléversez le fichier de test signedget.txt dans le répertoire object-table-test/object_table_folder. Pour plus d'informations, consultez la rubrique Téléverser des fichiers.

  2. Utilisez un client local (odpscmd) ou créez un nœud MaxCompute SQL dans DataWorks pour créer une Object Table et actualiser le cache des métadonnées.

    -- Enable the three-layer model to support schemas in a MaxCompute project. 
    SET odps.namespace.schema=true;
    -- Select the MaxCompute project. 
    USE <project_name>;
    -- Select the schema. 
    USE SCHEMA <schema_name>;
    -- Enable the 2.0 data type system in the MaxCompute project. 
    SET odps.sql.type.system.odps2=true;
    -- This function is not supported for MaxQA query acceleration. 
    SET odps.mcqa.disable=true;
    -- Create an 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 the table cache. 
    ALTER TABLE test_get_signed_url_from_oss REFRESH METADATA;
  3. Interrogez les métadonnées dans l'Object Table.

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

    Résultat attendu :

    +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+
    | 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. Lisez les données de l'objet en utilisant la fonction 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;

    Résultat attendu :

    +----------------------------------------+
    | _c0                                    |
    +----------------------------------------+
    | test maxcompute download files by url  |
    +----------------------------------------+
  5. Interrogez l'Object Table et générez une URL pré-signée.

    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;

    Résultat attendu :

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

Étape 2 : Télécharger l'objet depuis ECS

  1. Connectez-vous à la console ECS. Dans le volet de navigation de gauche, choisissez Instances & Images > Instances.

  2. Dans la région Chine (Hangzhou), sélectionnez l'instance cible, cliquez sur Remote Connection, puis connectez-vous à l'instance à l'aide de Workbench.

  3. Dans le terminal, exécutez les commandes suivantes pour télécharger l'objet OSS :

    -- Change the directory to /opt.
    cd /opt
    -- Download the OSS object by using the pre-signed URL.
    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=****"

    Sortie :

    [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

Problème 1 : Le chemin de la table dans la fonction diffère du chemin de la table sous-jacente interrogée

  • Message d'erreur

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

  • Description du problème

    Le nom de la table test_get_signed_url_from_ossxxxxxx n'existe pas ou diffère du nom de table spécifié dans l'instruction SQL.

  • Solution

    Spécifiez le nom d'une Object Table existante au format project.schema.table.

La valeur du paramètre timeToLiveSeconds n'est pas valide

  • Message d'erreur

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

  • Description du problème

    La valeur du paramètre timeToLiveSeconds n'est pas valide. La valeur doit être comprise dans la plage [1, 604800].

  • Solution

    Spécifiez une valeur valide pour la durée de vie (TTL).

La valeur du paramètre HttpMethod n'est pas valide

  • Message d'erreur

    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'.

  • Description du problème

    La valeur du paramètre HttpMethod n'est pas valide.

  • Solution

    Définissez le paramètre HttpMethod sur GET ou PUT.

Le lien a expiré car la période de validité est trop courte

  • Message d'erreur

    L'erreur Request has expired s'affiche lorsque vous exécutez la commande curl.

  • Description du problème

    L'URL signée a expiré avant d'être utilisée.

  • Solution

    Définissez une valeur raisonnable pour le paramètre expiration. Ne définissez pas une valeur excessivement longue ou courte.

La syntaxe du modèle à trois couches n'est pas activée

  • Message d'erreur

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

  • Description du problème

    La syntaxe du schéma n'est pas activée. Par conséquent, le format project.schema.table ne peut pas être analysé.

  • Solution

    Ajoutez la commande set odps.namespace.schema=true; avant l'instruction SQL pour activer la syntaxe du schéma.

Fonctions associées

GET_SIGNED_URL_FROM_OSS est une fonction de traitement des données non structurées. Pour les autres fonctions associées, consultez la rubrique Fonctions de traitement des données non structurées.