Tous les produits
Search
Centre de documentation

MaxCompute:FAQ sur le lakehouse et les tables externes

Dernière mise à jour :Sep 07, 2026

Cette rubrique répond aux questions fréquemment posées concernant les tables externes.

Catégorie

FAQ

Table externe Object Storage Service (OSS)

Table externe Hologres

Comment résoudre l'erreur ODPS-0130071 lors de la lecture directe des données Hologres depuis MaxCompute ?

Problèmes de performance

Comment diagnostiquer la lenteur des tâches SQL sur les tables externes ?

Erreur ODPS-0123131 : Lecture des types DATETIME avec des extracteurs personnalisés

  • Problème

    Lorsque vous utilisez un extracteur personnalisé pour lire des données non structurées, l'erreur suivante s'affiche si un champ de données est de type DATETIME, par exemple 2019-11-11 06:43:36.

    FAILED: ODPS-0123131:User defined function exception - Traceback:
    java.lang.IllegalArgumentException
        at java.sql.Date.valueOf(Date.java:143)
        at com.aliyun.odps.udf.example.text.TextExtractor.textLineToRecord(TextExtractor.java:194)
        at com.aliyun.odps.udf.example.text.TextExtractor.extract(TextExtractor.java:153)
        at com.aliyun.odps.udf.ExtractorHandler.extract(ExtractorHandler.java:120)       
  • Cause

    Dans le code Date.valueOf(parts[i]), la fonction java.sql.Date.valueOf() accepte uniquement les paramètres STRING au format "yyyy-[m]m-[d]d" et ne prend pas en charge les paramètres DATETIME.

  • Résolution

    1. Ajoutez la dépendance Joda-Time à votre projet et importez les classes requises dans votre code.

      -- Dependency.
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10</version>
      </dependency> 
      -- Import information.
      import org.joda.time.DateTime;
      import org.joda.time.format.DateTimeFormat;                           
    2. Utilisez la fonction DateTimeFormat.forPattern() pour convertir une valeur de type DATETIME en type STRING afin de permettre sa lecture.

      record.setDate(index, new Date(DateTime.parse(parts[i], DateTimeFormat.forPattern("yyyy-MM-dd HH:mi:ss")).getMillis()));                           

    Exemple :

    1. Utilisez le client MaxCompute pour télécharger le fichier JAR de votre projet d'extracteur.

      add jar /Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jar      

      /Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jar correspond au chemin de stockage local du fichier JAR généré.

    2. Utilisez le client MaxCompute pour télécharger le fichier JAR tiers Joda-Time.

      add jar /Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar                         

      /Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar correspond au chemin local du fichier JAR tiers Joda-Time.

    3. Téléchargez les données de test dans le répertoire spécifié sur OSS. Pour un fichier nommé video_play_log.txt, voici un exemple de données.

      5c661071dba64d5080c91da085ff1073^Music-Click-Fast forward^26.12.XX.XX^2019-11-11 06:43:36                           
    4. Lisez les données depuis la table externe.

      select * from <project_name>.video_play_log;
      +------+-------+---+----------------+
      | uuid  | action  | ip  | time      |
      +------+-------+---+----------------+
      | 5c661071dba64d5080c91da085ff1073 | Music-Click-Fast forward | 26.12.XX.XX | 2019-11-11 06:43:36 |
      +------+-------+---+----------------+     

Dépassement de mémoire avec les UDF sur les tables externes OSS

  • Problème

    Lorsque vous utilisez une UDF pour accéder à une table externe OSS, une erreur de dépassement de mémoire se produit, même si la UDF a réussi les tests locaux.

    FAILED: ODPS-0123131:User defined function exception - Traceback:
    java.lang.OutOfMemoryError: Java heap space        

    Après avoir défini les paramètres suivants, le temps d'exécution augmente, mais l'erreur persiste.

    set odps.stage.mapper.mem = 2048; 
    set odps.stage.mapper.jvm.mem = 4096;       
  • Cause

    La table externe contient trop de fichiers objets, ce qui consomme une grande quantité de mémoire. De plus, aucune partition n'est configurée.

  • Résolution

    • Interrogez un volume de données plus faible.

    • Utilisez des partitions pour réduire la quantité de données analysées lors de chaque requête.

