Tous les produits
Search
Centre de documentation

MaxCompute:Utiliser PyODPS dans DataWorks

Dernière mise à jour :Aug 10, 2026

PyODPS, le SDK Python pour MaxCompute, vous permet de développer et d'exécuter des tâches PyODPS dans DataWorks. Cette rubrique présente les limites, le flux de travail principal et des exemples d'utilisation simples.

Limites

  • Limites d'utilisation

    Si vous recevez une erreur Got killed, le processus a été arrêté car il a dépassé la limite de mémoire. Ne téléchargez pas de données dans un nœud PyODPS pour un traitement local dans DataWorks. Soumettez plutôt les tâches de traitement des données à MaxCompute pour une exécution distribuée. Pour plus de détails, consultez Précautions : ne pas télécharger toutes les données localement pour exécuter PyODPS.

  • Limites de prise en charge des packages

    • Les nœuds PyODPS dans DataWorks n'incluent pas certains packages, tels que matplotlib. Cela limite les fonctionnalités suivantes :

      • La fonction plot de DataFrame.

      • Les fonctions définies par l'utilisateur (UDF) DataFrame doivent être soumises à MaxCompute pour exécution. Le bac à sable Python ne prend en charge que les bibliothèques Python pures et NumPy en tant que bibliothèques tierces ; vous ne pouvez donc pas utiliser Pandas directement.

      • Dans le code exécuté dans DataWorks sans UDF, vous pouvez utiliser les packages NumPy et Pandas préinstallés. Les autres packages tiers contenant du code binaire ne sont pas pris en charge.

    • Les nœuds PyODPS dans DataWorks ne prennent pas en charge le package Python atexit. Utilisez un bloc try-finally pour implémenter une fonctionnalité similaire.

  • Limite sur le nombre d'enregistrements de données à lire

    Par défaut, options.tunnel.use_instance_tunnel est défini sur False pour les nœuds PyODPS dans DataWorks, ce qui limite les lectures à un maximum de 10 000 enregistrements. Pour lire davantage d'enregistrements, vous devez activer globalement instance tunnel en définissant options.tunnel.use_instance_tunnel sur True.

Procédure

  1. Créez un nœud PyODPS.

    Accédez à la page Data Development dans DataWorks pour créer un nœud PyODPS. Il existe deux types de nœuds PyODPS :

    • PyODPS 2, basé sur Python 2.

    • PyODPS 3, basé sur Python 3.

    Créez un nœud PyODPS en fonction de la version de Python que vous utilisez. Pour les étapes détaillées, consultez Développer une tâche PyODPS 2 et Développer une tâche PyODPS 3.

  2. Développez le code pour la tâche PyODPS.

    Après avoir créé le nœud, suivez les exemples des sections suivantes pour découvrir les principales fonctionnalités de PyODPS.

    Pour plus d'informations sur l'utilisation de PyODPS, consultez Vue d'ensemble des opérations de base et DataFrame (non recommandé). Vous pouvez également suivre l'exemple de Utiliser un nœud PyODPS pour la segmentation de mots chinois Jieba pour effectuer une opération simple de bout en bout.

  3. Configurez les propriétés de planification, puis enregistrez, validez et déployez le nœud pour permettre son exécution périodique.

Point d'entrée MaxCompute

Dans un nœud PyODPS, DataWorks fournit une variable globale, odps ou o, comme point d'entrée MaxCompute. Vous n'avez pas besoin de la définir manuellement.

# Check whether the pyodps_iris table exists.
print(o.exist_table('pyodps_iris'))

Le code renvoie True, indiquant que la table pyodps_iris existe.

Remarque

Les identifiants de l'objet de point d'entrée o permettent d'accéder uniquement à MaxCompute, et non aux autres services cloud. DataWorks ne fournit ces identifiants que lors de l'exécution d'un nœud PyODPS. Vous ne pouvez pas obtenir d'identifiants supplémentaires en appelant des méthodes sur cet objet, telles que o.from_global.

