Tous les produits
Search
Centre de documentation

MaxCompute:Tables externes Tablestore

Dernière mise à jour :Aug 12, 2026

Cette rubrique explique comment importer des données depuis Tablestore (Open Table Service, anciennement OTS) vers MaxCompute afin de connecter facilement plusieurs sources de données.

Contexte

Tablestore est un service de stockage de données NoSQL basé sur le système distribué Apsara d'Alibaba Cloud. Ce service permet le stockage et l'accès en temps réel à de grands volumes de données structurées. Pour plus d'informations, consultez Documentation Tablestore.

L'utilisation conjointe de DataWorks et de MaxCompute permet de créer, rechercher, interroger, configurer, traiter et analyser visuellement des tables externes. Pour plus d'informations, consultez Tables externes.

Remarques d'utilisation

  • La connectivité réseau entre MaxCompute et Tablestore doit être garantie. Lors de l'accès aux données Tablestore depuis MaxCompute sur le cloud public, il est recommandé d'utiliser l'endpoint privé de Tablestore. Cet endpoint privé se termine par ots-internal.aliyuncs.com, par exemple tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com.

  • Les systèmes de types de données diffèrent entre Tablestore et MaxCompute. Le tableau suivant présente les correspondances entre les types pris en charge par ces deux services.

    Type MaxCompute

    Type Tablestore

    STRING

    STRING

    BIGINT

    INTEGER

    DOUBLE

    DOUBLE

    BOOLEAN

    BOOLEAN

    BINARY

    BINARY

  • L'attribut de clustering n'est pas pris en charge pour les tables externes Tablestore.

Prérequis

Création d'une table externe

MaxCompute offre la fonctionnalité de tables externes. Elles permettent d'importer des données depuis Tablestore vers le système de métadonnées de MaxCompute pour traitement. La section suivante détaille la procédure de création d'une table externe Tablestore.

Voici un exemple d'instruction CREATE EXTERNAL TABLE.

