Tableaux

Les tables définissent la structure de vos données.

Vous pouvez charger de nouvelles données dans vos tables ou référencer des données dans un emplacement existant. Vous pouvez définir des droits d'accès de contrôle d'accès de niveau fin sur les tables en créant des droits d'accès de table.

Les tables peuvent être externes ou gérées.

Tables externes

Une table externe définit une structure pour les données stockées dans un emplacement non géré par Oracle AI Data Platform. Lorsque vous créez une table externe dans la plate-forme de données AI, le cycle de vie des métadonnées est géré par la plate-forme de données AI. Lorsque vous supprimez une table externe, seule la définition de la table est supprimée. Les données référencées par la table externe ne sont pas supprimées.

Assurez-vous que les stratégies IAM suivantes sont requises pour créer des tables externes aux utilisateurs :

allow group <GroupName> to read buckets in compartment id <external-data-CompartmentId>
allow group <GroupName> to inspect objects in compartment id <external-data-CompartmentId>

Des stratégies IAM supplémentaires sont requises pour les tables externes. Pour plus d'informations, reportez-vous à Stratégies IAM pour Oracle AI Data Platform.

Tables gérées

Une table gérée définit une structure pour les données stockées dans la plate-forme de données d'IA et accessibles uniquement par les utilisateurs de la plate-forme de données d'IA.

Lorsque vous supprimez une table gérée, la définition et les données de la table sont supprimées.

Formats de table pris en charge

Les tables peuvent utiliser des formats basés sur des fichiers tels que CSV, JSON, Avro, Parquet et ORC, ou des formats de table transactionnelle tels que Delta et Apache Iceberg. Les tables d'iceberg utilisent l'implémentation du catalogue Hadoop pour gérer les métadonnées de table dans Oracle Cloud Infrastructure Object Storage.

Format Description Utilisation
Valeurs séparées par des virgules (CSV) Les données sont stockées sous forme de fichier texte avec un format de fichier basé sur une ligne spécifique pour structurer les données. En général, la première ligne du fichier est une ligne d'en-tête qui contient les noms de colonne des données. Utilisé pour échanger des données tabulaires entre les systèmes. Chaque ligne du fichier est une ligne d'une table.
JavaScript Object Notation (JSON) Les données sont stockées dans un format texte standard pour représenter des données structurées en fonction de la syntaxe d'objet JavaScript. JSON prend en charge les listes d'objets ou les structures hiérarchiques. Utilisé dans les applications de flux. JSON simplifie le stockage des données associées avec des relations complexes dans un seul document et évite la conversion chaotique des listes en un modèle de données relationnel. Notez que JSON n'est pas splittable.
Avro Les données sont stockées dans un format binaire basé sur des lignes, tandis que le schéma est stocké au format JSON afin de réduire la taille du fichier et d'optimiser l'efficacité. Avro offre une prise en charge fiable de l'évolution des schémas en gérant les champs ajoutés, manquants et modifiés. Cela permet aux anciens logiciels de lire de nouvelles données et aux nouveaux logiciels de lire d'anciennes données. Egalement appelé système de sérialisation des données. Utilisé pour le stockage de données car les fichiers avro sont divisibles et compressibles. Le stockage en ligne sérialisé est idéal pour les transactions d'écriture importantes, telles que l'insertion de données dans AI Data Platform. Avro est également un bon choix lorsque l'évolution du schéma est critique lors des écritures à grande vitesse.
Parquet Les données sont stockées dans un format de données en colonnes et sont hautement compressibles et séparables. Parquet est optimisé pour le paradigme Write Once Read Many (WORM). Il écrit lentement mais se lit incroyablement rapidement, surtout lorsque vous accédez uniquement à un sous-ensemble de colonnes. Utilisé pour résoudre les problèmes de Big Data car les algorithmes de compression fonctionnent mieux avec le format de données en colonnes. Vous pouvez stocker le Big Data dans différents formats, tels que des images, des vidéos, des documents et des tables de données structurées. Parquet est un bon choix pour les charges de travail lourdes lors de la lecture de parties de données. Par exemple, lorsque l'ensemble de données comporte de nombreuses colonnes, mais que vous souhaitez uniquement accéder à un sous-ensemble de colonnes. Idéal lorsque vous dépendez de Spark ou que vous voulez que plusieurs services accèdent aux mêmes données stockées dans Object Storage.
Colonne de ligne optimisée (ORC) Les données sont stockées dans des ensembles de lignes dans un fichier unique au format colonne. Utilisé pour le traitement parallèle des ensembles de lignes dans un cluster. Idéal lorsque les transactions de lecture sont plus que des transactions d'écriture ou lorsque la compression est prioritaire.
Delta Les données sont stockées dans un format en colonnes qui étend les fichiers de données Parquet avec un journal de transactions basé sur un fichier JSON pour les transactions ACID et la gestion évolutive des métadonnées. Utilisé pour la prise en charge des transactions.
Iceberg Format de table ouverte qui gère les fichiers de données Parquet via des métadonnées avec numéro de version, des manifestes et des instantanés. AI Data Platform utilise l'implémentation du catalogue Iceberg Hadoop. Utilisation pour les transactions ACID, les lectures et écritures simultanées, l'évolution des schémas et des partitions, les requêtes de déplacement temporel, les mises à jour au niveau ligne, les mises à jour et la gestion des clichés.