Exécuter SQL

Fonctionnalités générales

  • Vous pouvez exécuter des instructions SQL dans un nœud PyODPS en utilisant des méthodes telles que execute_sql() ou run_sql(). Ces méthodes prennent principalement en charge les instructions DDL (Data Definition Language) et DML (Data Manipulation Language).

    Remarque

    Les méthodes execute_sql() et run_sql() ne prennent pas en charge toutes les instructions SQL. Pour les instructions autres que DDL ou DML, vous devez utiliser d'autres méthodes. Par exemple, utilisez la méthode run_security_query pour exécuter des instructions GRANT ou REVOKE, et utilisez la méthode run_xflow ou execute_xflow pour exécuter des commandes API.

  • Pour lire les résultats de l'exécution SQL dans un nœud PyODPS, utilisez open_reader().

Pour plus d'informations sur les opérations liées à SQL dans un nœud PyODPS, consultez SQL.

Précautions : format des données et limites d'enregistrement

Pour des raisons de compatibilité historique, Instance Tunnel n'est pas activé par défaut dans DataWorks. Par conséquent, instance.open_reader utilise l'interface Result par défaut, qui est limitée à 10 000 enregistrements et présente des problèmes avec les types de données complexes. Si votre projet ne dispose pas d'un mécanisme de protection des données et que vous devez itérer sur toutes les données ou lire des types de données complexes tels que Array, activez Instance Tunnel et désactivez la limitation limit.

  • Désactivation de la limitation limit au moment de l'exécution

    Utilisez l'instruction suivante pour activer globalement Instance Tunnel et désactiver la restriction limit.

    options.tunnel.use_instance_tunnel = True
    options.tunnel.limit_instance_tunnel = False  # Disable the limit to read all data.
    with instance.open_reader() as reader:
        # You can read all data through Instance Tunnel.
        # You can use reader.count to get the record count.
  • Désactivation de la limitation limit pour le Reader actuel uniquement

    Vous pouvez également ajouter tunnel=True à open_reader pour activer instance tunnel uniquement pour l'appel open_reader actuel. Ajoutez limit=False pour désactiver la restriction limit pour cet appel.

    with instance.open_reader(tunnel=True, limit=False) as reader:
        # This open_reader call uses the Instance Tunnel interface and can read all data.

Pour plus d'informations sur Instance Tunnel et les limites de lecture des données, consultez Lire les résultats de l'exécution SQL.

DataFrame

  • Exécution

    Dans DataWorks, les opérations DataFrame nécessitent un appel explicite à une méthode d'exécution immédiate, telle que execute ou persist.

    # Call an immediate execution method to process each record and print all data from the pyodps_iris table where iris.sepalwidth is less than 3.
    from odps.df import DataFrame
    iris = DataFrame(o.get_table('pyodps_iris'))
    for record in iris[iris.sepalwidth < 3].execute():  
        print(record)
  • Sortie verbeuse

    Par défaut, options.verbose est activé dans DataWorks, affichant des informations détaillées telles que l'URL Logview lors de l'exécution du nœud. Vous pouvez configurer cette option pour contrôler l'affichage de ces détails.

Pour plus d'exemples d'opérations DataFrame, consultez DataFrame (non recommandé).

Paramètres de planification

Dans un nœud PyODPS, les paramètres de planification vous permettent d'obtenir des valeurs telles que la date métier pour l'exécution d'une tâche. Bien que la définition et l'utilisation des paramètres de planification soient identiques à celles des nœuds SQL, leur référence dans le code diffère.

  • Les nœuds SQL utilisent directement une chaîne telle que ${param_name} dans le code.

  • Au lieu d'effectuer un remplacement de chaîne pour ${param_name}, DataWorks ajoute un dictionnaire global nommé args avant l'exécution du nœud. Vous pouvez obtenir la valeur d'un paramètre de planification en accédant à ce dictionnaire, par exemple args[param_name].

