Tous les produits
Search
Centre de documentation

MaxCompute:OSS external tables

Dernière mise à jour :Oct 30, 2026

MaxCompute prend en charge les tables externes OSS qui correspondent à des répertoires Object Storage Service (OSS). Utilisez les tables externes OSS pour lire des données non structurées depuis OSS ou y écrire des données.

Remarques sur l'utilisation

  • Les tables externes OSS ne prennent pas en charge la propriété cluster.

  • La taille d'un fichier unique ne peut pas dépasser 2 Go. Vous devez fractionner les fichiers dont la taille est supérieure à 2 Go.

  • MaxCompute et OSS doivent se trouver dans la même région.

  • Nous vous recommandons d'éviter les caractères spéciaux (tels que les espaces) dans les noms de répertoires OSS, car ils peuvent entraîner l'échec des opérations de lecture et d'écriture ultérieures.

Méthodes d'accès

Les plateformes suivantes permettent de créer et d'utiliser des tables externes OSS.

Méthode

Plateforme

MaxCompute SQL

Visualisation

Prérequis

  • Vous avez créé un projet MaxCompute.

  • Préparez un bucket et un répertoire OSS. Créez un bucket et gérez les répertoires.

    MaxCompute peut créer automatiquement des répertoires OSS. Si une instruction SQL inclut des tables externes et des UDF, une seule instruction SQL peut lire ou écrire dans la table externe et exécuter la UDF. La création manuelle de répertoires est également prise en charge.

    Étant donné que MaxCompute n'est déployé que dans certaines régions, la connectivité réseau interrégionale peut poser problème. Conservez votre bucket dans la même région que votre projet MaxCompute.
  • Autorisation

    • Obtenez les permissions nécessaires pour accéder à OSS. Un compte Alibaba Cloud, un utilisateur RAM ou un rôle RAM peut accéder aux tables externes OSS. Autorisation STS pour OSS.

    • Obtenez l'autorisation CreateTable dans votre projet MaxCompute. Permissions MaxCompute.

Description des permissions

  • Lorsque vous accédez aux tables externes OSS, les données sont accessibles via le rôle spécifié dans le paramètre odps.properties.rolearn, que vous utilisiez un compte Alibaba Cloud, un utilisateur RAM ou un rôle RAM. Par conséquent, vous devez créer un rôle RAM, lui accorder les permissions d'accès au bucket OSS cible, puis configurer l'ARN du rôle dans le paramètre odps.properties.rolearn. Pour plus d'informations, consultez la section Paramètres.

  • Vous pouvez autoriser l'accès intra-compte ou inter-comptes en fonction de vos besoins métier. Nous vous recommandons d'utiliser une politique d'autorisation personnalisée pour un contrôle d'accès plus granulaire. Pour plus d'informations, consultez la section Autorisation pour les sources de données externes.

Créer une table externe OSS

  • Tables partitionnées et non partitionnées :

    • Effectuez votre choix en fonction de la manière dont vos fichiers de données sont stockés dans OSS. Utilisez une table partitionnée si les fichiers se trouvent dans des chemins partitionnés ; sinon, utilisez une table non partitionnée.

    • Les tables externes OSS prennent en charge les opérations de partition.

  • Nom de domaine réseau : Utilisez le nom de domaine du réseau classique pour OSS. MaxCompute ne garantit pas la connectivité réseau pour les noms de domaine du réseau public.

  • Une table externe OSS enregistre uniquement le mappage vers un répertoire OSS. La suppression d'une table externe OSS ne supprime pas les fichiers de données dans le répertoire OSS mappé.

  • Si un fichier de données OSS est un objet archivé, vous devez d'abord restaurer l'objet.

La syntaxe CREATE EXTERNAL TABLE varie selon le format du fichier de données. Adaptez la syntaxe et les paramètres à votre format de données. Des paramètres incorrects entraînent l'échec des opérations de lecture et d'écriture.

Syntaxe

Créer une table externe à l'aide de l'analyseur de données texte intégré

Syntaxe

Format des fichiers de données

Exemple

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> 
(
<col_name> <data_type>,
...
)
[comment <table_comment>]
[partitioned BY (<col_name> <data_type>, ...)] 
STORED BY '<StorageHandler>'  
WITH serdeproperties (
 ['<property_name>'='<property_value>',...]
) 
location '<oss_location>';

Formats de fichiers de données pris en charge pour la lecture ou l'écriture depuis ou vers OSS :

  • CSV

  • TSV

  • Fichiers CSV et TSV compressés avec GZIP, SNAPPY ou LZO

Créer une table externe à l'aide d'un analyseur de données open source intégré

Syntaxe

Format des fichiers de données

Exemple

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[comment <table_comment>]
[partitioned BY (<col_name> <data_type>, ...)]
[row format serde '<serde_class>'
  [WITH serdeproperties (
    ['<property_name>'='<property_value>',...])
  ]
]
STORED AS <file_format> 
location '<oss_location>' 
[USING '<resource_name>']
[tblproperties ('<tbproperty_name>'='<tbproperty_value>',...)];

Formats de fichiers de données pris en charge pour la lecture ou l'écriture dans OSS :

  • PARQUET

  • TEXTFILE

  • ORC

  • RCFILE

  • AVRO

  • JSON

  • SEQUENCEFILE

  • Hudi (prend uniquement en charge la lecture des données Hudi générées par DLF)

  • Fichiers PARQUET compressés avec ZSTD, SNAPPY ou GZIP

  • Fichiers ORC compressés avec SNAPPY ou ZLIB

  • Fichiers TEXTFILE compressés avec GZIP, SNAPPY ou LZO

Créez une table externe à l'aide d'un analyseur personnalisé

Syntaxe

Format de fichier de données

Exemple

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> 
(
<col_name> <date_type>,
...
)
[comment <table_comment>]
[partitioned BY (<col_name> <data_type>, ...)] 
STORED BY '<StorageHandler>' 
WITH serdeproperties (
 ['<property_name>'='<property_value>',...]
) 
location '<oss_location>' 
USING '<jar_name>';

Formats de fichiers de données pris en charge pour la lecture ou l'écriture dans OSS : fichiers de données dont le format diffère de ceux répertoriés ci-dessus.

Paramètres

Les paramètres suivants sont communs à tous les formats de tables externes. Pour les paramètres spécifiques à un format, consultez la documentation correspondante.

  • Paramètres de syntaxe de base

    Parameter

    Required

    Description

    mc_oss_extable_name

    Yes

    Le nom de la table externe OSS à créer.

    Les noms de table ne sont pas sensibles à la casse et ne peuvent pas être convertis de force vers une casse spécifique.

    col_name

    Yes

    Le nom d'une colonne dans la table externe OSS.

    Le schéma de la table externe doit correspondre au schéma du fichier de données OSS. Sinon, les données ne peuvent pas être lues.

    data_type

    Yes

    Le type de données d'une colonne dans la table externe OSS.

    Le type de données de chaque colonne doit correspondre à la colonne correspondante dans le fichier de données OSS. Sinon, les données ne peuvent pas être lues.

    table_comment

    No

    Le commentaire associé à la table. Il doit s'agir d'une chaîne valide ne dépassant pas 1 024 octets. Dans le cas contraire, une erreur est signalée.

    partitioned by (col_name data_type, ...)

    No

    Si les fichiers de données dans OSS sont stockés dans un chemin partitionné, incluez ce paramètre pour créer une table partitionnée.

    • col_name : le nom de la colonne de clé de partition.

    • data_type : le type de données de la colonne de clé de partition.

    '<(tb)property_name>'='<(tb)property_value>'

    Yes

    Propriétés étendues de la table externe. Consultez la documentation spécifique au format pour plus de détails.

    oss_location

    Yes

    Le chemin OSS où se trouvent les fichiers de données. Par défaut, tous les fichiers de données de ce chemin sont lus.

    Le format est oss://<oss_endpoint>/<Bucket name>/<OSS directory name>/.

    • oss_endpoint :

      • Le nom de domaine OSS. Vous devez utiliser le point de terminaison du réseau classique fourni par OSS, qui contient -internal.

        Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/xxx.

        Les noms de domaine du réseau classique OSS sont répertoriés dans Régions et points de terminaison.

        Assurez-vous que la région OSS où sont stockés les fichiers de données est identique à la région de votre projet MaxCompute. Si elles diffèrent, des problèmes de connectivité réseau peuvent survenir.
      • Si vous ne spécifiez pas de point de terminaison, le système utilise celui de la région où se trouve le projet actuel.

        Cette méthode n'est pas recommandée, car le stockage de fichiers inter-régions peut entraîner des problèmes de connectivité réseau.
    • Bucket name : le nom du bucket OSS. Le nom du bucket doit suivre le oss_endpoint.

      Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/your_bucket/path/.

      Consultez les noms des buckets dans Lister les buckets.

    • Directory name : le nom du répertoire OSS. Ne spécifiez pas de nom de fichier après le répertoire.

      Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/oss-mc-test/Demo1/.

      Exemples incorrects :

       -- HTTP connections are not supported.
          http://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/
          -- HTTPS connections are not supported.               
          https://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/
          -- Incorrect connection address.            
          oss://oss-cn-shanghai-internal.aliyuncs.com/Demo1
          -- Do not specify a file name.                            
          oss://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/vehicle.csv
  • Attributs WITH serdeproperties

    property_name

    Scenario

    property_value

    Default value

    odps.properties.rolearn

    Ajoutez cette propriété lors de l'utilisation de l'autorisation STS.

    Spécifiez l'ARN du rôle RAM disposant des autorisations nécessaires pour accéder à OSS.

    Obtenez l'ARN à partir des détails du rôle dans la console RAM. Exemple : acs:ram::xxxxxx:role/<role_name>.

    • Si les propriétaires de MaxCompute et d'OSS sont le même compte :

      • Si vous ne spécifiez pas odps.properties.rolearn dans l'instruction de création de table, l'ARN du rôle aliyunodpsdefaultrole est utilisé par défaut. Vous devez d'abord créer le rôle RAM en utilisant Autorisation STS. Le rôle AliyunODPSDefaultRole dispose d'autorisations étendues. Nous vous recommandons d'accorder des autorisations via un rôle personnalisé.

      • Pour utiliser l'ARN d'un rôle personnalisé, créez d'abord le rôle personnalisé. Autorisation STS pour OSS (autorisation personnalisée).

    • Si les propriétaires de MaxCompute et d'OSS sont des comptes différents, vous devez spécifier l'ARN d'un rôle personnalisé. Pour plus d'informations, consultez Autorisation STS pour OSS (autorisation personnalisée).

