L'API Storage (également appelée Open Storage) permet aux moteurs de calcul tiers d'accéder directement en lecture au stockage sous-jacent de MaxCompute. L'API Storage offre une méthode efficace, à faible latence et sécurisée pour l'accès aux données. Des moteurs tels qu'Apache Spark, StarRocks, Presto et Apache Flink se connectent via un connecteur, ce qui évite les exports de données et réduit la latence d'accès.

Fonctionnement
Un moteur de calcul tiers se connecte à MaxCompute par le biais d'un connecteur qui appelle l'API Storage. Cette API expose les tables MaxCompute avec une sémantique de table standard, permettant ainsi aux moteurs de lire directement les données columnaires depuis le stockage sans déplacer les données hors de MaxCompute.
Principales fonctionnalités :
Débit élevé : prend en charge les lectures columnaires efficaces, le pushdown des prédicats et le format de données Apache Arrow.
Sécurité et simplicité d'utilisation : applique l'isolation des projets, le contrôle d'accès et le chiffrement des données au niveau de la couche de stockage, sans exposer les éléments internes du stockage à l'appelant.
Intégration à l'écosystème : Spark sur EMR et StarRocks prennent en charge des connecteurs dédiés pour un accès direct à MaxCompute.
Cas d'utilisation
L'API Storage convient aux charges de travail nécessitant un accès multi-moteur aux mêmes données sans duplication :
Analyses inter-moteurs : exécutez des requêtes Spark, StarRocks ou Presto directement sur les tables MaxCompute sans exporter préalablement les données.
Flexible framework switching : basculez entre différents frameworks de calcul selon vos besoins de traitement tout en conservant les données à un seul endroit.
Limites
Types de tables pris en charge et non pris en charge
Les moteurs tiers peuvent lire les types de tables suivants via l'API Storage :
Tables standard
Tables partitionnées
Tables clusterisées
Delta Tables
Vues matérialisées
Les types de tables suivants ne sont pas pris en charge :
Tables externes
Vues logiques
Types de données non pris en charge
La lecture des données de type JSON n'est pas prise en charge.
Limites de débit (paiement à l'utilisation)
|**Limite**
|
**Valeur**
| | --- | --- | |
Requêtes simultanées par locataire
|
1 000
| |
Débit de transmission par requête simultanée
|
10 Mo/s
|
Ressources de transmission de données
Pour exécuter des tâches de transmission de données, utilisez des groupes de ressources exclusifs pour Data Transmission Service (DTS). Les groupes de ressources DTS utilisent la méthode de facturation par abonnement : les frais sont basés sur le nombre d'instances simultanées achetées.
Ressource | Facturation | Régions prises en charge | Guide de configuration |
Frais d'abonnement pour les ressources de transmission de données exclusives | Abonnement — facturé par instance simultanée |
| Achat et utilisation d'un groupe de ressources exclusif pour Data Transmission Service |
Pour surveiller l'utilisation, accédez à la page Resource Observation. Pour plus d'informations, consultez la rubrique Observation des ressources.
Mappage des types de données Arrow
L'API Storage utilise Apache Arrow comme format de données en mémoire pour la transmission. Les données écrites via l'API Storage ne sont pas traitées : les clés en double dans les colonnes MAP sont conservées telles quelles.
Les types TIMESTAMP et INTERVAL_DAY_TIME sont sujets à une perte de précision. Les valeurs TIMESTAMP dépassant la plage du type TimestampType d'Arrow voient leur partie haute précision tronquée. Le type INTERVAL_DAY_TIME (précision nanoseconde) est tronqué en millisecondes.
Le tableau suivant établit la correspondance entre les types MaxCompute et leurs équivalents Arrow.
|**Type MaxCompute**
|
**Type Arrow**
|
**Notes**
| | --- | --- | --- | |
TINYINT
|
Int8Type
| | |
SMALLINT
|
Int16Type
| | |
INT
|
Int32Type
| | |
BIGINT
|
Int64Type
| | |
FLOAT
|
FloatType
| | |
DOUBLE
|
DoubleType
| | |
BOOLEAN
|
BooleanType
| | |
DECIMAL
|
Decimal128Type
|
Lecture : converti en `decimal(38,18)` ; un dépassement génère une exception. Écriture : le type `decimal(precision,scale)` d'Arrow correspond à `DECIMAL(38,18)` ; la précision et l'échelle doivent correspondre.
| |
DECIMAL(précision, échelle)
|
Decimal128Type
| | |
STRING
|
StringType
| | |
BINARY
|
BinaryType
| | |
VARCHAR
|
StringType
| | |
CHAR
|
StringType
| | |
DATETIME
|
TimestampType
|
Unité de temps : millisecondes. Fuseau horaire : UTC.
| |
TIMESTAMP
|
TimestampType
|
Unité de temps : nanosecondes. Fuseau horaire : UTC. Prend en charge une plage de valeurs plus large ; les données dépassant la plage de précision d'Arrow sont tronquées.
| |
DATE
|
Date32Type
| | |
INTERVAL_DAY_TIME
|
DayTimeIntervalType
|
Précision MaxCompute : nanosecondes. Précision Arrow : millisecondes. La partie nanoseconde est tronquée lors de la lecture et de l'écriture.
| |
INTERVAL_YEAR_MONTH
|
MonthIntervalType
| | |
ARRAY
|
ListType
| | |
MAP
|
MapType
|
Les clés en double sont conservées lors de l'écriture. Lors de la requête, le moteur SQL applique la règle « dernière écriture gagnante » (exemple : écrire `{'a': 1, 'b': 2, 'a': 3}` renvoie `{'a': 3, 'b': 2}`).
| |
STRUCT
|
StructType
| | |
JSON
|
StringType
|
**Non pris en charge :** la lecture des données JSON via l'API Storage n'est pas prise en charge.
|
Étapes suivantes
Accédez à MaxCompute à l'aide d'un connecteur :
Accédez à MaxCompute à l'aide d'un SDK :