Erreur : Les données inline dépassent la taille maximale autorisée

  • Problème

    L'erreur Inline data exceeds the maximum allowed size se produit lors du traitement des données dans Object Storage Service (OSS).

  • Cause

    Lorsque MaxCompute écrit des données dans une table externe OSS, il peut tenter de créer un fichier unique dont la taille dépasse la limite opérationnelle.

  • Résolution

    Ajustez les propriétés suivantes pour contrôler le plan d'exécution. Cela garantit que les fichiers individuels écrits dans la table externe OSS ne dépassent pas la limite de taille.

    -- Adjust the amount of data read by each mapper. Unit: MB.
    SET odps.sql.mapper.split.size=256; 
    -- Adjust the number of workers in the reduce phase.
    SET odps.stage.reducer.num=100; 

Fusionner les petits fichiers avec les tables externes OSS

Utilisez le journal Logview pour vérifier si le dernier opérateur du plan d'exécution SQL est un Reducer ou un Joiner. S'il s'agit d'un Reducer, exécutez l'instruction set odps.stage.reducer.num=1;. S'il s'agit d'un Joiner, exécutez l'instruction set odps.stage.joiner.num=1;.

Erreur ODPS-0130071 : Lecture des données Hologres depuis MaxCompute

  • Problème

    Lorsque vous lisez directement les données depuis Hologres, l'erreur « ODPS-0130071 Failed to split to equal size...max count: 7777 » s'affiche. Exemple :

    ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777
  • Cause

    Cette erreur se produit car la stratégie de fractionnement par défaut des mappeurs de MaxCompute (volume de données d'entrée / split.size = 256 Mo) entraîne un dépassement de la limite maximale de 7 777 mappeurs concurrents.

    Remarque

    Cette limite empêche les utilisateurs de soumettre des tâches générant un grand nombre de mappeurs, ce qui pourrait affecter la stabilité de Hologres ou la connexion réseau.

  • Résolution

    Définissez les paramètres suivants pour résoudre l'erreur.

    -- Increase the mapper concurrency limit. The maximum value is 10,000.
    SET odps.external.holo.mapper.instances=10000; 
    -- Adjust task concurrency by increasing the split size. The maximum value is 512 MB.
    SET odps.sql.mapper.split.size=512; 

Tâches SQL lentes sur les tables externes

Les tâches SQL sur les tables externes peuvent être lentes pour plusieurs raisons courantes :

  • Lecture lente des fichiers compressés GZ depuis une table externe OSS

    • Problème

      La lecture d'un fichier volumineux et compressé (tel qu'un fichier GZ de 200 Go) depuis une table externe OSS est lente.

    • Cause

      La tâche est lente car les formats compressés comme GZ ne sont pas fractionnables, ce qui oblige MaxCompute à n'utiliser qu'un seul mappeur.

    • Résolution

      • Pour améliorer les performances, divisez le fichier compressé volumineux en plusieurs fichiers plus petits sur OSS. Cela permet à MaxCompute d'utiliser plusieurs mappeurs en parallèle, ce qui augmente le débit de lecture.

        -- Sets the data split size for each mapper in MB.
        SET odps.sql.mapper.split.size=256;       
      • Pour les données non structurées, vérifiez si le chemin de la table externe Object Storage Service (OSS) ne contient qu'un seul fichier. S'il n'y a qu'un seul fichier, un seul Mappeur est généré car les données non structurées compressées ne peuvent pas être fractionnées. Cela ralentit le traitement. Divisez le fichier OSS volumineux en fichiers plus petits dans le chemin de la table externe OSS. Cela augmente le nombre de Mappeurs et améliore la vitesse de lecture.

  • Requête de données lente dans une table externe MaxCompute via un SDK

    • Problème

      L'interrogation des données d'une table externe MaxCompute à l'aide d'un SDK est lente.

    • Résolution

      Les tables externes ne prennent en charge que les analyses complètes de table, ce qui peut être lent. Nous vous recommandons d'utiliser plutôt des tables internes MaxCompute.

  • Requête de données lente depuis une table externe Tablestore

    • Problème

      Une requête sur une table externe Tablestore est nettement plus lente qu'une requête équivalente sur une table interne MaxCompute contenant les mêmes données.

    • Résolution

      Cette différence de performance est attendue car l'interrogation d'une table externe implique des lectures de données à distance. Pour de meilleures performances, importez d'abord les données dans une table interne MaxCompute, puis exécutez vos requêtes.