Listes d'autorisation et de blocage

Les tables externes MaxCompute OSS prennent en charge le filtrage via des listes d'autorisation (whitelist) et de blocage (blacklist). En définissant les paramètres correspondants dans les propriétés de la table (tblproperties), vous pouvez filtrer les fichiers à lire depuis un répertoire.

  • Paramètres tblproperties

    Détails des paramètres tblproperties

    property_name

    Cas d'utilisation

    Remarque

    property_value

    Valeur par défaut

    odps.external.data.file.whitelist.regex

    Filtrage personnalisé via liste d'autorisation

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.json'

    Aucune

    odps.external.data.file.blacklist.regex

    Filtrage personnalisé via liste de blocage

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.txt'

    Aucune

    odps.external.data.file.recursive.listing.enabled

    Contrôle de la recherche récursive de fichiers

    • True

    • False

    True

    odps.sql.unstructured.file.pattern.black.list( indicateur de session existant)

    Filtrage via liste de blocage au niveau de la session

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.json'

    Aucune

  • Règles d'application

    • La liste de blocage est prioritaire sur la liste d'autorisation : si un fichier correspond à une condition de la liste de blocage, il est exclu.

    • L'indicateur de session et le paramètre de liste de blocage dans tblproperties fonctionnent selon une logique « OU ». Si les deux sont configurés, ils s'appliquent tous les deux : un fichier correspondant à l'une ou l'autre condition de blocage est exclu. La configuration via tblProperties est recommandée.

      Méthode de configuration

      Type de chemin

      Paramètre

      Indicateur de session

      Chemin absolu

      odps.sql.unstructured.file.pattern.black.list

      tblproperties

      Chemin relatif

      odps.external.data.file.blacklist.regex

  • Remarques sur les expressions régulières

    • Les ancres de début ^ et de fin $ de ligne sont facultatives. Par exemple, pour cibler les fichiers .json, le motif .*\.json suffit.

    • Un seul motif regex est pris en charge. Pour exclure plusieurs types de fichiers, utilisez l'opérateur | :

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Mise à jour des paramètres de listes d'autorisation et de blocage

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Exemples

    • Données d'exemple

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Liste d'autorisation : lecture des fichiers JSON uniquement

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Liste de blocage : exclusion des fichiers txt, csv et parquet

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Combinaison liste d'autorisation et de blocage : lecture des fichiers txt, exclusion du répertoire level2

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Listage récursif : contrôle de la lecture des fichiers dans les sous-répertoires

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Mise à jour des listes d'autorisation et de blocage via ALTER TABLE

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Lire des données depuis OSS

Notes

  • Une fois la table externe OSS créée, vous pouvez lire les données stockées dans OSS via cette table. Pour connaître les types de fichiers pris en charge et la syntaxe de création, consultez la section Syntaxe.

  • Si une instruction SQL fait appel à des types de données complexes, ajoutez l'instruction set odps.sql.type.system.odps2=true; avant de soumettre la requête. Pour plus d'informations, voir Versions des types de données.

  • Pour les tables externes OSS qui mappent des données open source, définissez set odps.sql.hive.compatible=true; au niveau de la session avant de lire les données depuis OSS. À défaut, une erreur se produira.

  • OSS impose des limites de bande passante. Si le trafic de lecture ou d'écriture dépasse brièvement la limite de bande passante de l'instance, les performances de la table externe se dégradent. Consultez la section Limites et métriques de performance.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • select_statement : clause SELECT qui interroge les données à insérer dans la table cible depuis la table source.

  • from_statement : clause FROM qui spécifie la source de données, par exemple le nom de la table externe.

Données non partitionnées

Optimisation des requêtes

Collecte dynamique des statistiques

Collecte dynamique des statistiques

Les données externes ne disposent pas de statistiques préexistantes, ce qui contraint l'optimiseur de requêtes à adopter une stratégie conservatrice peu efficace. La collecte dynamique des statistiques permet à l'optimiseur de recueillir des informations sur la table durant l'exécution de la requête afin d'identifier les petites tables. Cette approche active les jointures hachage (Hash Join), optimise l'ordre des jointures, réduit les opérations de brassage (shuffles) et raccourcit les pipelines d'exécution.

Les paramètres suivants s'appliquent uniquement aux scénarios de tables Hive sur OSS (telles que Parquet, ORC, JSON et CSV). Ils ne concernent pas les scénarios de tables de lac de données, comme les tables externes Paimon, Hudi ou Delta Lake.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Test de performance

Jeu de données de test : Données TPC-DS
Échelle du test : 100 Go
Ressources de test : 100 CU
Remarques : Les scénarios métier variant, il est recommandé d'effectuer une évaluation supplémentaire basée sur vos charges de travail spécifiques. Activez l'indicateur de manière sélective selon vos instructions SQL métier.
  • Activer l'indicateur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Conclusion

    • Le temps d'exécution des jobs a diminué de 22,75 %, l'utilisation du CPU de 21,72 % et l'utilisation de la mémoire de 24 %.

    • La requête Q72 est la plus lente ; son temps d'exécution a été réduit de 17,61 %, l'utilisation du CPU de 20,82 % et celle de la mémoire de 20,86 %.

    • Pour TPCDS-Q72, l'absence de statistiques sur les petites tables entraîne une dégradation significative du plan d'exécution ; l'ajout de statistiques améliore les performances jusqu'à cinq fois. Les requêtes Q3, Q18, Q19, Q72 et Q99 montrent également des améliorations notables.

    • Dans l'ensemble, la majorité des requêtes en tirent un bénéfice considérable. Un petit nombre de requêtes ne voient aucune amélioration du temps de bout en bout, car leurs plans d'exécution restent inchangés et subissent uniquement la surcharge liée à la collecte des statistiques. La latence supplémentaire introduite lors de la phase d'optimisation varie de quelques dizaines à quelques centaines de millisecondes, avec un impact minimal sur le temps total d'exécution.

  • Toutes les requêtes

    Le temps d'exécution des jobs a diminué de 22,75 %, l'utilisation du CPU de 21,72 % et l'utilisation de la mémoire de 24 %.

    image

    imageimageimage

  • Q72

    Q72 est la requête la plus lente, avec une réduction du temps d'exécution de 17,61 %, du CPU de 20,82 % et de la mémoire de 20,86 %.

    image.pngimageimage

Optimisation du fractionnement des tables externes

Optimisation du fractionnement des tables externes

Ajustez la taille de fractionnement pour contrôler la quantité de données traitée par chaque tâche concurrente.

  • Si le volume de données est important et que la taille de fractionnement est trop petite, le nombre excessif de fractions entraîne une parallélisation élevée, contraignant l'instance à passer la majeure partie de son temps à attendre des ressources.

  • Si le volume de données est faible et que la taille de fractionnement est trop grande, le nombre insuffisant de fractions limite la concurrence et laisse des ressources inutilisées.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Contrôle du DOP

Contrôler le parallélisme avec le DOP

Vous pouvez définir le paramètre odps.sql.split.dop pour ajuster le degré de parallélisme lors de la lecture des données. Ce paramètre est prioritaire par rapport à odps.sql.mapper.split.size.

  • Si la valeur DOP est supérieure au nombre de fichiers dans le répertoire OSS, la concurrence réelle peut différer considérablement de la valeur DOP configurée.

  • Si la valeur DOP est trop faible, elle ne prendra pas effet. Utilisez le paramètre odps.input.file.num.limit pour modifier le nombre maximal de fichiers qu'une seule instance peut traiter.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Exemple d'utilisation