Types de données pris en charge

Type de données Description
Type d'octet Représente des nombres entiers signés sur 1 octet. La plage de nombres est comprise entre -128 et 127.
Type abrégé Représente des nombres entiers signés sur 2 octets. La gamme de nombres va de -32768 à 32767.
Type entier Représente des nombres entiers signés sur 4 octets. La plage de nombres est comprise entre -2147483648 et 2147483647.
Type long Représente des nombres entiers signés sur 8 octets. La gamme de nombres va de -9223372036854775808 à 9223372036854775807.
Type flottant Représente des nombres à virgule flottante de précision unique de 4 octets.
Type double Représente des nombres à virgule flottante de double précision de 8 octets.
Type décimal Nombres décimaux signés à précision arbitraire. Soutenu en interne par java.math.BigDecimal. Une valeur BigDecimal se compose d'un entier de précision arbitraire sans échelle et d'une échelle entière de 32 bits.
Type de chaîne Représente les valeurs de chaîne de caractères.
VarcharType(longueur) Variante de StringType ayant une limite de longueur. L'écriture des données échouera si la chaîne d'entrée dépasse la limite de longueur.
Type de caractère (longueur) Une variante de VarcharType(longueur) qui est de longueur fixe. La lecture d'une colonne de type CharType(n) renvoie toujours des valeurs de chaîne de longueur n. La comparaison des colonnes de type caractère permet d'ajouter la valeur courte à la valeur plus longue.
Type binaire Représente les valeurs de séquence d'octets.
Type booléen Représente les valeurs booléennes
Type de date Représente les valeurs des champs année, mois et jour, sans fuseau horaire.
TimestampType Horodatage avec fuseau horaire local (TIMESTAMP_LTZ). Il représente les valeurs des champs année, mois, jour, heure, minute et seconde, avec le fuseau horaire local de la session. La valeur d'horodatage représente un point dans le temps absolu.
HorodatageNTZType Horodatage sans fuseau horaire (TIMESTAMP_NTZ). Il représente les valeurs des champs année, mois, jour, heure, minute et seconde. Toutes les opérations sont effectuées sans tenir compte d'un fuseau horaire.
AnnéeMoisTypeInterval(startField, endField) Représente un intervalle annuel-mois composé d'un sous-ensemble contigu de MOIS, mois dans les années [0..11] et ANNEE, années dans la plage [0..178956970].
DayTimeIntervalType (champ de début, champ de fin) Représente un intervalle de jour composé d'un sous-ensemble contigu de SECOND, secondes dans les minutes et éventuellement des fractions d'une seconde [0..59.99999], MINUTE, minutes dans les heures [0..59], HOUR, heures dans les jours [0..23] et DAY, jours dans la plage [0..106751991].
ArrayType(elementType, containsNull) Représente les valeurs comprenant une séquence d'éléments avec le type elementType. containsNull est utilisé pour indiquer si les éléments d'une valeur ArrayType peuvent avoir des valeurs NULL.
MapType(keyType, valueType, valueContainsNull) Représente des valeurs comprenant un ensemble de paires clé-valeur. Le type de données des clés est décrit par keyType et le type de données des valeurs est décrit par valueType. Pour une valeur MapType, les clés ne sont pas autorisées à avoir des valeurs NULL. valueContainsNull est utilisé pour indiquer si les valeurs d'une valeur MapType peuvent avoir des valeurs NULL.
StructType(champs) Représente les valeurs avec la structure décrite par une séquence de StructFields (champs).
StructField(nom, dataType, nullable) Représente un champ dans un type de structure. Le nom d'un champ est indiqué par son nom. Le type de données d'un champ est indiqué par dataType. La valeur NULL est utilisée pour indiquer si les valeurs de ces champs peuvent avoir des valeurs NULL.

Limites

Les limitations suivantes s'appliquent aux tables de la plate-forme de données AI :

  • Vous ne pouvez pas définir de table externe sur des fichiers de données ou des répertoires dans/sur un volume.
  • Vous ne pouvez pas définir une table externe sur un bucket et/ou son répertoire qui est déjà utilisé pour une autre table externe ou un autre volume externe
  • Les vues ne peuvent pas être affichées/répertoriées dans le catalogue principal.

Evolution du schéma

L'évolution des schémas dans Oracle AI Data Platform permet aux utilisateurs disposant des droits d'accès requis de mettre à jour une table gérée à l'aide du langage SQL dans un bloc-notes.

Cela est utile lorsqu'une définition de table change au fil du temps pour prendre en charge de nouvelles colonnes, des colonnes enlevées, des colonnes renommées, des modifications de partition ou des noms de table sans recréer l'ensemble de données à partir de zéro. Les formats pris en charge sont Parquet, Avro et Delta.

Opérations prises en charge

