Apache Paimon utilise des tables système pour exposer les métadonnées et les informations de consommation de données de chaque table Paimon. Interrogez ces tables avec SQL pour inspecter les snapshots, l'historique des schémas, les partitions, les fichiers et les tags, ou pour consommer plus efficacement les données de modification (change data).
Les tables système se divisent en deux catégories :
Tables de métadonnées — snapshots, schemas, options, partitions, files, tags
Tables de consommation de données — table optimisée pour la lecture, table d'audit
Tables de métadonnées
Table snapshots
La table snapshots ($snapshots) enregistre les informations relatives à chaque snapshot, notamment son ID, sa date de création et le nombre d'enregistrements.
SELECT * FROM mycatalog.mydb.`mytbl$snapshots`;
| Colonne | Type de données | Description |
|---|---|---|
snapshot_id |
Long | ID du snapshot. |
schema_id |
Long | ID du schéma utilisé par ce snapshot. Effectuez une jointure avec la table schemas pour obtenir les définitions de champs. |
commit_time |
Timestamp | Date de création du snapshot. |
total_record_count |
Long | Nombre total d'enregistrements dans les fichiers de données vers lesquels pointe ce snapshot. |
delta_record_count |
Long | Enregistrements ajoutés par rapport au snapshot précédent. |
changelog_record_count |
Long | Enregistrements de changelog générés par rapport au snapshot précédent. |
total_record_count ne reflète pas le nombre logique d'enregistrements dans la table Paimon. Les fichiers de données sont compactés en mémoire avant d'être capturés dans un snapshot.
Table schemas
La table schemas ($schemas) enregistre chaque version de schéma d'une table Paimon. Chaque fois que vous modifiez le schéma à l'aide de ALTER TABLE, de CREATE TABLE AS ou de CREATE DATABASE AS, un nouvel enregistrement est écrit dans cette table.
SELECT * FROM mycatalog.mydb.`mytbl$schemas`;
| Colonne | Type de données | Description |
|---|---|---|
schema_id |
Long | ID de la version du schéma. |
fields |
String | Nom et type de données de chaque colonne. |
partition_keys |
String | Nom de la clé de partition. |
primary_keys |
String | Nom de la clé primaire. |
options |
String | Valeurs actuelles des options de la table. |
comment |
String | Commentaire sur la table. |
update_time |
Timestamp | Date de la dernière modification du schéma. |
Table options
La table options ($options) affiche la configuration actuelle de toutes les options de table explicitement définies.
SELECT * FROM mycatalog.mydb.`mytbl$options`;
| Colonne | Type de données | Description |
|---|---|---|
key |
String | Nom de l'option de table. |
value |
String | Valeur de l'option de table. |
Les options non répertoriées dans cette table utilisent leurs valeurs par défaut.
Table partitions
La table partitions ($partitions) affiche les partitions d'une table Paimon ainsi que leur nombre d'enregistrements et la taille totale des fichiers.
SELECT * FROM mycatalog.mydb.`mytbl$partitions`;
| Colonne | Type de données | Description |
|---|---|---|
partition |
String | Partition au format [partition value 1, partition value 2, ...]. |
record_count |
Long | Nombre total d'enregistrements dans la partition. |
file_size_in_bytes |
Long | Taille totale des fichiers dans la partition, en octets. Seuls les fichiers de données du snapshot actuel sont pris en compte. |
record_count ne reflète pas le nombre logique d'enregistrements. Les fichiers de données sont compactés en mémoire avant d'être capturés dans un snapshot.
Table files
La table files ($files) répertorie tous les fichiers de données vers lesquels pointe le snapshot actuel, y compris leur format, leur nombre d'enregistrements et leur taille.
Interrogez les fichiers du snapshot le plus récent :
SELECT * FROM mycatalog.mydb.`mytbl$files`;
Interrogez les fichiers d'un snapshot spécifique (par exemple, l'ID de snapshot 5) :
SELECT * FROM mycatalog.mydb.`mytbl$files` /*+ OPTIONS('scan.snapshot-id'='5') */;
| Colonne | Type de données | Description |
|---|---|---|
partition |
String | Partition contenant le fichier, au format [partition value 1, partition value 2, ...]. |
bucket |
Integer | Bucket contenant le fichier. S'applique uniquement aux tables à clé primaire utilisant le mode de bucket fixe. |
file_path |
String | Chemin d'accès du fichier. |
file_format |
String | Format du fichier. |
schema_id |
Long | ID du schéma utilisé par ce fichier. Effectuez une jointure avec la table schemas pour obtenir les définitions de champs. |
level |
Integer | Niveau log-structured merge-tree (LSM) du fichier. S'applique uniquement aux tables à clé primaire. Une valeur de 0 indique un petit fichier ; surveillez cette colonne pour suivre la progression de la compaction dans un bucket. |
record_count |
Long | Nombre d'enregistrements dans le fichier. |
file_size_in_bytes |
Long | Taille du fichier, en octets. |
La table files couvre uniquement les fichiers de données du snapshot interrogé. Les fichiers de données historiques non référencés par ce snapshot ne sont pas inclus.
Table tags
La table tags ($tags) enregistre les informations relatives aux tags, y compris le snapshot auquel chaque tag est associé.
SELECT * FROM mycatalog.mydb.`mytbl$tags`;
| Colonne | Type de données | Description |
|---|---|---|
tag_name |
String | Nom du tag. |
snapshot_id |
Long | ID du snapshot auquel le tag est associé. |
schema_id |
Long | ID du schéma utilisé par le tag. Effectuez une jointure avec la table schemas pour obtenir les définitions de champs. |
commit_time |
Timestamp | Date de création du snapshot associé. |
record_count |
Long | Nombre d'enregistrements dans les fichiers de données. |
Tables de consommation de données
Table optimisée pour la lecture
Si vous utilisez une table à clé primaire et souhaitez améliorer l'efficacité des lectures par lots ou des requêtes OLAP ad hoc, vous pouvez consommer les données depuis la table optimisée pour la lecture ($ro). Contrairement à une requête directe sur la table, qui compacte les fichiers de données en mémoire avant de renvoyer les résultats, $ro évite cette étape en analysant uniquement les fichiers déjà compactés. Cela élimine la surcharge liée à la compaction et accélère les lectures, mais les résultats peuvent ne pas inclure les derniers petits fichiers non compactés.
Pour compacter les petits fichiers à intervalles réguliers et équilibrer le débit d'écriture, les performances de lecture et la latence des données, définissez le paramètre suivant :
| Paramètre | Type de données | Valeur par défaut | Description |
|---|---|---|---|
compaction.optimization-interval |
Duration | Aucune | Intervalle de compaction des petits fichiers. Définissez cette valeur sur une durée supérieure à 30 min pour éviter d'impacter le débit d'écriture. |
SELECT * FROM mycatalog.mydb.`mytbl$ro`;
Table d'audit
Utilisez la table d'audit ($audit_log) lorsque vous devez tracer le type exact d'opération derrière chaque enregistrement, par exemple pour déboguer des modifications de données inattendues ou créer des pipelines de données de modification (change-data) en aval.
Par rapport à la table d'origine, la table d'audit insère une colonne rowkind au début de chaque enregistrement pour indiquer le type d'opération :
**Valeur rowkind** |
Opération |
|---|---|
+I |
Insertion |
-U |
Mise à jour (avant) |
+U |
Mise à jour (après) |
-D |
Suppression |
Tous les enregistrements renvoyés par la table d'audit ont un rowkind de type +I (insertion), car la table elle-même ne fait qu'ajouter des enregistrements.
SELECT * FROM mycatalog.mydb.`mytbl$audit_log`;
Références
Pour connaître la structure complète de chaque table système, consultez la documentation Apache Paimon.