Problème et solution concernant la distorsion du DOP causée par un grand nombre de petits fichiers

MaxCompute limite le traitement à 240 fichiers maximum par instance. Si un répertoire de table externe OSS contient 3 449 fichiers, le degré de parallélisme minimal sera de 3 449 / 240 ≈ 15. Si vous définissez le DOP sur une valeur inférieure à 15, ce paramètre sera ignoré.

Pour résoudre ce problème, définissez odps.input.file.num.limit afin de modifier le nombre maximal de fichiers qu'une seule instance peut traiter.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Une seule instance peut traiter jusqu'à 5 000 fichiers OSS. Comme le nombre de fichiers dans la table lineitem est bien inférieur à cette limite, le degré de parallélisme réel correspond à la valeur DOP configurée.

Écrire des données dans OSS

MaxCompute permet d'écrire dans OSS les données provenant de tables internes ou de tables externes traitées. Pour connaître les limites, consultez la section Portée.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table externe dans laquelle écrire les données.

select_statement

Oui

Clause SELECT qui interroge les données à insérer dans la table cible depuis la table source. Si la table cible ne comporte qu'un seul niveau de partitions dynamiques, la valeur du dernier champ de la clause SELECT correspond à la valeur de partition dynamique de la table cible. La relation entre les valeurs issues de la clause SELECT de la table source et les valeurs de partition de sortie est déterminée par l'ordre des champs, et non par les noms de colonnes. Si l'ordre des champs de la table source diffère de celui de la table cible, spécifiez les champs dans le select_statement selon l'ordre de la table cible.

from_statement

Oui

Clause FROM qui indique la source des données, par exemple le nom de la table interne à lire.

Pour insérer des données dans des partitions dynamiques, consultez la rubrique Insertion ou remplacement de données dans des partitions dynamiques .

Remarques

  • Si l'opération INSERT OVERWRITE ... SELECT ... FROM ...; alloue 1 000 mappeurs sur la table source from_tablename, 1 000 fichiers TSV ou CSV sont générés.

  • Vous pouvez contrôler le nombre de fichiers générés à l'aide des configurations fournies par MaxCompute.

    • Si le programme de sortie (outputter) se trouve dans un mappeur : utilisez odps.stage.mapper.split.size pour contrôler le nombre de mappeurs concurrents, ce qui ajuste le nombre de fichiers générés.

    • Si le programme de sortie se trouve dans un réducteur ou un joiner : utilisez respectivement odps.stage.reducer.num et odps.stage.joiner.num pour ajuster le nombre de fichiers générés.

  • Risque d'incohérence des écritures : lorsque vous utilisez une instruction INSERT OVERWRITE sur une table externe OSS ou la commande UNLOAD pour exporter des fichiers vers OSS, les données présentes dans le sous-répertoire de l'emplacement OSS spécifié ou dans l'emplacement correspondant à la partition sont supprimées avant l'écriture des nouvelles données. Si le répertoire d'emplacement contient des données importantes écrites directement dans OSS par d'autres moteurs externes, ces données sont également supprimées avant l'écriture des nouvelles données. Par conséquent, vous devez vous assurer que les fichiers existants dans le répertoire d'emplacement de la table externe sont sauvegardés ou que le répertoire UNLOAD est vide. Pour connaître les autres risques liés aux incohérences d'écriture, consultez la section Portée.

Écriture de données dans OSS à l'aide de la fonctionnalité de téléchargement multipartie d'OSS

Pour écrire des données dans OSS au format open source, créez une table externe avec un analyseur de données open source et activez la fonctionnalité de téléchargement multipartie d'OSS.

Pour activer la fonctionnalité de téléchargement multipartie d'OSS, effectuez les réglages suivants :

Scénario

Commande

Définir au niveau du projet

S'applique à l'ensemble du projet.

setproject odps.sql.unstructured.oss.commit.mode =true;

Définir au niveau de la session

S'applique uniquement à la tâche en cours.

set odps.sql.unstructured.oss.commit.mode =true;

La valeur par défaut de odps.sql.unstructured.oss.commit.mode est false. Les deux modes fonctionnent comme suit :

Valeur

Principe

false

Les données sont stockées dans un dossier .odps situé sous le répertoire LOCATION, accompagnées d'un fichier .meta garantissant la cohérence des données. Le contenu .odps ne peut être traité correctement que par MaxCompute. D'autres moteurs peuvent échouer lors de l'analyse.

true

MaxCompute utilise la fonctionnalité de téléchargement multipartie pour assurer la compatibilité avec d'autres moteurs de traitement des données. Il emploie une méthode de two-phase commit (validation en deux phases) pour garantir la cohérence des données ; aucun répertoire .odps ni fichier .meta n'est créé.

Gérer les fichiers exportés

Paramètres

Ajoutez un préfixe, un suffixe ou une extension aux fichiers de données de sortie à l'aide des paramètres suivants.

property_name

Scénario

Description

property_value

Valeur par défaut

odps.external.data.output.prefix

(Compatible avec odps.external.data.prefix)

Ajoutez cette propriété lorsque vous devez ajouter un préfixe personnalisé aux fichiers de sortie.

  • Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

  • La longueur est comprise entre 1 et 10 caractères.

Une combinaison de caractères autorisés, telle que « mc_ »

Aucune

odps.external.data.enable.extension

Ajoutez cette propriété lorsque vous devez afficher l'extension des fichiers de sortie.

True indique que l'extension du fichier de sortie est affichée. False indique qu'elle ne l'est pas.

  • True

  • False

False

odps.external.data.output.suffix

Ajoutez cette propriété lorsque vous devez ajouter un suffixe personnalisé aux fichiers de sortie.

Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

Une combinaison de caractères autorisés, telle que « _hangzhou »

Aucune

odps.external.data.output.explicit.extension

Ajoutez cette propriété lorsque vous devez ajouter une extension personnalisée aux fichiers de sortie.

  • Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

  • La longueur est comprise entre 1 et 10 caractères.

  • Possède une priorité plus élevée que le paramètre odps.external.data.enable.extension.

Une combinaison de caractères autorisés, telle que « jsonl »

Aucune

Exemples

  1. Définissez le préfixe personnalisé pour les fichiers écrits dans OSS sur test06_. La DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Après l'écriture des données, les fichiers générés dans OSS sont nommés avec le préfixe personnalisé test06_, par exemple test06_202509101.

  2. Pour personnaliser le suffixe des fichiers écrits dans OSS en tant que _beijing, la DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Pour générer automatiquement une extension de fichier pour les fichiers de sortie, utilisez la DDL suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  4. Pour personnaliser l'extension de fichier en jsonl pour les fichiers écrits dans OSS, la DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le nom de fichier généré est 20250905072538695g3mlopvxicr4_M1_1_0_0-0_TableSink1.jsonl, avec l'extension de fichier personnalisée .jsonl.

  5. Pour les fichiers écrits dans OSS, définissez le préfixe sur mc_, le suffixe sur _beijing et l'extension de fichier sur jsonl. La DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le nom de fichier généré est mc_20250905073013526gra1l214x6t6_M1_1_0_0-0_TableSink1_beijing.jsonl, où 20250905073013526 est l'horodatage généré par le système et la partie centrale correspond à l'identifiant de tâche.

Écrire des fichiers volumineux à l'aide de partitions dynamiques

Cas d'utilisation métier

Exportez les résultats de calcul d'une table source vers OSS sous forme de partitions, en les écrivant dans des fichiers volumineux (par exemple, 4 Go). Configurez le paramètre odps.adaptive.shuffle.desired.partition.size (en Mo) avec des partitions dynamiques.

  • Avantage : vous pouvez contrôler la taille souhaitée du fichier de sortie en configurant la valeur du paramètre.

  • Inconvénient : le temps d'exécution global est plus long, car l'écriture de fichiers volumineux réduit le degré de parallélisme, ce qui augmente le temps d'exécution.

Descriptions des métriques

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Exemple

Écrivez un fichier JSON d'environ 4 Go dans OSS.

  1. Préparez les données de test. Utilisez la table de jeu de données public bigdata_public_dataset.tpcds_1t.web_sales, qui pèse environ 30 Go. Les données sont stockées dans un format compressé sur MaxCompute, donc la taille augmente après l'exportation.

  2. Créez une table externe JSON.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Sans définir aucun paramètre, écrivez la table de test dans la table externe JSON au format de partition dynamique.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Deux fichiers sont stockés sur OSS, avec des tailles respectives de 2 112 Go et 2 102 Go.

  4. Ajoutez le paramètre odps.adaptive.shuffle.desired.partition.size pour la sortie de fichiers volumineux et écrivez la table de test dans la table externe JSON au format de partition dynamique.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le fichier de données unique généré a une taille d'environ 4 214 Go.

Opérations de partition sur les tables externes OSS

Les tables externes OSS prennent en charge les opérations de partition. Opérations de partition sur les tables externes OSS et Opérations de partition sur les tables internes. Le tableau suivant répertorie les opérations prises en charge.

Opération