Par exemple, si vous définissez le paramètre de planification ds=${yyyymmdd} dans le volet Basic properties > Parameters, vous pouvez récupérer ce paramètre dans votre code comme suit :

  • Obtenez la valeur du paramètre ds.

    print('ds=' + args['ds'])
    # Returns the time of ds, for example, ds=20161116
  • Obtenez les données d'une table dans une partition nommée ds=${yyyymmdd}.

    o.get_table('table_name').get_partition('ds=' + args['ds'])
    # Obtain data from the ds partition of the table_name table.

Pour plus d'informations sur les paramètres de planification, consultez Configurer et utiliser les paramètres de planification.

Indications de paramètres d'exécution

Pour définir des paramètres d'exécution pour une tâche, utilisez le paramètre hints, qui accepte un dict.

o.execute_sql('select * from pyodps_iris', hints={'odps.sql.mapper.split.size': 16})

Vous pouvez également définir sql.settings globalement. Une fois configurés, ces paramètres sont automatiquement appliqués à chaque exécution.

from odps import options
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('select * from pyodps_iris')  # Hints are added based on the global configuration.

Packages tiers

Les nœuds DataWorks sont livrés avec les packages tiers préinstallés suivants.

|
**Nom du package**
|
**Version Python 2**
|
**Version Python 3**
| | --- | --- | --- | |
requests
|
2.11.1
|
2.26.0
| |
numpy
|
1.16.6
|
1.18.1
| |
pandas
|
0.24.2
|
1.0.5
| |
scipy
|
0.19.0
|
1.3.0
| |
scikit_learn
|
0.18.1
|
0.22.1
| |
pyarrow
|
0.16.0
|
2.0.0
| |
lz4
|
2.1.4
|
3.1.10
| |
zstandard
|
0.14.1
|
0.17.0
|

Si vous avez besoin d'un package qui n'est pas préinstallé, utilisez la méthode load_resource_package pour charger un package tiers à partir d'une ressource MaxCompute. Commencez par créer une archive de package avec pyodps-pack, puis utilisez load_resource_package pour la charger avant d'importer son contenu. Pour plus d'informations sur pyodps-pack, consultez Créer un package tiers pour PyODPS et Utiliser un package tiers dans PyODPS.

Remarque

Lorsque vous créez un package pour un nœud Python 2, ajoutez le paramètre --dwpy27 à la commande pyodps-pack.























































Exemple :

  1. Utilisez la commande suivante pour empaqueter ipaddress.

    pyodps-pack -o ipaddress-bundle.tar.gz ipaddress
  2. Après avoir téléchargé et validé ipaddress-bundle.tar.gz en tant que ressource, vous pouvez utiliser le package ipaddress dans un nœud PyODPS 3 comme suit :

    load_resource_package("ipaddress-bundle.tar.gz")
    import ipaddress

DataWorks limite la taille totale des packages téléchargés à 100 Mo. Pour exclure les packages préinstallés de votre bundle, utilisez le paramètre --exclude de pyodps-pack. Par exemple, la commande suivante exclut numpy et pandas.

pyodps-pack -o bundle.tar.gz --exclude numpy --exclude pandas <YOUR_PACKAGE>

Autres comptes

Pour accéder à MaxCompute avec un autre compte, utilisez la méthode as_account sur l'objet de point d'entrée MaxCompute. Cela crée un nouvel objet de point d'entrée indépendant de l'instance o par défaut.

Important

La méthode as_account nécessite PyODPS 0.11.3 ou une version ultérieure. Vous ne pouvez pas utiliser cette méthode si votre environnement DataWorks exécute une version antérieure.