Erreur « Couldn't connect to server » avec les tables externes OSS

  • Problème

    Lorsque vous lisez des données depuis une table externe OSS, l'erreur suivante s'affiche : ODPS-0123131:User defined function exception - common/io/oss/oss_client.cpp(95): OSSRequestException: req_id: , http status code: -998, error code: HttpIoError, message: Couldn't connect to server.

  • Causes

    • Cause 1 : Lors de la création d'une table externe OSS, un endpoint public est utilisé pour le paramètre oss_endpoint dans oss_location au lieu d'un endpoint interne.

    • Cause 2 : Lors de la création d'une table externe OSS, le paramètre oss_endpoint spécifié dans le chemin oss_location appartient à une région différente.

  • Résolution

    • Pour la Cause 1 :

      Vérifiez le paramètre oss_location dans l'instruction CREATE TABLE de la table externe OSS. Si le paramètre oss_endpoint est un endpoint public, remplacez-le par un endpoint interne. Pour plus d'informations sur les paramètres, consultez Description des paramètres.

      Par exemple, si vous vous trouvez dans la région Indonésie (Jakarta) et utilisez l'endpoint oss://oss-ap-southeast-5.aliyuncs.com/<bucket>/.... pour créer une table externe, vous devez le remplacer par l'endpoint interne correspondant : oss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/.....

    • Pour la Cause 2 :

      Vérifiez que le paramètre oss_endpoint dans le paramètre oss_location de l'instruction CREATE TABLE de la table externe OSS correspond bien à l'endpoint de la région que vous souhaitez accéder. Pour plus d'informations sur les noms de domaine du réseau classique OSS, consultez Régions et endpoints.

Erreur « Network is unreachable (connect failed) » lors de la création de table

  • Problème

    Lorsque vous créez une table externe pour Object Storage Service (OSS), l'erreur suivante s'affiche :ODPS-0130071:[1,1] Semantic analysis exception - external table checking failure, error message: Cannot connect to the endpoint 'oss-cn-beijing.aliyuncs.com': Connect to bucket.oss-cn-beijing.aliyuncs.com:80 [bucket.oss-cn-beijing.aliyuncs.com] failed: Network is unreachable (connect failed).

  • Cause

    Lors de la création d'une table externe OSS, le paramètre oss_endpoint dans l'adresse oss_location utilise un endpoint public, et non un endpoint interne.

  • Résolution

    Vérifiez l'instruction CREATE TABLE de la table externe OSS pour vous assurer que le paramètre oss_endpoint spécifié dans le paramètre oss_location est un endpoint interne. S'il s'agit d'un endpoint public, remplacez-le par un endpoint interne. Pour plus d'informations sur les paramètres, consultez Description des paramètres.

    Par exemple, dans la région Chine (Pékin), si vous utilisez l'endpoint oss://oss-cn-beijing.aliyuncs.com/<bucket>/.... pour créer une table externe, vous devez le remplacer par l'endpoint interne correspondant oss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....