Prise en charge

Ajouter une partition

Yes

Modifier l'heure de mise à jour de la partition

Yes

Modifier la valeur de la partition

No

Fusionner les partitions

No

Lister les partitions

Yes

Afficher les informations de partition

Yes

Supprimer une partition

Yes

Vider une partition

No

Importer depuis ou exporter vers OSS

  • Commande LOAD : importe des données depuis un stockage externe, tel qu'OSS, dans une table ou une partition MaxCompute.

  • Commande UNLOAD : exporte des données d'un projet MaxCompute vers un stockage externe, tel qu'OSS, pour une utilisation par d'autres moteurs de calcul.

Annexe : Préparer les exemples de données

  1. Préparer les répertoires OSS

    Les informations fournies sur les exemples de données sont les suivantes :

    • oss_endpoint : oss-cn-hangzhou-internal.aliyuncs.com, qui correspond à la région Chine (Hangzhou).

    • Nom du bucket : oss-mc-test.

    • Noms des répertoires : Demo1/, Demo2/, Demo3/ et SampleData/.

  2. Données de table non partitionnée

    Le fichier téléchargé dans le répertoire Demo1/ est vehicle.csv, qui contient les données suivantes. Le répertoire Demo1/ est utilisé pour mapper une table non partitionnée créée avec l'analyseur de données texte intégré.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Données de table partitionnée

    Le répertoire Demo2/ contient cinq sous-répertoires : direction=N/, direction=NE/, direction=S/, direction=SW/ et direction=W/. Les fichiers téléchargés sont respectivement vehicle1.csv, vehicle2.csv, vehicle3.csv, vehicle4.csv et vehicle5.csv. Ces fichiers contiennent les données suivantes. Le répertoire Demo2/ est utilisé pour mapper une table partitionnée créée avec l'analyseur de données texte intégré.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  4. Données compressées

    Le fichier téléchargé dans le répertoire Demo3/ est vehicle.csv.gz. Le fichier contenu dans le package compressé est vehicle.csv, qui a le même contenu que le fichier du répertoire Demo1/. Il est utilisé pour mapper une table externe OSS avec des propriétés de compression.

  5. Données d'analyseur personnalisé

    Le fichier téléchargé dans le répertoire SampleData/ est vehicle6.csv, qui contient les données suivantes. Le répertoire SampleData/ est utilisé pour mapper une table externe OSS créée avec un analyseur de données open source.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

FAQ sur les tables externes OSS

Comment résoudre l'erreur « Inline data exceeds the maximum allowed size » lors du traitement des données OSS à l'aide d'une table externe ?

  • Problème

    Lors du traitement des données OSS, l'erreur Inline data exceeds the maximum allowed size est signalée.

  • Cause

    OSS Store impose une limite de taille pour chaque petit fichier. Une erreur se produit si un fichier dépasse 3 Go.

  • Solution

    Ajustez les deux propriétés suivantes pour contrôler la taille des données écrites par chaque réducteur dans la table externe, afin de maintenir les fichiers sous la limite de 3 Go.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Comment résoudre une erreur de dépassement de mémoire survenant après le chargement d'une UDF pour accéder à une table externe OSS sur MaxCompute, alors que la UDF a réussi les tests locaux ?

  • Problème

    Lors de l'accès à une table externe OSS sur MaxCompute, une UDF ayant réussi les tests locaux renvoie l'erreur suivante après son chargement.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

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

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Cause

    La table externe contient trop de fichiers objets, ce qui entraîne une consommation excessive de mémoire, et aucune partition n'est configurée.

  • Solution

    • Utilisez un volume de données plus réduit pour la requête.

    • Partitionnez les fichiers objets afin de réduire l'utilisation de la mémoire.

Comment fusionner plusieurs petits fichiers en un seul fichier à l'aide d'une table externe OSS ?

Consultez le journal Logview pour vérifier si la dernière étape du plan d'exécution SQL est un réducteur ou un joiner.

  • S'il s'agit d'un réducteur, 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;

Comment résoudre l'erreur « Couldn't connect to server » lors de la lecture depuis une table externe OSS ?

  • Problème

    Lors de la lecture des données depuis une table externe OSS, l'erreur 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 est signalée.

  • Cause

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

    • Cause 2 : Lors de la création de la table externe OSS, l'endpoint d'une autre région a été utilisé pour le paramètre oss_endpoint dans l'adresse oss_location.

  • Solution

    • Pour la cause 1

      Vérifiez que le paramètre oss_endpoint dans oss_location correspond à un endpoint interne. S'il s'agit d'un endpoint public, remplacez-le par un endpoint interne. Consultez la section Paramètres.

      Par exemple, si un utilisateur de la région Indonésie (Jakarta) a utilisé l'adresse oss://oss-ap-southeast-5.aliyuncs.com/<bucket>/.... pour créer une table externe, il doit la remplacer par l'adresse interne correspondante oss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/.....

    • Pour la cause 2

      Vérifiez que le paramètre oss_endpoint dans oss_location correspond à la région que vous souhaitez atteindre. Les noms de domaine du réseau classique OSS sont répertoriés dans la section Régions et endpoints.

Comment résoudre l'erreur « Network is unreachable (connect failed) » lors de la création d'une table externe OSS ?

  • Problème

    Lors de la création d'une table externe OSS, l'erreur 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) est signalée.

  • Cause

    Lors de la création de la table externe OSS, un endpoint public a été utilisé pour le paramètre oss_endpoint dans l'adresse oss_location, au lieu d'un endpoint interne.

  • Solution

    Vérifiez que le paramètre oss_endpoint dans oss_location correspond à un endpoint interne. S'il s'agit d'un endpoint public, remplacez-le par un endpoint interne. Consultez la section Paramètres.

    Par exemple, si un utilisateur de la région Chine (Pékin) a utilisé l'adresse oss://oss-cn-beijing.aliyuncs.com/<bucket>/.... pour créer une table externe, il doit la remplacer par l'adresse interne correspondante oss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....

Comment résoudre la lenteur d'exécution des tâches SQL sur une table externe OSS ?

  • Lenteur de lecture des fichiers compressés GZ dans une table externe OSS

    • Symptômes

      Un utilisateur a créé une table externe OSS dont la source de données est un fichier compressé GZ de 200 Go stocké dans OSS. Le processus de lecture des données est lent.

    • Cause

      La vitesse de traitement SQL est faible car trop peu de mappeurs exécutent le calcul lors de l'étape map.

    • Solution

      • Pour les données structurées, vous pouvez définir le paramètre suivant afin d'ajuster la quantité de données lues par un seul mappeur et accélérer l'exécution SQL.

        ODPS-0010000:System internal error - 
        ActionHandler job failed with failinfo	storage service worker error occured: 
        common/io/oss/oss_file_system_cppsdk.cpp(919): 
        OSSRequestException: Status: -50, RequestId: , 
        ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
      • Pour les données non structurées, vérifiez s'il n'y a qu'un seul fichier OSS dans le chemin de la table externe OSS. Si c'est le cas, un seul mappeur peut être généré, car les données non structurées au format compressé ne peuvent pas être fractionnées. Cela entraîne une lenteur du traitement. Nous vous recommandons de diviser le grand fichier OSS en fichiers plus petits dans le chemin correspondant de la table externe sur OSS. Cette opération augmente le nombre de mappeurs générés lors de la lecture de la table externe et améliore la vitesse de lecture.

  • Lenteur de recherche des données de table externe MaxCompute à l'aide d'un SDK

    • Symptômes

      La recherche des données de table externe MaxCompute à l'aide d'un SDK est lente.

    • Solution

      Les tables externes ne prennent en charge que les analyses complètes de table, ce qui est lent. Utilisez plutôt une table interne MaxCompute.

Comment résoudre le problème de suppression des anciennes données sans écriture des nouvelles lors de l'utilisation de la fonctionnalité de téléchargement multipartie OSS ?

  • Problème

    Dans un scénario insert overwrite, si la tâche échoue dans des cas extrêmes, le résultat peut ne pas correspondre aux attentes. Les anciennes données sont supprimées, mais les nouvelles données ne sont pas écrites.

  • Cause

    L'écriture des nouvelles données dans la table cible échoue en raison d'une panne matérielle ou d'un échec de mise à jour des métadonnées très improbable. L'opération de suppression dans OSS ne supporte pas le rollback, il est donc impossible de récupérer les anciennes données supprimées.

  • Solution

    • Si vous écrasez une table externe OSS en vous basant sur ses anciennes données, par exemple insert overwrite table T select * from table T;, sauvegardez préalablement les données OSS. En cas d'échec de la tâche, vous pourrez ainsi écraser la table externe OSS à partir des anciennes données sauvegardées.

    • Si la tâche insert overwrite peut être resoumise, il suffit de la resoumettre en cas d'échec.