Procédure

  1. Accordez à l'autre utilisateur les autorisations de projet requises. Pour plus d'informations, consultez Annexe : Accorder des autorisations à un autre compte.

  2. Dans le nœud PyODPS, utilisez la méthode as_account pour changer de compte et créer un nouvel objet de point d'entrée.

    import os
    # Make sure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your AccessKey ID,
    # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your AccessKey Secret.
    # We recommend that you do not use the AccessKey ID and AccessKey Secret strings directly.
    new_odps = o.as_account(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
  3. Vérifiez si le changement de compte a réussi.

    Interrogez les informations sur l'utilisateur actuel en ajoutant l'instruction suivante. Si la sortie affiche l'UID de l'autre utilisateur, le changement de compte a réussi.

    print(new_odps.get_project().current_user)
    Remarque

    new_odps représente l'objet de point d'entrée pour le nouveau compte.

Exemple

  1. Créez une table et importez des données.

    1. Téléchargez le jeu de données Iris iris.data et renommez-le en iris.csv.

    2. Créez une table nommée pyodps_iris et téléchargez le jeu de données iris.csv. Pour les instructions, consultez Créer une table et télécharger des données.

      Voici l'instruction de création de table.

      CREATE TABLE if not exists pyodps_iris
      (
      sepallength  DOUBLE comment 'sepal length (cm)',
      sepalwidth   DOUBLE comment 'sepal width (cm)',
      petallength  DOUBLE comment 'petal length (cm)',
      petalwidth   DOUBLE comment 'petal width (cm)',
      name         STRING comment 'species'
      );
  2. Créez un nœud ODPS SQL pour accorder les autorisations nécessaires. Pour plus d'informations, consultez Annexe : Accorder des autorisations à un autre compte.

  3. Créez un nœud PyODPS pour changer de compte. Le code suivant fournit un exemple. Pour plus d'informations, consultez Développer une tâche PyODPS 3.

    from odps import ODPS
    import os
    import sys
    # Make sure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to the user's AccessKey ID,
    # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to the user's AccessKey Secret.
    # We recommend that you do not use the AccessKey ID and AccessKey Secret strings directly.
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] = '<AccessKey ID>'
    os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] = '<AccessKey Secret>'
    od = o.as_account(os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), 
             os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
            )
    iris = DataFrame(od.get_table('pyodps_iris'))
    # Print the output by using a conditional statement.
    with od.execute_sql('select * from pyodps_iris WHERE sepallength > 5 ').open_reader() as reader4:
        print(reader4.raw)
        for record in reader4:
            print(record["sepallength"],record["sepalwidth"],record["petallength"],record["petalwidth"],record["name"])
    # Print the UID of the current user.
    print(od.get_project().current_user)
  4. Exécutez le code et affichez le résultat.

    Executing user script with PyODPS 0.11.4.post0
    "sepallength","sepalwidth","petallength","petalwidth","name"
    5.4,3.9,1.7,0.4,"Iris-setosa"
    5.4,3.7,1.5,0.2,"Iris-setosa"
    5.8,4.0,1.2,0.2,"Iris-setosa"
    5.7,4.4,1.5,0.4,"Iris-setosa"
    5.4,3.9,1.3,0.4,"Iris-setosa"
    5.1,3.5,1.4,0.3,"Iris-setosa"
    5.7,3.8,1.7,0.3,"Iris-setosa"
    5.1,3.8,1.5,0.3,"Iris-setosa"
    5.4,3.4,1.7,0.2,"Iris-setosa"
    5.1,3.7,1.5,0.4,"Iris-setosa"
    5.1,3.3,1.7,0.5,"Iris-setosa"
    5.2,3.5,1.5,0.2,"Iris-setosa"
    5.2,3.4,1.4,0.2,"Iris-setosa"
    5.4,3.4,1.5,0.4,"Iris-setosa"
    5.2,4.1,1.5,0.1,"Iris-setosa"
    5.5,4.2,1.4,0.2,"Iris-setosa"
    5.5,3.5,1.3,0.2,"Iris-setosa"
    5.1,3.4,1.5,0.2,"Iris-setosa"
    5.1,3.8,1.9,0.4,"Iris-setosa"
    5.1,3.8,1.6,0.2,"Iris-setosa"
    5.3,3.7,1.5,0.2,"Iris-setosa"
    7.0,3.2,4.7,1.4,"Iris-versicolor"
    6.4,3.2,4.5,1.5,"Iris-versicolor"
    6.9,3.1,4.9,1.5,"Iris-versicolor"
    5.5,2.3,4.0,1.3,"Iris-versicolor"
    6.5,2.8,4.6,1.5,"Iris-versicolor"
    5.7,2.8,4.5,1.3,"Iris-versicolor"
    6.3,3.3,4.7,1.6,"Iris-versicolor"
    6.6,2.9,4.6,1.3,"Iris-versicolor"
    5.2,2.7,3.9,1.4,"Iris-versicolor"
    5.9,3.0,4.2,1.5,"Iris-versicolor"
    6.0,2.2,4.0,1.0,"Iris-versicolor"
    6.1,2.9,4.7,1.4,"Iris-versicolor"
    5.6,2.9,3.6,1.3,"Iris-versicolor"
    6.7,3.1,4.4,1.4,"Iris-versicolor"
    5.6,3.0,4.5,1.5,"Iris-versicolor"
    5.8,2.7,4.1,1.0,"Iris-versicolor"
    6.2,2.2,4.5,1.5,"Iris-versicolor"
    5.6,2.5,3.9,1.1,"Iris-versicolor"
    5.9,3.2,4.8,1.8,"Iris-versicolor"
    6.1,2.8,4.0,1.3,"Iris-versicolor"
    6.3,2.5,4.9,1.5,"Iris-versicolor"
    6.1,2.8,4.7,1.2,"Iris-versicolor"
    6.4,2.9,4.3,1.3,"Iris-versicolor"
    6.6,3.0,4.4,1.4,"Iris-versicolor"
    6.8,2.8,4.8,1.4,"Iris-versicolor"
    6.7,3.0,5.0,1.7,"Iris-versicolor"
    6.0,2.9,4.5,1.5,"Iris-versicolor"
    5.7,2.6,3.5,1.0,"Iris-versicolor"
    5.5,2.4,3.8,1.1,"Iris-versicolor"
    5.5,2.4,3.7,1.0,"Iris-versicolor"
    5.8,2.7,3.9,1.2,"Iris-versicolor"
    6.0,2.7,5.1,1.6,"Iris-versicolor"
    5.4,3.0,4.5,1.5,"Iris-versicolor"
    6.0,3.4,4.5,1.6,"Iris-versicolor"
    6.7,3.1,4.7,1.5,"Iris-versicolor"
    6.3,2.3,4.4,1.3,"Iris-versicolor"
    5.6,3.0,4.1,1.3,"Iris-versicolor"
    5.5,2.5,4.0,1.3,"Iris-versicolor"
    5.5,2.6,4.4,1.2,"Iris-versicolor"
    6.1,3.0,4.6,1.4,"Iris-versicolor"
    5.8,2.6,4.0,1.2,"Iris-versicolor"
    5.6,2.7,4.2,1.3,"Iris-versicolor"
    5.7,3.0,4.2,1.2,"Iris-versicolor"
    5.7,2.9,4.2,1.3,"Iris-versicolor"
    6.2,2.9,4.3,1.3,"Iris-versicolor"
    5.1,2.5,3.0,1.1,"Iris-versicolor"
    5.7,2.8,4.1,1.3,"Iris-versicolor"
    6.3,3.3,6.0,2.5,"Iris-virginica"
    5.8,2.7,5.1,1.9,"Iris-virginica"
    7.1,3.0,5.9,2.1,"Iris-virginica"
    6.3,2.9,5.6,1.8,"Iris-virginica"
    6.5,3.0,5.8,2.2,"Iris-virginica"
    7.6,3.0,6.6,2.1,"Iris-virginica"
    7.3,2.9,6.3,1.8,"Iris-virginica"
    6.7,2.5,5.8,1.8,"Iris-virginica"
    7.2,3.6,6.1,2.5,"Iris-virginica"
    6.5,3.2,5.1,2.0,"Iris-virginica"
    6.4,2.7,5.3,1.9,"Iris-virginica"
    6.8,3.0,5.5,2.1,"Iris-virginica"
    5.7,2.5,5.0,2.0,"Iris-virginica"
    5.8,2.8,5.1,2.4,"Iris-virginica"
    6.4,3.2,5.3,2.3,"Iris-virginica"
    6.5,3.0,5.5,1.8,"Iris-virginica"
    7.7,3.8,6.7,2.2,"Iris-virginica"
    7.7,2.6,6.9,2.3,"Iris-virginica"
    6.0,2.2,5.0,1.5,"Iris-virginica"
    6.9,3.2,5.7,2.3,"Iris-virginica"
    5.6,2.8,4.9,2.0,"Iris-virginica"
    7.7,2.8,6.7,2.0,"Iris-virginica"
    6.3,2.7,4.9,1.8,"Iris-virginica"
    6.7,3.3,5.7,2.1,"Iris-virginica"
    7.2,3.2,6.0,1.8,"Iris-virginica"
    6.2,2.8,4.8,1.8,"Iris-virginica"
    6.1,3.0,4.9,1.8,"Iris-virginica"
    6.4,2.8,5.6,2.1,"Iris-virginica"
    7.2,3.0,5.8,1.6,"Iris-virginica"
    7.4,2.8,6.1,1.9,"Iris-virginica"
    7.9,3.8,6.4,2.0,"Iris-virginica"
    6.4,2.8,5.6,2.2,"Iris-virginica"
    6.3,2.8,5.1,1.5,"Iris-virginica"
    6.1,2.6,5.6,1.4,"Iris-virginica"
    7.7,3.0,6.1,2.3,"Iris-virginica"
    6.3,3.4,5.6,2.4,"Iris-virginica"
    6.4,3.1,5.5,1.8,"Iris-virginica"
    6.0,3.0,4.8,1.8,"Iris-virginica"
    6.9,3.1,5.4,2.1,"Iris-virginica"
    6.7,3.1,5.6,2.4,"Iris-virginica"
    6.9,3.1,5.1,2.3,"Iris-virginica"
    5.8,2.7,5.1,1.9,"Iris-virginica"
    6.8,3.2,5.9,2.3,"Iris-virginica"
    6.7,3.3,5.7,2.5,"Iris-virginica"
    6.7,3.0,5.2,2.3,"Iris-virginica"
    6.3,2.5,5.0,1.9,"Iris-virginica"
    6.5,3.0,5.2,2.0,"Iris-virginica"
    6.2,3.4,5.4,2.3,"Iris-virginica"
    5.9,3.0,5.1,1.8,"Iris-virginica"
    <User 139xxxxxxxxxxxxx>

