Wat is information_schema precies?
Information_schema is een gestandaardiseerde set views die beschikbaar is in vrijwel elke relationele database. Denk aan tabellen als tables, columns, views, constraints, procedures en nog veel meer. Deze views bieden inzicht in de structuur van je database zonder dat je toegang nodig hebt tot de daadwerkelijke data. Je kunt ermee opvragen welke tabellen er zijn, welke kolommen in die tabellen zitten, welke constraints er gelden, welke views afhankelijk zijn van welke tabellen, enzovoorts.
Wat information_schema bijzonder maakt, is dat het dynamisch is: het verandert mee met je database. Voeg je een kolom toe? Dan zie je dat direct terug. Wordt een view aangepast? Ook die wijziging is inzichtelijk. Dit maakt het een ideaal fundament voor metadata-gedreven toepassingen, zowel over het dataplatform waar je aan werkt, als over de bronnen die je binnen je platform ontsluit.
Praktische toepassingen van information_schema
Laten we dit concreet maken met een veelvoorkomende situatie: je werkt aan een dataplatform waarin meerdere teams hun eigen datasets publiceren in een gedeelde warehouse-omgeving, bijvoorbeeld Snowflake of BigQuery. Op een dag besluit Team Marketing een kolom te hernoemen in hun tabellen. Als daar views of dashboards op gebaseerd zijn in andere teams, dan breekt er van alles, tenzij je proactief zicht hebt op deze afhankelijkheden. Met information_schema kun je dit soort afhankelijkheden in kaart brengen. Door te query’en op bijvoorbeeld view_table_usage of referential_constraints, zie je wie op wie bouwt. Dit stelt je in staat om impactanalyses te doen voordat wijzigingen live gaan. Het helpt je ook om automatisch waarschuwingen te genereren bij wijzigingen, of zelfs deployment pipelines te blokkeren als ze downstream impact hebben.
Een ander sterk voorbeeld is documentatie. Veel datateams worstelen met het actueel houden van technische documentatie. Waarom zou je dat handmatig doen, als je met één query uit information_schema.columns een volledig overzicht kunt genereren van alle kolommen, inclusief datatypes, nullable flags en default values? Combineer dit met tools als dbt of DataHub, en je hebt een dynamisch bijgewerkte catalogus.
Ook in de context van datakwaliteit is information_schema waardevol. Wil je monitoren of tabellen groeien zoals verwacht? Of weten welke tabellen al maanden niet meer worden aangeraakt, en dus misschien opgeruimd kunnen worden? Door information_schema.tables te combineren met usage logs, kun je grip krijgen op gedrag en gebruik van datasets.
Uitdagingen en kanttekeningen
Hoewel information_schema krachtig is, kent het ook beperkingen. De standaard views zijn niet altijd volledig consistent tussen systemen. Wat in PostgreSQL beschikbaar is, kan net anders heten of zelfs ontbreken in bijvoorbeeld Redshift of Databricks. Het is dus belangrijk om je platform-specifieke documentatie goed te kennen.
Dit kan ook van invloed zijn als je data uit verschillende bronnen ontsluit naar je dataplatform. Als je een overzicht wil hebben van alle bronnen en structuren, op kolom niveau, gebruik je voor SQL Server en PostgreSQL information_schema.columns, terwijl je uit Oracle de view all_tab_columns nodig hebt. Daarbij komt ook nog dat de verschillende databases andere data-types gebruiken, dus een integraal beeld krijgen soms lastig kan zijn.
Metadatagedreven ontsluiten van bronnen
Elke ETL-specialist of data engineer kent het wel, een bronsysteem past een kolomnaam aan en de volgende run loopt je ontsluiting vast. Ook al heb je een datacontract of een gegevensleveringsovereenkomst, de ontwikkelaars waren even vergeten dat hun data ook gebruikt wordt in het dataplatform, wat cruciaal kan zijn voor stuur- en verantwoordingsinformatie (of andere toepassingen).
Maar wat nou als je dit had kunnen zien aankomen? Of er automatisch op had kunnen reageren? Dat kan dus op basis van de metagegevens uit het bronsysteem! Wanneer er in de information_schema views een extra kolom meegegeven wordt, zou je deze ook automatisch in je dataplatform op kunnen nemen. Of bij een ‘all or nothing aanpak, kun je direct die nieuwe tabel meenemen in je volgende loads. Dan is de data ook in het dataplatform al beschikbaar voordat de business je kan vragen om die nieuwe tabel op te nemen. Dit kan daarmee zorgen voor een robuustere pipeline, die tegen een stootje kan wanneer structuur gewijzigd wordt.
Vraag dus bij je volgende te ontsluiten bronsysteem ook toegang tot deze views, op die manier ben je voorbereid op alle databasewijzigingen.
Conclusie
Het gebruik van information_schema is misschien niet het spannendste onderwerp binnen data engineering, maar wel een van de meest onderschatte krachten in het bouwen van een schaalbaar, onderhoudbaar en slim dataplatform. Juist doordat deze metagegevens standaard beschikbaar zijn in vrijwel elke relationele database, is het verbazingwekkend hoeveel grip je ermee kunt krijgen op structuur, afhankelijkheden en gebruik van data.
Door information_schema actief te benutten, kun je beter anticiperen op wijzigingen in bronnen, automatisch documentatie genereren, inzicht krijgen in lineage en datakwaliteit borgen. Of je nu werkt met Snowflake, PostgreSQL, SQL Server of BigQuery, overal ligt een schat aan metadata voor het oprapen. Voor data engineers betekent dit minder incidenten en stabielere pipelines. Voor analisten betekent het vertrouwen in de datasets waarmee ze werken.
Metagegevens vormen daarmee niet alleen de smeerolie van je dataplatform, maar ook het motorblok. Wie investeert in het goed ontsluiten en benutten van deze metadata, legt een fundament voor flexibiliteit, schaalbaarheid en toekomstbestendigheid. Dus de volgende keer dat je een bron ontsluit of een datamodel aanpast, vergeet dan niet: information_schema weet hoe alles in elkaar zit.