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ètreodps.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 |
| Formats de fichiers de données pris en charge pour la lecture ou l'écriture depuis ou vers OSS :
|
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 |
| Formats de fichiers de données pris en charge pour la lecture ou l'écriture dans OSS :
|
Créez une table externe à l'aide d'un analyseur personnalisé
Syntaxe | Format de fichier de données | Exemple |
| 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.rolearndans l'instruction de création de table, l'ARN du rôlealiyunodpsdefaultroleest utilisé par défaut. Vous devez d'abord créer le rôle RAM en utilisant Autorisation STS. Le rôleAliyunODPSDefaultRoledispose 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
-
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
tblpropertiesfonctionnent 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 viatblPropertiesest 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.*\.jsonsuffit.-
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
SELECTqui interroge les données à insérer dans la table cible depuis la table source.from_statement : clause
FROMqui 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 %.




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



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.limitpour 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.
Écrire des données dans OSS à l'aide d'un analyseur de texte intégré ou d'un analyseur de données open source : Analyseur de texte intégré, Analyseur open source intégré.
Écrire des données dans OSS à l'aide d'un analyseur personnalisé : Exemple : Créer une table externe OSS à l'aide d'un analyseur personnalisé.
Écrire des données dans OSS en utilisant la fonctionnalité de téléchargement multipartie d'OSS : Écrire des données dans OSS à l'aide de la fonctionnalité de téléchargement multipartie d'OSS.
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 |
|
from_statement |
Oui |
Clause |
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.sizepour 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.numetodps.stage.joiner.numpour 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. |
Définir au niveau de la session | S'applique uniquement à la tâche en cours. |
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 |
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. |
| 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. |
| 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. |
| Une combinaison de caractères autorisés, telle que « jsonl » | Aucune |
Exemples
-
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_REFUSEDAprès l'écriture des données, les fichiers générés dans OSS sont nommés avec le préfixe personnalisé
test06_, par exempletest06_202509101. -
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 -
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 -
Pour personnaliser l'extension de fichier en
jsonlpour 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_REFUSEDLe nom de fichier généré est
20250905072538695g3mlopvxicr4_M1_1_0_0-0_TableSink1.jsonl, avec l'extension de fichier personnalisée.jsonl. -
Pour les fichiers écrits dans OSS, définissez le préfixe sur
mc_, le suffixe sur_beijinget l'extension de fichier surjsonl. 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_REFUSEDLe nom de fichier généré est
mc_20250905073013526gra1l214x6t6_M1_1_0_0-0_TableSink1_beijing.jsonl, où20250905073013526est 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.
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.-
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 -
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_REFUSEDDeux fichiers sont stockés sur OSS, avec des tailles respectives de 2 112 Go et 2 102 Go.
-
Ajoutez le paramètre
odps.adaptive.shuffle.desired.partition.sizepour 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_REFUSEDLe 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 |
|
|
Modifier l'heure de mise à jour de la partition |
|
|
Modifier la valeur de la partition |
|
|
Fusionner les partitions |
|
|
Lister les partitions |
|
|
Afficher les informations de partition |
|
|
Supprimer une partition |
|
|
Vider une partition |
|
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
-
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/etSampleData/.
-
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épertoireDemo1/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 -
Données de table partitionnée
Le répertoire
Demo2/contient cinq sous-répertoires :direction=N/,direction=NE/,direction=S/,direction=SW/etdirection=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épertoireDemo2/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 -
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épertoireDemo1/. Il est utilisé pour mapper une table externe OSS avec des propriétés de compression. -
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épertoireSampleData/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 sizeest 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_REFUSEDAprè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 serverest 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_endpointdans 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_endpointdans l'adresse oss_location.
-
Solution
-
Pour la cause 1
Vérifiez que le paramètre
oss_endpointdans 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 correspondanteoss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/..... -
Pour la cause 2
Vérifiez que le paramètre
oss_endpointdans 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_endpointdans l'adresse oss_location, au lieu d'un endpoint interne. -
Solution
Vérifiez que le paramètre
oss_endpointdans 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 correspondanteoss://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 overwritepeut ê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_REFUSEDRecré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
-
Causes et solutions
-
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.
Option 1 (recommandée) : Utiliser une connexion réseau pour accéder aux ressources VPC.
Option 2 : Ajouter les endpoints internes OSS à la liste d'autorisation.
-
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é.
Cause 3 : Sur la page Json Summary dans Logview, vérifiez si le paramètre
odps.isolation.session.enableest 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
locationdoit contenir unoss_endpointinterne. 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
-
Formats de tables externes OSS pris en charge :
Créer une table externe OSS et lire ou écrire dans OSS à l'aide d'un analyseur personnalisé : Analyseurs personnalisés.
Analyser un fichier OSS en un jeu de données avec un schéma prenant en charge le filtrage et le traitement des colonnes : Fonctionnalité spéciale : Requête sans schéma.
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.rolearndans l'instruction de création de table, l'ARN du rôlealiyunodpsdefaultroleest utilisé par défaut. Vous devez d'abord créer le rôle RAM en utilisant Autorisation STS. Le rôleAliyunODPSDefaultRoledispose 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
-
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
tblpropertiesfonctionnent 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 viatblPropertiesest 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.*\.jsonsuffit.-
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
SELECTqui interroge les données à insérer dans la table cible depuis la table source.from_statement : clause
FROMqui 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 %.




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



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.limitpour 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.
Écrivez les données dans OSS à l'aide d'un analyseur de texte intégré ou d'un analyseur de données open source : Analyseur de texte intégré, Analyseur open source intégré.
Écrivez les données dans OSS à l'aide d'un analyseur personnalisé : Exemple : Création d'une table externe OSS à l'aide d'un analyseur personnalisé.
Écrivez les données dans OSS en utilisant la fonctionnalité de téléchargement multipartie d'OSS : Écriture des données dans OSS à l'aide de la fonctionnalité de téléchargement multipartie d'OSS.
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 |
|
from_statement |
Oui |
Clause |
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.sizepour 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.numetodps.stage.joiner.numpour 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. |
Définir au niveau de la session | S'applique uniquement à la tâche en cours. |
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 |
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. |
| 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. |
| 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. |
| Une combinaison de caractères autorisés, par exemple « jsonl » | Aucune |
Exemples
-
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_REFUSEDAprès l'écriture des données, les fichiers générés dans OSS portent le préfixe personnalisé
test06_, par exempletest06_202509101. -
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 -
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 -
Pour personnaliser l'extension de fichier en
jsonlpour 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_REFUSEDLe nom de fichier généré est
20250905072538695g3mlopvxicr4_M1_1_0_0-0_TableSink1.jsonl, avec l'extension de fichier personnalisée.jsonl. -
Pour les fichiers écrits dans OSS, définissez le préfixe sur
mc_, le suffixe sur_beijinget l'extension de fichier surjsonl. 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_REFUSEDLe nom de fichier généré est
mc_20250905073013526gra1l214x6t6_M1_1_0_0-0_TableSink1_beijing.jsonl, où20250905073013526est 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.
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.-
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 -
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_REFUSEDDeux fichiers sont stockés sur OSS, avec des tailles respectives de 2 112 Go et 2 102 Go.
-
Ajoutez le paramètre
odps.adaptive.shuffle.desired.partition.sizepour 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_REFUSEDLe 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 |
|
|
Modifier l'heure de mise à jour de la partition |
|
|
Modifier la valeur de la partition |
|
|
Fusionner les partitions |
|
|
Lister les partitions |
|
|
Afficher les informations de partition |
|
|
Supprimer la partition |
|
|
Vider la partition |
|
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
-
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/etSampleData/.
-
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épertoireDemo1/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 -
Données de table partitionnée
Le répertoire
Demo2/contient cinq sous-répertoires :direction=N/,direction=NE/,direction=S/,direction=SW/etdirection=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épertoireDemo2/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 -
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épertoireDemo1/. Il sert à mapper une table externe OSS avec des propriétés de compression. -
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épertoireSampleData/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 sizeest 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_REFUSEDAprè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 serverest 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_endpointdans 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_endpointdans l'adresse oss_location.
-
Solution
-
Pour la cause 1
Vérifiez que le paramètre
oss_endpointdans 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 correspondanteoss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/..... -
Pour la cause 2
Vérifiez que le paramètre
oss_endpointdans 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_endpointdans l'adresse oss_location, au lieu d'un endpoint interne. -
Solution
Vérifiez que le paramètre
oss_endpointdans 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 correspondanteoss://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 overwritepeut ê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_REFUSEDRecré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
-
Causes et solutions
-
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.
Option 1 (recommandée) : Utiliser une connexion réseau pour accéder aux ressources VPC.
Option 2 : Ajouter les endpoints internes OSS à la liste d'autorisation.
-
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é.
Cause 3 : Sur la page Json Summary dans Logview, vérifiez si le paramètre
odps.isolation.session.enableest 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
locationdoit utiliser unoss_endpointinterne. 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
-
Formats de tables externes OSS pris en charge :
Créer une table externe OSS et lire ou écrire dans OSS à l'aide d'un analyseur personnalisé : Analyseurs personnalisés.
Analyser un fichier OSS en un jeu de données doté d'un schéma qui prend en charge le filtrage et le traitement des colonnes : Fonctionnalité spéciale : requête sans schéma.