Dépannage

Si votre code ne répond plus pendant l'exécution et ne produit aucune sortie, ajoutez le commentaire suivant au début de votre code. DataWorks imprimera alors la trace de pile de tous les threads toutes les 30 secondes.

# -*- dump_traceback: true -*-
Remarque

Cette méthode s'applique aux nœuds PyODPS 3, version 0.11.4.1 ou ultérieure.

Version PyODPS

Vous pouvez vérifier la version actuelle de PyODPS en exécutant du code Python ou en consultant le journal d'exécution d'une tâche PyODPS.

  • Exécutez le code suivant dans un nœud PyODPS :

    # Enter the following code:
    import odps; print(odps.__version__)
    # Sample result
    0.11.2.3
  • Vérifiez le journal d'exécution d'une tâche PyODPS. La version est indiquée dans la sortie du journal, comme dans cet exemple :

    2023-07-26 15:39:53  INFO SKYNET_DAGTYPE=100:
    2023-07-26 15:39:53  INFO SKYNET_SYSTEM_ENV=dev:
    2023-07-26 15:39:53  INFO SKYNET_GMTDATE=20230726:
    2023-07-26 15:39:53  INFO SKYNET_BIZDATE=20230726:
    2023-07-26 15:39:53  INFO SKYNET_ENVTYPE=1:
    2023-07-26 15:39:53  INFO SKYNET_PROJECTID=342277:
    2023-07-26 15:39:53  INFO SKYNET_BUSINESS_ID=10756717:
    2023-07-26 15:39:53  INFO SKYNET_ARGS_ENABLE=true:
    2023-07-26 15:39:53  INFO SKYNET_ACCOUNT_ID=xxx
    2023-07-26 15:39:53  INFO TASK_SOURCE=dataworks_datastudio:
    2023-07-26 15:39:53  INFO SKYNET_REGION=xxx:
    2023-07-26 15:39:53  INFO LINK_FILE_ID=503440413:
    2023-07-26 15:39:53  INFO TASK_PLUGIN_NAME=pyodps:
    2023-07-26 15:39:53  INFO ALISA_UNIQUEKEY=xxx
    2023-07-26 15:39:53  INFO ALISA_TASK_ID=T3_xxx
    2023-07-26 15:39:53  INFO ALISA_TASK_EXEC_TARGET=group_599314507759873_dev:
    2023-07-26 15:39:53  INFO ALISA_TASK_PRIORITY=0:
    2023-07-26 15:39:53  INFO --- Invoking Shell command line now ---
    2023-07-26 15:39:53  INFO ============================================================
    Executing user script with PyODPS 0.11.4.post0
    "sepallength","sepalwidth","petallength","petalwidth","name"
    5.4,3.9,1.7,0.4,"Iris-setosa"
    5.4,3.7,1.5,0.2,"Iris-setosa"
    5.8,4.0,1.2,0.2,"Iris-setosa"

