Types de données et casts Trino
Quel que soit le chemin que vous empruntez pour interroger votre project via Trino, l'éditeur SQL de l'Explorer, un consumer Trino, ou un outil externe
Objectif
Quel que soit le chemin que vous empruntez pour interroger votre project via Trino, l'éditeur SQL de l'Explorer, un consumer Trino, ou un outil externe, les types que vous manipulez sont les types Trino, et non les types logiques que vous voyez dans le Lakehouse Manager. La plupart du temps les deux coïncident, mais certains cas nécessitent un CAST explicite au moment de l'INSERT.
Types de données : du Lakehouse à Trino
Le tableau ci-dessous fait correspondre chaque type Lakehouse au type Trino sous lequel il est exposé :
Le type Trino exact d'une colonne, y compris toute longueur ou précision, est celui avec lequel la table a été créée. En cas de doute, exécutez SHOW CREATE TABLE <catalog>.<schema>.<table>;. Tout CAST dans un INSERT doit cibler ce type, et non le type logique que vous voyez dans le Lakehouse Manager.
Conversions implicites (aucun CAST nécessaire)
Trino élargit automatiquement ces types, vous pouvez donc insérer directement la valeur source :
INTEGER→BIGINTREAL→DOUBLEDECIMAL→ unDECIMALplus largeVARCHAR(n)→VARCHARnon borné : un littéral tel que'foo'est unVARCHAR(3)et se convertit vers une chaîne Iceberg sans aucun changementDATE→TIMESTAMP
Casts à écrire explicitement
Trino ne convertira pas ces types de lui-même. Un INSERT sans CAST renvoie TYPE_MISMATCH :
VARCHAR→ numérique ou date :CAST('1' AS INTEGER),CAST('2026-05-26' AS DATE)- numérique →
VARCHAR:CAST(x AS VARCHAR) TIMESTAMP↔TIMESTAMP WITH TIME ZONE(tout changement de prise en compte du fuseau horaire)DECIMAL(p1, s1)→DECIMAL(p2, s2)lorsque la précision ou l'échelle diffère et qu'une troncature est possible- Types complexes : il n'y a pas de conversion entre des valeurs
ROWde structures différentes, vous devez reconstruire le champROW(...)champ par champ
Insérer des valeurs typées
Utiliser une forme de littéral valide
INT '1' n'est pas une syntaxe Trino valide. INT est accepté comme alias d'INTEGER dans une déclaration de colonne, mais pas dans la forme de littéral typé TYPE 'value'.
Pour insérer un entier, utilisez l'une des formes suivantes :
Lire la même colonne ne déclenche jamais d'erreur, car aucun littéral typé n'est évalué lors d'un SELECT. Seule la forme INT 'x' casse le parseur.
Résoudre les TYPE_MISMATCH lors d'insertions VARCHAR
CAST(x AS VARCHAR) produit un VARCHAR non borné, compatible avec une colonne string Iceberg. Si vous obtenez toujours un TYPE_MISMATCH, vérifiez les points suivants, dans l'ordre :
- La colonne cible n'est peut-être pas non bornée. Si la table a été créée via Trino avec
VARCHAR(50), le connector conserve cette contrainte de longueur. Confirmez avecDESCRIBE catalog.schema.table;ouSHOW CREATE TABLE catalog.schema.table;. Si la colonne estvarchar(50), effectuez un cast versCAST(x AS VARCHAR(50)). - Ordre ou nombre des colonnes. Sans liste de colonnes explicite, Trino associe les valeurs par position et déclenche un
TYPE_MISMATCHdès qu'une colonne en aval ne correspond plus, et l'erreur pointe parfois vers la mauvaise expression. Préférez toujours : - Types complexes.
CAST(... AS VARCHAR)sur unROW,ARRAYouMAPéchoue. Convertissez champ par champ, ou utilisezjson_format(CAST(... AS JSON)). - Colonnes générées et horodatages. Un
VARCHARne se convertit pas implicitement versTIMESTAMPouDATE. UnTYPE_MISMATCHqui semble concerner unVARCHARpeut en réalité provenir d'une autre colonne dans la même clauseVALUES.
Si l'incompatibilité persiste, rassemblez le SHOW CREATE TABLE, l'instruction INSERT complète et le message d'erreur exact avant d'ouvrir un ticket de support. Cela suffit pour identifier la colonne fautive.
Aller plus loin
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.
Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.
Rejoignez notre communauté d'utilisateurs.