Solution pour l'erreur « table not found » lors de l'accès à une table externe OSS depuis Spark

  • Problème

    Lors de l'utilisation de Spark pour accéder à une table externe OSS, la tâche échoue avec une erreur « table not found ».

  • Solution

    • Ajoutez les paramètres suivants :

      • Activez la configuration des tables externes : spark.sql.catalog.odps.enableExternalTable=true ;

      • Configurez la région où se trouve OSS : spark.hadoop.odps.oss.region.default=cn-<region>

    • Si l'erreur persiste après l'ajout des paramètres ci-dessus :

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

      Recréez la table externe OSS, puis accédez-y à nouveau.

Erreur lors de la lecture ou de l'écriture dans des tables externes OSS : Failed to connect Http service: http://.oss-cn-shanghai-internal.aliyuncs.com.

  • Détails de l'erreur

    Détails de l'erreur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Causes et solutions

    1. Cause 1 : Vérifiez si la tâche de table externe utilise une UDF pour accéder à un endpoint interne OSS. Si c'est le cas, établissez la connectivité réseau en utilisant l'une des options suivantes. Sinon, les tâches peuvent échouer de manière intermittente.

      1. Option 1 (recommandée) : Utiliser une connexion réseau pour accéder aux ressources VPC.

      2. Option 2 : Ajouter les endpoints internes OSS à la liste d'autorisation.

    2. Cause 2 : Vérifiez si la table externe OSS appartient à l'un des types suivants. Si c'est le cas, établissez la connectivité réseau en utilisant une option indiquée pour la cause 1.

      Tables externes Lance, tables externes Hudi, tables externes Delta Lake ou tables externes utilisant un analyseur personnalisé.

    3. Cause 3 : Sur la page Json Summary dans Logview, vérifiez si le paramètre odps.isolation.session.enable est défini sur true. Si c'est le cas, établissez la connectivité réseau en utilisant une option indiquée pour la cause 1.

ODPS-0010000:System internal error

  • Détails de l'erreur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Cause

    Un endpoint OSS public a été utilisé lors de la création de la table externe OSS.

  • Solution

    Lors de la création d'une table externe OSS, le paramètre location doit contenir un oss_endpoint interne. Pour obtenir l'endpoint, consultez la section Paramètres. Si l'erreur persiste après le passage à un endpoint interne, soumettez un ticket à l'équipe de support technique MaxCompute pour obtenir de l'aide.

Références

Paramètres

Les paramètres suivants sont communs à tous les formats de tables externes. Pour les paramètres spécifiques à un format, consultez la documentation correspondante.

  • Paramètres de syntaxe de base

    Paramètre

    Obligatoire

    Description

    mc_oss_extable_name

    Oui

    Nom de la table externe OSS à créer.

    Les noms de table ne sont pas sensibles à la casse et ne peuvent pas être convertis de force vers une casse spécifique.

    col_name

    Oui

    Nom d'une colonne dans la table externe OSS.

    Le schéma de la table externe doit correspondre au schéma du fichier de données OSS. Sinon, les données ne peuvent pas être lues.

    data_type

    Oui

    Type de données d'une colonne dans la table externe OSS.

    Le type de données de chaque colonne doit correspondre à la colonne correspondante dans le fichier de données OSS. Sinon, les données ne peuvent pas être lues.

    table_comment

    Non

    Commentaire associé à la table. Il doit s'agir d'une chaîne valide ne dépassant pas 1 024 octets, sous peine de générer une erreur.

    partitioned by (col_name data_type, ...)

    Non

    Si les fichiers de données dans OSS sont stockés dans un chemin partitionné, incluez ce paramètre pour créer une table partitionnée.

    • col_name : nom de la colonne de clé de partition.

    • data_type : type de données de la colonne de clé de partition.

    '<(tb)property_name>'='<(tb)property_value>'

    Oui

    Propriétés étendues de la table externe. Consultez la documentation spécifique au format pour plus de détails.

    oss_location

    Oui

    Chemin OSS où se trouvent les fichiers de données. Par défaut, tous les fichiers de données de ce chemin sont lus.

    Le format est oss://<oss_endpoint>/<Bucket name>/<OSS directory name>/.

    • oss_endpoint :

      • Nom de domaine OSS. Vous devez utiliser le point de terminaison du réseau classique fourni par OSS, qui contient -internal.

        Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/xxx.

        Les noms de domaine du réseau classique OSS sont répertoriés dans Régions et points de terminaison.

        Assurez-vous que la région OSS où sont stockés les fichiers de données est identique à la région de votre projet MaxCompute. Si elles diffèrent, des problèmes de connectivité réseau peuvent survenir.
      • Si vous ne spécifiez pas de point de terminaison, le système utilise celui de la région où se trouve le projet actuel.

        Cette méthode n'est pas recommandée, car le stockage de fichiers inter-régions peut entraîner des problèmes de connectivité réseau.
    • Bucket name : nom du bucket OSS. Le nom du bucket doit suivre le oss_endpoint.

      Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/your_bucket/path/.

      Consultez les noms des buckets dans Lister les buckets.

    • Directory name : nom du répertoire OSS. Ne spécifiez pas de nom de fichier après le répertoire.

      Exemple : oss://oss-cn-beijing-internal.aliyuncs.com/oss-mc-test/Demo1/.

      Exemples incorrects :

       -- HTTP connections are not supported.
          http://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/
          -- HTTPS connections are not supported.               
          https://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/
          -- Incorrect connection address.            
          oss://oss-cn-shanghai-internal.aliyuncs.com/Demo1
          -- Do not specify a file name.                            
          oss://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/vehicle.csv
  • Attributs WITH serdeproperties

    property_name

    Scénario

    property_value

    Valeur par défaut

    odps.properties.rolearn

    Ajoutez cette propriété lors de l'utilisation de l'autorisation STS.

    Spécifiez l'ARN du rôle RAM disposant des autorisations nécessaires pour accéder à OSS.

    Obtenez l'ARN à partir des détails du rôle dans la console RAM. Exemple : acs:ram::xxxxxx:role/<role_name>.

    • Si les propriétaires de MaxCompute et d'OSS sont le même compte :

      • Si vous ne spécifiez pas odps.properties.rolearn dans l'instruction de création de table, l'ARN du rôle aliyunodpsdefaultrole est utilisé par défaut. Vous devez d'abord créer le rôle RAM en utilisant Autorisation STS. Le rôle AliyunODPSDefaultRole dispose d'autorisations étendues. Nous vous recommandons d'accorder les autorisations via un rôle personnalisé.

      • Pour utiliser l'ARN d'un rôle personnalisé, créez d'abord le rôle personnalisé. Autorisation STS pour OSS (autorisation personnalisée).

    • Si les propriétaires de MaxCompute et d'OSS sont des comptes différents, vous devez spécifier l'ARN d'un rôle personnalisé. Pour plus d'informations, consultez Autorisation STS pour OSS (autorisation personnalisée).

Listes d'autorisation et de blocage

Les tables externes MaxCompute OSS prennent en charge le filtrage via des listes d'autorisation (whitelist) et de blocage (blacklist). En définissant les paramètres appropriés dans tblproperties, vous pouvez filtrer les fichiers à lire depuis un répertoire.

  • Paramètres tblproperties

    Détails des paramètres tblproperties

    property_name

    Cas d'utilisation

    Remarque

    property_value

    Valeur par défaut

    odps.external.data.file.whitelist.regex

    Filtrage personnalisé via liste d'autorisation

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.json'

    Aucune

    odps.external.data.file.blacklist.regex

    Filtrage personnalisé via liste de blocage

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.txt'

    Aucune

    odps.external.data.file.recursive.listing.enabled

    Contrôle de la recherche récursive de fichiers

    • True

    • False

    True

    odps.sql.unstructured.file.pattern.black.list( indicateur de session existant)

    Filtrage via liste de blocage au niveau de la session

    Motif regex

    Motif regex pour la correspondance des fichiers, par exemple '.*\\.json'

    Aucune

  • Règles d'application

    • La liste de blocage est prioritaire sur la liste d'autorisation : si un fichier correspond à une condition de la liste de blocage, il est exclu.

    • L'indicateur de session et le paramètre de liste de blocage tblproperties fonctionnent selon une logique « OU ». Si les deux sont configurés, ils s'appliquent tous les deux : un fichier correspondant à l'une ou l'autre des conditions de blocage est exclu. La configuration via tblProperties est recommandée.

      Méthode de configuration

      Type de chemin

      Paramètre

      Indicateur de session

      Chemin absolu

      odps.sql.unstructured.file.pattern.black.list

      tblproperties

      Chemin relatif

      odps.external.data.file.blacklist.regex

  • Remarques sur les expressions régulières (regex)

    • Les ancres de début de ligne ^ et de fin de ligne $ sont facultatives. Par exemple, pour cibler les fichiers .json, le motif .*\.json suffit.

    • Un seul motif regex est pris en charge. Pour exclure plusieurs types de fichiers, utilisez l'opérateur | :

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Mise à jour des paramètres de listes d'autorisation et de blocage

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Exemples

    • Données d'exemple

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Liste d'autorisation : lecture exclusive des fichiers JSON

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Liste de blocage : exclusion des fichiers txt, csv et parquet

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Combinaison liste d'autorisation et de blocage : lecture des fichiers txt, exclusion du répertoire level2

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Listage récursif : contrôle de la lecture des fichiers dans les sous-répertoires

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
    • Mise à jour des listes d'autorisation et de blocage via ALTER TABLE

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Lecture des données depuis OSS