Les opérations d'évolution de schéma suivantes ont été analysées pour les tables gérées :
  • Renommer la table : pris en charge pour Delta, Parquet, Avro et Iceberg
  • Ajouter des colonnes : prise en charge pour Delta, Parquet, Avro et Iceberg
  • Colonnes de suppression : prises en charge pour Delta et Iceberg ; non prises en charge pour Parquet et Avro
  • Modification ou changement de nom des colonnes : prise en charge pour Delta et Iceberg ; non prise en charge pour Parquet et Avro
  • Remplacer les colonnes : prise en charge pour Delta et Iceberg
  • Ajouter des partitions : pris en charge pour Parquet et Avro via DDL. Pour Delta et Iceberg, les partitions sont créées automatiquement à mesure que les données sont écrites. Les partitions individuelles ne sont pas ajoutées via DDL. Iceberg prend en charge l'ajout de champs à la spécification de partition à l'aide de ALTER TABLE ... ADD PARTITION FIELD.
  • Supprimer des partitions : prise en charge pour Parquet et Avro via DDL. Pour Delta, supprimez les données pertinentes et exécutez VACUUM. Iceberg ne prend pas en charge la suppression de partitions individuelles via DDL. Supprimez plutôt les lignes appropriées. Iceberg prend en charge la suppression de champs de la spécification de partition à l'aide de ALTER TABLE ... DROP PARTITION FIELD.
  • Modifier le type de données : non pris en charge pour Parquet ou Avro. Delta peut nécessiter un CTAS ou une solution de contournement du schéma d'écrasement. Iceberg prend uniquement en charge les promotions de type compatibles, telles que INT à BIGINT, FLOAT to DOUBLE et l'augmentation de la précision décimale, via ALTER TABLE. Les conversions restreintes ou incompatibles ne sont pas prises en charge.

Créer une table gérée

Vous pouvez créer des tables pour le schéma que vous gérez.

  1. Accédez au schéma pour lequel vous voulez créer une table.
  2. Sélectionnez l'onglet Tables.
  3. Cliquez sur Icône Créer une table Créer une table.

    Créer une table avec le type de table Géré sélectionné

  4. Sélectionnez Géré pour le type de table.
  5. Sélectionnez le format de la table dans Format de table géré.
  6. Glissez-déplacez un fichier avec vos données de table ou cliquez pour accéder à l'emplacement du fichier.
  7. Indiquez le nom et la description de la table.
  8. Facultatif : pour ajouter des partitions, développez Clés de partition (facultatif). Cliquez sur Ajouter une partition et sélectionnez une colonne de données.
  9. Facultatif : pour ajouter des propriétés de table aux métadonnées du catalogue de données, développez Propriétés de table (facultatif). Cliquez sur Ajouter une propriété et indiquez la propriété et sa valeur.
  10. Cliquez sur Créer.

Créer une table externe

Vous pouvez créer une table externe avec des données dans OCI Object Storage.

  1. Accédez au schéma pour lequel vous voulez créer une table.
  2. Sélectionnez l'onglet Tables.
  3. Cliquez sur Icône Créer une table Créer une table.

    Créer une page de table ouverte avec le type de table Externe sélectionné

  4. Sélectionnez Externe pour le type de table.
  5. Sélectionnez le compartiment, le bucket et le dossier dans OCI Object Storage où les données sont stockées. Les objets que vous pouvez sélectionner dépendent des droits d'accès IAM de l'utilisateur connecté.
  6. Indiquez le nom et la description de la table.
  7. Facultatif : pour ajouter des propriétés de table aux métadonnées du catalogue de données, développez Propriétés de table (facultatif). Cliquez sur Ajouter une propriété et indiquez la propriété et sa valeur.
  8. Cliquez sur Créer.

Modifier un tableau

Vous pouvez modifier les détails des tables que vous gérez.

Remarques :

Les modifications apportées aux tables de catalogue externes dans Oracle AI Data Platform ne sont pas transmises au catalogue distant.
  1. Accédez à votre schéma.
  2. Sélectionnez l'onglet Tables.
  3. En regard de la table à modifier, cliquez sur Icône Actions à trois points Actions.
    • Cliquez sur Renommer pour modifier le nom de la table. Saisissez un nouveau nom, puis appuyez sur Entrée.
    • Cliquez sur Modifier la description pour modifier la description de votre table. Fournissez la nouvelle description et cliquez sur Enregistrer.

Visualiser les détails de la table

Vous pouvez visualiser les détails des tables du schéma.

  1. Accédez à votre schéma. Cliquez sur l'onglet Tables.
  2. Cliquez sur le nom du volume pour lequel afficher les détails. Vous pouvez également cliquer sur Icône Actions à trois points Actions en regard du volume, puis sur Visualiser.
  3. Cliquez sur l'onglet Détails.

Suppression d'une table

Vous pouvez supprimer des tables du schéma que vous gérez.

  1. Accédez au schéma dont vous souhaitez supprimer la table.
  2. Cliquez sur l'onglet Tables.
  3. En regard de la table à supprimer, cliquez sur Icône Actions à trois points Actions, puis sur Supprimer.
  4. Cliquez sur Supprimer.