Annexe : Accorder des autorisations utilisateur

Pour permettre à un autre utilisateur Alibaba Cloud (pas un utilisateur RAM) d'accéder aux projets et aux tables dans votre espace de travail DataWorks, créez un nœud ODPS SQL et exécutez les commandes d'autorisation suivantes. Pour plus d'informations sur la création d'un nœud ODPS SQL, consultez Créer un nœud ODPS SQL. Pour plus d'informations sur les autorisations, consultez Utilisateurs et autorisations.

-- Add another Alibaba Cloud account user at the project level.
add user ALIYUN$<account_name>;
-- Grant the CreateInstance permission on the project.
grant CreateInstance on project <project_name> to USER ALIYUN$<account_name>;
-- Grant the Describe and Select permissions on the table.
grant Describe, Select on table <table_name> to USER ALIYUN$<account_name>;
-- View the authorization results.
show grants for ALIYUN$<account_name>;

Voici un exemple de résultat d'autorisation obtenu en exécutant show grants for ALIYUN$<account_name>; :

Authorization Type: ACL
[user/ALIYUN$:xxx.com]
A    projects/mc_xxx : CreateInstance
A    projects/mc_xxx/tables/pyodps_xxx : Describe | Select

Annexe : Exemple de données

Pour suivre les exemples de cette rubrique, créez la table pyodps_iris et remplissez-la avec des données en suivant les instructions de Étape 1 : Créer une table et importer des données. Cette table est utilisée tout au long des exemples.

Rubriques connexes

Utilisez la fonctionnalité Operating history pour afficher l'historique de toutes les tâches exécutées dans DataStudio au cours des trois derniers jours. À partir de cette vue, vous pouvez arrêter les tâches en cours d'exécution et enregistrer les instructions SQL des enregistrements de tâches sous forme de fichiers temporaires. Pour plus d'informations, consultez Historique des opérations.