Tous les produits
Search
Centre de documentation

MaxCompute:GET_SIGNED_URL_FROM_OSS

Dernière mise à jour :Sep 02, 2026

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

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 la fonction GET_SIGNED_URL_FROM_OSS pour générer dynamiquement une URL pré-signée pour un objet, ce qui permet le chargement et le téléchargement de fichiers. Pour en savoir plus, reportez-vous à la section Générer une URL pré-signée pour charger et télécharger des objets OSS.

Limites

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

  • Cette fonction n'est pas prise en charge par l'accélération des requêtes MaxQA. Vous devez inclure 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 fournie dans les résultats renvoyés par la section Afficher les propriétés d'une Object Table.

Aucune

timeToLiveSeconds

Non

INT

La durée de vie de l'URL pré-signée, exprimée en secondes. Minimum : 1 seconde. Maximum : 604 800 secondes (7 jours). Ce paramètre est mutuellement exclusif avec le paramètre 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 le paramètre timeToLiveSeconds.

3 600 secondes après l'heure actuelle

httpMethod

Non

STRING

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

  • GET : Téléchargement

  • PUT : Chargement

GET

Valeur de retour

Renvoie l'URL pré-signée générée sous forme de chaîne de caractères (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) située dans la région Chine (Hangzhou).

Avant d'exécuter le code ci-dessous, remplacez project_name et schema_name par les noms réels de votre projet et de votre schéma.

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

  1. Connectez-vous à la console OSS et chargez le fichier de test signedget.txt dans le répertoire object-table-test/object_table_folder . Pour plus de détails, consultez la rubrique Charger des fichiers.

  2. Utilisez un client local (odpscmd) ou créez un nœud SQL MaxCompute dans DataWorks afin de créer une Object Table et d'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 
    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 présentes 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 à l'aide de 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 via 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 indiqué 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 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 en utilisant le 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 est incorrecte. Elle doit se situer dans la plage [1, 604 800].

  • Solution

    Indiquez 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 est incorrecte.

  • 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 lors de l'exécution de 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. Évitez les valeurs excessivement longues ou courtes.

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 de 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 de schéma.

Fonctions associées

GET_SIGNED_URL_FROM_OSS est une fonction de traitement des données non structurées. Pour consulter d'autres fonctions connexes, reportez-vous à la rubrique Fonctions de traitement des données non structurées.