Notes

  • Une fois la table externe OSS créée, vous pouvez lire les données stockées dans OSS via cette table. Pour connaître les types de fichiers de données pris en charge ainsi que la syntaxe de création, consultez la section Syntaxe.

  • Si une instruction SQL fait appel à des types de données complexes, ajoutez le préfixe set odps.sql.type.system.odps2=true; et soumettez l'ensemble simultanément. Consultez la rubrique Versions des types de données.

  • Pour les tables externes OSS qui mappent des données open source, définissez set odps.sql.hive.compatible=true; au niveau de la session avant de lire les données depuis OSS. À défaut, une erreur sera générée.

  • OSS impose des limites de bande passante. Si le trafic de lecture ou d'écriture dépasse brièvement la limite de bande passante de l'instance, les performances de la table externe se dégradent. Reportez-vous à la section Limites et métriques de performance.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • select_statement : clause SELECT qui interroge les données à insérer dans la table cible depuis la table source.

  • from_statement : clause FROM qui spécifie la source de données, par exemple le nom de la table externe.

Données non partitionnées

Données non partitionnées

Après avoir créé une table externe OSS non partitionnée, vous pouvez lire les données depuis OSS en utilisant l'une des méthodes suivantes :

  • Méthode 1 (recommandée) : importez les données au format open source depuis OSS vers une table interne MaxCompute, puis lisez-les.

    Cette approche est idéale pour les calculs répétés ou les scénarios nécessitant des performances élevées. Créez une table interne ayant le même schéma que la table externe, importez les données, puis exécutez des requêtes complexes. Le stockage interne bénéficie des optimisations de MaxCompute. Exemple de commande :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Méthode 2 : lisez les données directement depuis OSS, comme pour les opérations sur les tables internes MaxCompute.

    Cette méthode convient aux scénarios où les exigences de performance sont moins critiques. Chaque requête lit les données directement depuis OSS plutôt que depuis le stockage interne.

Optimisation des requêtes

Collecte dynamique des statistiques

Collecte dynamique des statistiques

Les données externes ne disposent pas de statistiques préexistantes, ce qui contraint l'optimiseur de requêtes à adopter une stratégie conservatrice peu efficace. La collecte dynamique des statistiques permet à l'optimiseur de recueillir les statistiques de la table durant l'exécution de la requête afin d'identifier les petites tables. Cela active le Hash Join, optimise l'ordre des jointures, réduit les opérations de shuffle et raccourcit les pipelines d'exécution.

Les paramètres suivants s'appliquent uniquement aux scénarios de tables Hive sur OSS (telles que Parquet, ORC, JSON et CSV) et ne concernent pas les scénarios de tables de lac de données, comme les tables externes Paimon, Hudi ou Delta Lake.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Test de performance

Jeu de données de test : Données TPC-DS
Échelle du test : 100 Go
Ressources de test : 100 CU
Notes : Les scénarios métier variant considérablement, il est recommandé d'effectuer une évaluation supplémentaire basée sur vos charges de travail spécifiques. Activez l'indicateur de manière sélective selon votre SQL métier.
  • Activation de l'indicateur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Conclusion

    • Le temps d'exécution du job a diminué de 22,75 %, l'utilisation du CPU a baissé de 21,72 % et l'utilisation de la mémoire a réduit de 24 %.

    • Q72 est la requête la plus lente ; le temps d'exécution du job a été réduit de 17,61 %, le CPU de 20,82 % et la mémoire de 20,86 %.

    • Pour TPCDS-Q72, l'absence de statistiques sur les petites tables entraîne une dégradation significative du plan d'exécution ; l'ajout de statistiques améliore les performances jusqu'à 5 fois. Les requêtes Q3, Q18, Q19, Q72 et Q99 montrent également des améliorations notables.

    • Dans l'ensemble, la majorité des requêtes en tirent un bénéfice considérable. Un petit nombre de requêtes ne voient aucune amélioration du temps de bout en bout car leurs plans d'exécution restent inchangés, subissant uniquement la surcharge liée à la collecte des statistiques. La latence supplémentaire introduite lors de la phase d'optimisation varie de quelques dizaines à quelques centaines de millisecondes, avec un impact minimal sur le temps total d'exécution.

  • Toutes les requêtes

    Le temps d'exécution du job a diminué de 22,75 %, l'utilisation du CPU a baissé de 21,72 % et l'utilisation de la mémoire a réduit de 24 %.

    image

    imageimageimage

  • Q72

    Q72 est la requête la plus lente, avec une réduction du temps d'exécution du job de 17,61 %, du CPU de 20,82 % et de la mémoire de 20,86 %.

    image.pngimageimage

Optimisation du découpage des tables externes

Optimisation du découpage des tables externes

Ajustez la taille des découpes (splits) pour contrôler la quantité de données traitée par chaque tâche concurrente.

  • Si le volume de données est important et que la taille des découpes est trop faible, le nombre excessif de découpes entraîne un parallélisme élevé, l'instance passant la majeure partie de son temps à attendre des ressources.

  • Si le volume de données est faible et que la taille des découpes est trop grande, le nombre insuffisant de découpes provoque un manque de concurrence et laisse des ressources inactives.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Contrôle du DOP

Contrôle du parallélisme avec le DOP

Vous pouvez définir le paramètre odps.sql.split.dop pour ajuster le degré de parallélisme lors de la lecture des données. Ce paramètre possède une priorité supérieure à celle de odps.sql.mapper.split.size.

  • Si la valeur DOP est supérieure au nombre de fichiers dans le répertoire OSS, la concurrence réelle peut différer considérablement de la valeur DOP configurée.

  • Si la valeur DOP est trop faible, elle ne prendra pas effet. Utilisez le paramètre odps.input.file.num.limit pour modifier le nombre maximal de fichiers qu'une seule instance peut traiter.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Exemple d'utilisation

Problème et solution concernant la distorsion du DOP causée par un trop grand nombre de petits fichiers

MaxCompute limite le traitement à un maximum de 240 fichiers par instance. Si un répertoire de table externe OSS contient 3 449 fichiers, le degré de parallélisme minimal sera de 3 449 / 240 ≈ 15. Si vous définissez le DOP sur une valeur inférieure à 15, ce paramètre sera ignoré.

Pour résoudre ce problème, définissez odps.input.file.num.limit afin de modifier le nombre maximal de fichiers qu'une seule instance peut traiter.

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Une seule instance peut traiter jusqu'à 5 000 fichiers OSS. Comme le nombre de fichiers dans la table lineitem est bien inférieur à cette limite, le degré de parallélisme réel correspond à la valeur DOP configurée.

Écriture des données dans OSS

MaxCompute permet d'écrire dans OSS les données provenant de tables internes ou de tables externes traitées. Pour connaître les limites, consultez la section Portée.

Syntaxe

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table externe dans laquelle écrire les données.

select_statement

Oui

Clause SELECT qui interroge les données à insérer dans la table cible depuis la table source. Si la table cible ne comporte qu'un seul niveau de partitions dynamiques, la valeur du dernier champ de la clause SELECT correspond à la valeur de la partition dynamique de la table cible. La relation entre les valeurs issues de la clause SELECT de la table source et les valeurs de partition de sortie est déterminée par l'ordre des champs, et non par les noms de colonnes. Si l'ordre des champs de la table source diffère de celui de la table cible, spécifiez les champs dans le select_statement en respectant l'ordre de la table cible.

from_statement

Oui

Clause FROM qui indique la source des données, par exemple le nom de la table interne à lire.

Pour insérer des données dans des partitions dynamiques, consultez la rubrique Insertion ou remplacement de données dans des partitions dynamiques .

Remarques

  • Si l'opération INSERT OVERWRITE ... SELECT ... FROM ...; alloue 1 000 mappeurs sur la table source from_tablename, 1 000 fichiers TSV ou CSV sont générés.

  • Vous pouvez contrôler le nombre de fichiers générés à l'aide des configurations fournies par MaxCompute.

    • Si le programme de sortie (outputter) se trouve dans un mappeur : utilisez odps.stage.mapper.split.size pour contrôler le nombre de mappeurs simultanés, ce qui ajuste le nombre de fichiers générés.

    • Si le programme de sortie se trouve dans un réducteur ou un joiner : utilisez respectivement odps.stage.reducer.num et odps.stage.joiner.num pour ajuster le nombre de fichiers générés.

  • Risque d'incohérence des écritures : lorsque vous utilisez une instruction INSERT OVERWRITE sur une table externe OSS ou la commande UNLOAD pour exporter des fichiers vers OSS, les données présentes dans le sous-répertoire de l'emplacement OSS spécifié ou correspondant à la partition sont supprimées avant l'écriture des nouvelles données. Si le répertoire de l'emplacement contient des données importantes écrites directement dans OSS par d'autres moteurs externes, ces données sont également supprimées avant l'écriture des nouvelles données. Par conséquent, vous devez vous assurer que les fichiers existants dans le répertoire de l'emplacement de la table externe sont sauvegardés ou que le répertoire UNLOAD est vide. Pour connaître les autres risques liés aux incohérences d'écriture, consultez la section Portée.