DROP TABLE IF EXISTS ots_table_external;
CREATE EXTERNAL TABLE IF NOT EXISTS ots_table_external
(
  odps_orderkey bigint,
  odps_orderdate string,
  odps_custkey bigint,
  odps_orderstatus string,
  odps_totalprice double,
  odps_createdate timestamp
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
WITH SERDEPROPERTIES (
  'tablestore.columns.mapping'=':o_orderkey,:o_orderdate,o_custkey,o_orderstatus,o_totalprice',
  'tablestore.table.name'='ots_tpch_orders',
  'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole',
  'tablestore.read.mode'='permissive',
  'tablestore.corrupt.column'='ColumnName',
  'tablestore.timestamp.ticks.unit'='seconds',
  'tablestore.column.odps_createdate.timestamp.ticks.unit'='millis',
  'tablestore.table.put.row'='true'
)
LOCATION 'tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com';

Le tableau ci-dessous décrit les paramètres clés utilisés dans l'instruction de création de table précédente.

Paramètre

Obligatoire

Description

com.aliyun.odps.TableStoreStorageHandler

Oui

Gestionnaire de stockage intégré à MaxCompute, utilisé pour traiter les données Tablestore. Il définit l'interaction entre MaxCompute et Tablestore, la logique associée étant implémentée par MaxCompute.

tablestore.columns.mapping

Oui

Colonnes de la table Tablestore auxquelles MaxCompute doit accéder, incluant les colonnes de clé primaire et les colonnes d'attributs.

  • Un deux-points (:) au début du nom indique une colonne de clé primaire de la table Tablestore, comme :o_orderkey et :o_orderdate dans l'exemple. Les autres colonnes sont des colonnes d'attributs.

  • Tablestore prend en charge de 1 à 4 colonnes de clé primaire. Leurs types de données peuvent être STRING, INTEGER ou BINARY. La première colonne de clé primaire sert de clé de partition.

  • Lors de la définition des mappages de colonnes, vous devez spécifier toutes les colonnes de clé primaire de la table Tablestore concernée ainsi que les colonnes d'attributs accessibles via MaxCompute.

tablestore.table.name

Oui

Nom de la table Tablestore cible pour l'accès MaxCompute. Dans cet exemple, il s'agit de ots_tpch_orders.

odps.properties.rolearn

Oui

ARN (Alibaba Cloud Resource Name) du rôle AliyunODPSDefaultRole dans RAM.

  1. Connectez-vous à la console RAM.

  2. Dans la barre de navigation de gauche, sélectionnez Identities > Roles.

  3. Sur la page Roles, cliquez sur le Role Name souhaité pour accéder à la page de détails du rôle.

  4. Dans la section Basic Information, récupérez l'ARN.

    Exemple : acs:ram::xxxxx:role/aliyunodpsdefaultrole

tablestore.timestamp.ticks.unit

Non

Paramètre temporel au niveau de la table. Il impose une unité de temps unique pour tous les champs de type INTEGER de la table externe. Valeurs valides :

  • Seconds

  • millis

  • micros (microsecondes)

  • nanos

tablestore.column.<col1_name>.timestamp.ticks.unit

Non

Paramètre temporel au niveau de la colonne. Il définit l'unité de temps pour une colonne spécifique de la table externe. Valeurs valides :

  • seconds

  • millis (millisecondes)

  • micros

  • nanos

Remarque

Si tablestore.timestamp.ticks.unit et tablestore.column.<col1_name>.timestamp.ticks.unit sont tous deux configurés, le paramètre tablestore.column.<col1_name>.timestamp.ticks.unit est prioritaire.

tablestore.table.put.row

Non

Définit le mode d'écriture de l'opération PutRow. Valeurs valides :

  • True : activé.

  • False (par défaut) : désactivé.

Remarque

Le paramètre flag suivant permet de spécifier le mode d'écriture de l'opération PutRow. Sa valeur par défaut est False. Pour plus d'informations, consultez Liste des paramètres flag.

SET odps.sql.unstructured.tablestore.put.row=true;

tablestore.read.mode

Non

Détermine le comportement de lecture lorsque MaxCompute détecte des données corrompues dans la table externe Tablestore. Valeurs valides :

  • permissive (par défaut) : MaxCompute ignore les données corrompues détectées.

  • failfast : MaxCompute signale une erreur dès la détection de données corrompues.

Pour des exemples de traitement des données corrompues, consultez Tables externes Tablestore.

tablestore.corrupt.column

Non

Indique la colonne destinée à recevoir les données corrompues.

  • Ce paramètre n'est requis que si tablestore.read.mode est défini sur permissive.

  • La colonne spécifiée doit impérativement être la dernière de la table externe MaxCompute.

  • Il est impossible de désigner une colonne de clé primaire Tablestore.

Pour des exemples de traitement des données corrompues, consultez Tables externes Tablestore.

LOCATION

Oui

Spécifie les informations relatives à Tablestore, telles que le nom et l'endpoint de l'instance. Une autorisation RAM ou Security Token Service (STS) est indispensable pour garantir un accès sécurisé aux données Tablestore.

Remarque

Si l'utilisation de l'endpoint public génère une erreur signalant une incohérence des types de réseau, basculez vers le réseau classique.

Exécutez l'instruction suivante pour consulter la structure de la table externe créée :

DESC extended <table_name>;
Remarque

Le résultat d'exécution contient une section Extended Info qui regroupe les informations de base de la table externe, les détails du gestionnaire de stockage ainsi que l'emplacement de la table.

Interrogation des données de la table externe

Une fois la table externe créée, exécutez une instruction SQL MaxCompute pour accéder aux données Tablestore via cette table. Exemple :

SELECT odps_orderkey, odps_orderdate, SUM(odps_totalprice) AS sum_total
FROM ots_table_external
WHERE odps_orderkey > 5000 AND odps_orderkey < 7000 AND odps_orderdate >= '1996-05-03' AND odps_orderdate < '1997-05-01'
GROUP BY odps_orderkey, odps_orderdate
HAVING sum_total> 400000.0;
Remarque

Lors de l'interrogation de tables ou de champs externes, les noms ne sont pas sensibles à la casse et aucune conversion forcée entre majuscules et minuscules n'est prise en charge.

L'accès aux données Tablestore via des instructions SQL MaxCompute implique que toutes les opérations, y compris la sélection des noms de colonnes, s'exécutent dans MaxCompute. Dans l'exemple précédent, les colonnes utilisées sont odps_orderkey et odps_totalprice plutôt que la colonne de clé primaire o_orderkey et la colonne d'attribut o_totalprice de la table Tablestore. Cela s'explique par les mappages définis dans l'instruction DDL de création de la table externe. Vous pouvez également conserver les noms originaux des colonnes de clé primaire et d'attributs de la table Tablestore selon vos besoins.

Pour effectuer plusieurs calculs sur un même jeu de données, importez-les depuis Tablestore vers une table interne MaxCompute. Ainsi, vous évitez de relire systématiquement les données depuis Tablestore pour chaque traitement MaxCompute. Exemple :

CREATE TABLE internal_orders AS
SELECT odps_orderkey, odps_orderdate, odps_custkey, odps_totalprice
FROM ots_table_external
WHERE odps_orderkey > 5000 ;

La table internal_orders est une table MaxCompute qui bénéficie de toutes les fonctionnalités d'une table interne. Elle utilise un stockage en colonnes compressé efficacement et contient des macro-données internes complètes ainsi que des informations statistiques. Étant stockée directement dans MaxCompute, l'accès à la table internal_orders est plus rapide qu'à une table Tablestore. Cette approche convient particulièrement aux données nécessitant des calculs répétés.

Exportation de données de MaxCompute vers Tablestore

Remarque

MaxCompute ne crée pas automatiquement la table Tablestore de destination. Avant toute exportation, assurez-vous que la table cible existe déjà, faute de quoi une erreur sera générée.

Une table externe nommée ots_table_external a été créée pour permettre à MaxCompute d'accéder à la table ots_tpch_orders dans Tablestore. Les données sont stockées dans une table interne MaxCompute appelée internal_orders. Pour traiter les données de la table internal_orders puis écrire les résultats dans Tablestore, exécutez l'instruction insert overwrite table sur la table externe. Exemple :

INSERT OVERWRITE TABLE ots_table_external
SELECT odps_orderkey, odps_orderdate, odps_custkey, CONCAT(odps_custkey, 'SHIPPED'), CEIL(odps_totalprice)
FROM internal_orders;
Remarque

Si les données de la table interne MaxCompute sont triées par clés primaires, elles seront écrites dans une seule partition de la table Tablestore, empêchant ainsi l'exploitation optimale des écritures distribuées. Dans ce cas, utilisez distribute by rand() pour répartir aléatoirement les données. Exemple :

INSERT OVERWRITE TABLE ots_table_external
SELECT odps_orderkey, odps_orderdate, odps_custkey, CONCAT(odps_custkey, 'SHIPPED'), CEIL(odps_totalprice)
FROM (SELECT * FROM internal_orders DISTRIBUTE BY rand()) t;

Tablestore étant un service de stockage NoSQL organisé en paires clé-valeur, les sorties de données depuis MaxCompute n'affectent que les lignes correspondant aux clés primaires de la table Tablestore. Dans cet exemple, seules les lignes contenant odps_orderkey et odps_orderdate sont impactées. Seules les colonnes d'attributs spécifiées lors de la création de la table ots_table_external sont mises à jour ; les colonnes absentes de la table externe restent inchangées.

Remarque
  • L'écriture simultanée de données depuis MaxCompute vers Tablestore peut échouer si le volume dépasse 4 Mo. Supprimez alors les données excédentaires avant de retenter l'écriture.

    ODPS-0010000:System internal error - Output to TableStore failed with exception:
    TableStore BatchWrite request id XXXXX failed with error code OTSParameterInvalid and message:The total data size of BatchWriteRow request exceeds the limit
  • L'écriture simultanée ou ligne par ligne de plusieurs entrées de données compte comme une opération unique. Pour plus d'informations, consultez BatchWriteRow. Pour écrire de grands volumes de données en une seule fois, privilégiez l'écriture ligne par ligne.

  • Lors de l'écriture simultanée de plusieurs entrées, veillez à ne pas inclure de lignes en double. La présence de doublons peut provoquer l'erreur suivante :

    ErrorCode: OTSParameterInvalid, ErrorMessage: The input parameter is invalid 

    Pour plus d'informations, consultez Erreur OTSParameterInvalid lors de l'utilisation de BatchWriteRow pour soumettre 100 entrées de données simultanément.

  • Tablestore étant un service de stockage clé-valeur, l'utilisation de insert overwrite table pour écrire dans une table Tablestore n'efface pas intégralement le contenu de la table cible. Seules les valeurs associées aux clés correspondantes de la table source sont écrasées.

Exemples de traitement des données corrompues

  1. Créez une table Tablestore nommée mf_ots_test et préparez les données. Pour plus d'informations, consultez Démarrage rapide pour le modèle de table large.

    Le code suivant illustre les données par défaut de la table Tablestore.

    +----+-----------+---------------------------+
    | id | name      | desc                      |
    +----+-----------+---------------------------+
    | 1  | Zhang San | Zhang San's description   |
    +----+-----------+---------------------------+
  2. Créez une table externe MaxCompute.

    CREATE EXTERNAL TABLE IF NOT EXISTS mf_ots_external_permi
    (
     id string,
    	name bigint,
    	desc string,
    	corrupt_col string
    )
    STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
    WITH SERDEPROPERTIES (
      'tablestore.columns.mapping'=':id,name,desc',
      'tablestore.table.name'='mf_ots_test',
      'tablestore.read.mode'='permissive',
      'tablestore.corrupt.column'='corrupt_col',
      'odps.properties.rolearn'='acs:ram::139699392458****:role/aliyunodpsdefaultrole'
    )
    LOCATION 'tablestore://santie-doc.cn-shanghai.ots-internal.aliyuncs.com';
  3. Exécutez le code suivant pour interroger les données de la table externe MaxCompute :

    -- Query data
    SELECT * FROM mf_ots_external_permi;

    Le résultat suivant est retourné. Le champ d'erreur est inscrit dans la colonne corrupt_col au format JSON.

    +------------+------------+--------------------------+------------------------+
    | id         | name       | desc                     | corrupt_col            |
    +------------+------------+--------------------------+------------------------+
    | 1          | NULL       | Description of Zhang San | {"name": "\"Zhang San\""} |
    +------------+------------+--------------------------+------------------------+
    Remarque

    Si tablestore.read.mode n'est pas configuré ou est défini sur permissive sans que tablestore.corrupt.column ne précise la colonne de destination des données corrompues, l'interrogation de la table externe renvoie le message d'erreur "Columns not match with columns mapping and corrupt column".

FAQ

Comment résoudre les problèmes de lenteur des tâches SQL sur les tables externes Tablestore ?

  • Requêtes lentes sur les tables externes Tablestore

    • Symptôme

      Les requêtes sur une table externe Tablestore manquent de rapidité. Pour les mêmes données métier, une copie est écrite en temps réel dans Tablestore tandis qu'une autre est planifiée dans MaxCompute. Bien que les schémas de table et les volumes de données soient identiques, une requête sur la table interne MaxCompute s'avère nettement plus rapide que sur la table externe Tablestore.

    • Solution

      Ce problème survient généralement lors de l'exécution de multiples calculs sur un même jeu de données. Plutôt que de lire systématiquement les données depuis Tablestore pour chaque requête, importez les données nécessaires dans une table interne MaxCompute, puis exécutez vos requêtes sur cette table interne pour gagner en efficacité.

  • Recherche de données lente sur les tables externes MaxCompute via un SDK

    • Symptôme

      Les recherches de données dans une table externe MaxCompute effectuées à l'aide d'un kit de développement logiciel (SDK) présentent des latences importantes.

    • Solution

      Les tables externes ne prenant en charge que les analyses complètes de table, cela peut entraîner des baisses de performance. Privilégiez l'utilisation d'une table interne MaxCompute.