Écriture de données dans OSS à l'aide de la fonctionnalité de téléchargement multipartie d'OSS

Pour écrire des données dans OSS au format open source, créez une table externe avec un analyseur de données open source et activez la fonctionnalité de téléchargement multipartie d'OSS.

Pour activer la fonctionnalité de téléchargement multipartie d'OSS, effectuez les réglages suivants :

Scénario

Commande

Définir au niveau du projet

S'applique à l'ensemble du projet.

setproject odps.sql.unstructured.oss.commit.mode =true;

Définir au niveau de la session

S'applique uniquement à la tâche en cours.

set odps.sql.unstructured.oss.commit.mode =true;

La valeur par défaut de odps.sql.unstructured.oss.commit.mode est false. Les deux modes fonctionnent comme suit :

Valeur

Principe

false

Les données sont stockées dans un dossier .odps situé sous le répertoire LOCATION, accompagnées d'un fichier .meta garantissant la cohérence des données. Le contenu du dossier .odps ne peut être traité correctement que par MaxCompute. D'autres moteurs peuvent échouer lors de l'analyse.

true

MaxCompute utilise la fonctionnalité de téléchargement multipartie pour assurer la compatibilité avec d'autres moteurs de traitement des données. Il emploie une méthode de two-phase commit (validation en deux phases) pour garantir la cohérence des données ; aucun répertoire .odps ni fichier .meta n'est créé.

Gestion des fichiers exportés

Paramètres

Ajoutez un préfixe, un suffixe ou une extension aux fichiers de données de sortie à l'aide des paramètres suivants.

property_name

Scénario

Description

property_value

Valeur par défaut

odps.external.data.output.prefix

(Compatible avec odps.external.data.prefix)

Ajoutez cette propriété lorsque vous devez ajouter un préfixe personnalisé aux fichiers de sortie.

  • Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

  • La longueur est comprise entre 1 et 10 caractères.

Une combinaison de caractères autorisés, par exemple « mc_ »

Aucune

odps.external.data.enable.extension

Ajoutez cette propriété lorsque vous devez afficher l'extension des fichiers de sortie.

True indique que l'extension du fichier de sortie est affichée. False indique qu'elle ne l'est pas.

  • True

  • False

False

odps.external.data.output.suffix

Ajoutez cette propriété lorsque vous devez ajouter un suffixe personnalisé aux fichiers de sortie.

Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

Une combinaison de caractères autorisés, par exemple « _hangzhou »

Aucune

odps.external.data.output.explicit.extension

Ajoutez cette propriété lorsque vous devez ajouter une extension personnalisée aux fichiers de sortie.

  • Contient uniquement des chiffres, des lettres et des traits de soulignement (a-z, A-Z, 0-9, _).

  • La longueur est comprise entre 1 et 10 caractères.

  • Possède une priorité plus élevée que le paramètre odps.external.data.enable.extension.

Une combinaison de caractères autorisés, par exemple « jsonl »

Aucune

Exemples

  1. Définissez le préfixe personnalisé pour les fichiers écrits dans OSS sur test06_. La DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Après l'écriture des données, les fichiers générés dans OSS portent le préfixe personnalisé test06_, par exemple test06_202509101.

  2. Pour personnaliser le suffixe des fichiers écrits dans OSS en _beijing, la DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Pour générer automatiquement une extension de fichier pour les fichiers de sortie, utilisez la DDL suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  4. Pour personnaliser l'extension de fichier en jsonl pour les fichiers écrits dans OSS, la DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le nom de fichier généré est 20250905072538695g3mlopvxicr4_M1_1_0_0-0_TableSink1.jsonl, avec l'extension de fichier personnalisée .jsonl.

  5. Pour les fichiers écrits dans OSS, définissez le préfixe sur mc_, le suffixe sur _beijing et l'extension de fichier sur jsonl. La DDL est la suivante :

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le nom de fichier généré est mc_20250905073013526gra1l214x6t6_M1_1_0_0-0_TableSink1_beijing.jsonl, où 20250905073013526 est l'horodatage généré par le système et la partie centrale correspond à l'identifiant de la tâche.

Écriture de fichiers volumineux à l'aide de partitions dynamiques

Scénario métier

Exportez les résultats de calcul d'une table source vers OSS sous forme de partitions, en les écrivant dans des fichiers volumineux (par exemple, 4 Go). Configurez le paramètre odps.adaptive.shuffle.desired.partition.size (en Mo) avec des partitions dynamiques.

  • Avantage : vous pouvez contrôler la taille souhaitée des fichiers de sortie en configurant la valeur du paramètre.

  • Inconvénient : le temps d'exécution global est plus long, car l'écriture de fichiers volumineux réduit le degré de parallélisme, ce qui augmente par conséquent la durée d'exécution.

Descriptions des métriques

ODPS-0010000:System internal error - 
ActionHandler job failed with failinfo	storage service worker error occured: 
common/io/oss/oss_file_system_cppsdk.cpp(919): 
OSSRequestException: Status: -50, RequestId: , 
ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Exemple

Écrivez un fichier JSON d'environ 4 Go dans OSS.

  1. Préparez les données de test. Utilisez la table de jeu de données public bigdata_public_dataset.tpcds_1t.web_sales, dont la taille est d'environ 30 Go. Les données étant stockées dans un format compressé sur MaxCompute, leur taille augmente après l'exportation.

  2. Créez une table externe JSON.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Sans définir aucun paramètre, écrivez la table de test dans la table externe JSON au format de partition dynamique.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Deux fichiers sont stockés sur OSS, avec des tailles respectives de 2 112 Go et 2 102 Go.

  4. Ajoutez le paramètre odps.adaptive.shuffle.desired.partition.size pour la sortie de fichiers volumineux et écrivez la table de test dans la table externe JSON au format de partition dynamique.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

    Le fichier de données unique généré a une taille d'environ 4 214 Go.

Opérations de partition sur les tables externes OSS

Les tables externes OSS prennent en charge les opérations de partition. Opérations de partition sur les tables externes OSS et Opérations de partition sur les tables internes. Le tableau suivant répertorie les opérations prises en charge.

Opération

Prise en charge

Ajouter une partition

Yes

Modifier l'heure de mise à jour de la partition

Yes

Modifier la valeur de la partition

No

Fusionner les partitions

No

Lister les partitions

Yes

Afficher les informations de partition

Yes

Supprimer la partition

Yes

Vider la partition

No

Importation depuis ou exportation vers OSS

  • Commande LOAD : importe des données depuis un stockage externe, tel qu'OSS, dans une table ou une partition MaxCompute.

  • Commande UNLOAD : exporte des données d'un projet MaxCompute vers un stockage externe, tel qu'OSS, pour utilisation par d'autres moteurs de calcul.

Annexe : Préparation des exemples de données

  1. Préparer les répertoires OSS

    Les informations relatives aux exemples de données fournis sont les suivantes :

    • oss_endpoint : oss-cn-hangzhou-internal.aliyuncs.com, correspondant à la région Chine (Hangzhou).

    • Nom du bucket : oss-mc-test.

    • Noms des répertoires : Demo1/, Demo2/, Demo3/ et SampleData/.

  2. Données de table non partitionnée

    Le fichier téléchargé dans le répertoire Demo1/ est vehicle.csv, qui contient les données suivantes. Le répertoire Demo1/ sert à mapper une table non partitionnée créée avec l'analyseur de données texte intégré.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  3. Données de table partitionnée

    Le répertoire Demo2/ contient cinq sous-répertoires : direction=N/, direction=NE/, direction=S/, direction=SW/ et direction=W/. Les fichiers téléchargés sont respectivement vehicle1.csv, vehicle2.csv, vehicle3.csv, vehicle4.csv et vehicle5.csv. Ces fichiers contiennent les données suivantes. Le répertoire Demo2/ sert à mapper une table partitionnée créée avec l'analyseur de données texte intégré.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  4. Données compressées

    Le fichier téléchargé dans le répertoire Demo3/ est vehicle.csv.gz. Le fichier contenu dans le package compressé est vehicle.csv, qui possède le même contenu que le fichier du répertoire Demo1/. Il sert à mapper une table externe OSS avec des propriétés de compression.

  5. Données d'analyseur personnalisé

    Le fichier téléchargé dans le répertoire SampleData/ est vehicle6.csv, qui contient les données suivantes. Le répertoire SampleData/ sert à mapper une table externe OSS créée avec un analyseur de données open source.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

FAQ sur les tables externes OSS

Comment résoudre l'erreur « Inline data exceeds the maximum allowed size » lors du traitement des données OSS à l'aide d'une table externe ?

  • Problème

    Lors du traitement des données OSS, l'erreur Inline data exceeds the maximum allowed size est signalée.

  • Cause

    OSS Store impose une limite de taille pour chaque petit fichier. Une erreur se produit si un fichier dépasse 3 Go.

  • Solution

    Ajustez les deux propriétés suivantes pour contrôler la taille des données écrites par chaque réducteur dans la table externe, afin de maintenir les fichiers sous la limite de 3 Go.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

Comment résoudre une erreur de dépassement de mémoire survenant après le chargement d'une UDF pour accéder à une table externe OSS sur MaxCompute, alors que la UDF a réussi les tests locaux ?

  • Problème

    Lors de l'accès à une table externe OSS sur MaxCompute, une UDF ayant réussi les tests locaux renvoie l'erreur suivante après son chargement.

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

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

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Cause

    La table externe contient trop de fichiers objets, ce qui entraîne une utilisation excessive de la mémoire, et aucune partition n'est configurée.

  • Solution

    • Utilisez un volume de données plus réduit pour la requête.

    • Partitionnez les fichiers objets afin de réduire l'utilisation de la mémoire.

Comment fusionner plusieurs petits fichiers en un seul fichier à l'aide d'une table externe OSS ?

Consultez le journal Logview pour vérifier si la dernière étape du plan d'exécution SQL est un réducteur ou un joiner.

  • S'il s'agit d'un réducteur, 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;

Comment résoudre l'erreur « Couldn't connect to server » lors de la lecture depuis une table externe OSS ?

  • Problème

    Lors de la lecture des données depuis une table externe OSS, l'erreur 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 est signalée.

  • Cause

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

    • Cause 2 : Lors de la création de la table externe OSS, l'endpoint d'une autre région a été utilisé pour le paramètre oss_endpoint dans l'adresse oss_location.

  • Solution

    • Pour la cause 1

      Vérifiez que le paramètre oss_endpoint dans oss_location correspond à un endpoint interne. S'il s'agit d'un endpoint public, remplacez-le par un endpoint interne. Consultez la section Paramètres.

      Par exemple, si un utilisateur de la région Indonésie (Jakarta) a utilisé l'adresse oss://oss-ap-southeast-5.aliyuncs.com/<bucket>/.... pour créer une table externe, il doit la modifier pour utiliser l'adresse interne correspondante oss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/.....

    • Pour la cause 2

      Vérifiez que le paramètre oss_endpoint dans oss_location correspond à la région que vous souhaitez accéder. Les noms de domaine du réseau classique OSS sont répertoriés dans la section Régions et endpoints.

Comment résoudre l'erreur « Network is unreachable (connect failed) » lors de la création d'une table externe OSS ?

  • Problème

    Lors de la création d'une table externe OSS, l'erreur 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) est signalée.

  • Cause

    Lors de la création de la table externe OSS, un endpoint public a été utilisé pour le paramètre oss_endpoint dans l'adresse oss_location, au lieu d'un endpoint interne.

  • Solution

    Vérifiez que le paramètre oss_endpoint dans oss_location correspond à un endpoint interne. S'il s'agit d'un endpoint public, remplacez-le par un endpoint interne. Consultez la section Paramètres.

    Par exemple, si un utilisateur de la région Chine (Pékin) a utilisé l'adresse oss://oss-cn-beijing.aliyuncs.com/<bucket>/.... pour créer une table externe, il doit la modifier pour utiliser l'adresse interne correspondante oss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....

Comment résoudre la lenteur d'exécution des tâches SQL sur une table externe OSS ?

  • Lenteur de lecture des fichiers compressés GZ dans une table externe OSS

    • Symptômes

      Un utilisateur a créé une table externe OSS dont la source de données est un fichier compressé GZ de 200 Go stocké dans OSS. Le processus de lecture des données est lent.

    • Cause

      La vitesse de traitement SQL est faible car trop peu de mappeurs exécutent le calcul lors de l'étape map.

    • Solution

      • Pour les données structurées, vous pouvez définir le paramètre suivant afin d'ajuster la quantité de données lues par un seul mappeur et accélérer l'exécution SQL.

        ODPS-0010000:System internal error - 
        ActionHandler job failed with failinfo	storage service worker error occured: 
        common/io/oss/oss_file_system_cppsdk.cpp(919): 
        OSSRequestException: Status: -50, RequestId: , 
        ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
      • Pour les données non structurées, vérifiez s'il n'y a qu'un seul fichier OSS dans le chemin de la table externe OSS. Si c'est le cas, un seul mappeur peut être généré, car les données non structurées au format compressé ne peuvent pas être fractionnées. Cela entraîne une lenteur du traitement. Nous vous recommandons de diviser le grand fichier OSS en fichiers plus petits dans le chemin correspondant de la table externe sur OSS. Cette opération augmente le nombre de mappeurs générés lors de la lecture de la table externe et améliore la vitesse de lecture.

  • Lenteur de recherche des données de table externe MaxCompute à l'aide d'un SDK

    • Symptômes

      La recherche des données de table externe MaxCompute à l'aide d'un SDK est lente.

    • Solution

      Les tables externes ne prennent en charge que les analyses complètes de table, ce qui est lent. Utilisez plutôt une table interne MaxCompute.

Comment résoudre le problème de suppression des anciennes données sans écriture des nouvelles lors de l'utilisation du chargement multipartie OSS ?

  • Problème

    Dans un scénario insert overwrite, si la tâche échoue dans des cas extrêmes, le résultat peut être incohérent par rapport aux attentes. Les anciennes données sont supprimées, mais les nouvelles ne sont pas écrites.

  • Cause

    L'écriture des nouvelles données dans la table cible échoue en raison d'une panne matérielle ou d'un échec de mise à jour des métadonnées, dont la probabilité est très faible. L'opération de suppression dans OSS ne prenant pas en charge l'annulation (rollback), il est impossible de récupérer les anciennes données supprimées.

  • Solution

    • Si vous écrasez une table externe OSS en vous basant sur ses anciennes données, par exemple avec insert overwrite table T select * from table T;, sauvegardez préalablement les données OSS. En cas d'échec de la tâche, vous pourrez ainsi écraser la table externe OSS à partir des anciennes données sauvegardées.

    • Si la tâche insert overwrite peut être resoumise, contentez-vous de la relancer en cas d'échec.

Solution à l'erreur « table not found » lors de l'accès à une table externe OSS depuis Spark

  • Problème

    Lorsque vous utilisez Spark pour accéder à une table externe OSS, la tâche échoue avec une erreur « table not found ».

  • Solution

    • Ajoutez les paramètres suivants :

      • Activez la configuration des tables externes : spark.sql.catalog.odps.enableExternalTable=true ;

      • Configurez la région où se trouve OSS : spark.hadoop.odps.oss.region.default=cn-<region>

    • Si l'erreur persiste après l'ajout des paramètres ci-dessus :

      ODPS-0010000:System internal error - 
      ActionHandler job failed with failinfo	storage service worker error occured: 
      common/io/oss/oss_file_system_cppsdk.cpp(919): 
      OSSRequestException: Status: -50, RequestId: , 
      ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED

      Recréez la table externe OSS, puis accédez-y à nouveau.

Erreur lors de la lecture ou de l'écriture dans des tables externes OSS : Failed to connect Http service: http://.oss-cn-shanghai-internal.aliyuncs.com.

  • Détails de l'erreur

    Détails de l'erreur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Causes et solutions

    1. Cause 1 : Vérifiez si la tâche de table externe utilise une UDF pour accéder à un endpoint interne OSS. Si c'est le cas, établissez la connectivité réseau en utilisant l'une des options suivantes. À défaut, les tâches peuvent échouer de manière intermittente.

      1. Option 1 (recommandée) : Utiliser une connexion réseau pour accéder aux ressources VPC.

      2. Option 2 : Ajouter les endpoints internes OSS à la liste d'autorisation.

    2. Cause 2 : Vérifiez si la table externe OSS correspond à l'un des types suivants. Si c'est le cas, établissez la connectivité réseau en utilisant une option indiquée sous la Cause 1.

      Tables externes Lance, tables externes Hudi, tables externes Delta Lake ou tables externes utilisant un analyseur personnalisé.

    3. Cause 3 : Sur la page Json Summary dans Logview, vérifiez si le paramètre odps.isolation.session.enable est défini sur true. Si c'est le cas, établissez la connectivité réseau en utilisant une option indiquée sous la Cause 1.

ODPS-0010000:System internal error

  • Détails de l'erreur

    ODPS-0010000:System internal error - 
    ActionHandler job failed with failinfo	storage service worker error occured: 
    common/io/oss/oss_file_system_cppsdk.cpp(919): 
    OSSRequestException: Status: -50, RequestId: , 
    ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSED
  • Cause

    Un endpoint OSS public a été utilisé lors de la création de la table externe OSS.

  • Solution

    Lors de la création d'une table externe OSS, le paramètre location doit utiliser un oss_endpoint interne. Pour obtenir l'endpoint, consultez la section Paramètres. Si l'erreur persiste après le basculement vers un endpoint interne, soumettez un ticket à l'équipe de support technique MaxCompute pour obtenir de l'aide.

Références