Ga naar hoofdinhoud

Tabellen maken in Snowflake: typen, voorbeelden & best practices

Leer hoe je verschillende soorten tabellen in Snowflake maakt, waaronder permanente, tijdelijke, externe en dynamische tabellen. Inclusief stapsgewijze voorbeelden en best practices.
· 9 min lezen

Verken met AI

Snowflake is een krachtig, cloudgebaseerd datawarehouseplatform dat organisaties helpt hun data efficiënt op te slaan, te beheren en te analyseren. In tegenstelling tot traditionele datawarehouses die complexe hardware vereisen, draait Snowflake volledig in de cloud, waardoor bedrijven hun data-operaties naar behoefte eenvoudiger kunnen opschalen.

Tabellen maken in Snowflake is een essentiële vaardigheid en vormt de basis van databeheer. Tabellen zijn de plek waar je gestructureerde data bewaart, zodat je queries kunt uitvoeren, rapporten kunt genereren en waardevolle inzichten uit je informatie kunt halen. Of je nu met klantdata, verkoopcijfers of analytische resultaten werkt: begrijpen hoe je tabellen maakt en beheert in Snowflake is cruciaal.

In deze tutorial leer je alles wat je moet weten over het maken van tabellen in Snowflake. We behandelen de verschillende typen tabellen, laten stapsgewijze voorbeelden zien en delen best practices voor tabelontwerp. Aan het eind kun je met vertrouwen het juiste tabeltype kiezen voor jouw behoeften en tabellen maken volgens industriestandaarden voor prestaties en onderhoudbaarheid.

Inzicht in tabeltypen in Snowflake

Voordat we in codevoorbeelden duiken over hoe je tabellen maakt, bekijken we de verschillende tabeltypen in Snowflake. Elk type heeft een eigen doel en specifieke eigenschappen op het gebied van datapersistentie, toegankelijkheid en opslaglocatie.

Permanente tabellen

Permanente tabellen zijn het standaard tabeltype in Snowflake. Ze blijven bestaan totdat ze expliciet worden verwijderd en worden opgeslagen in de interne opslag van Snowflake. Deze tabellen zijn ideaal voor het opslaan van kernbedrijfsdata die je langdurig wilt bewaren en in meerdere sessies wilt kunnen benaderen. De data in permanente tabellen blijft intact tussen sessies en is toegankelijk voor elke geautoriseerde gebruiker.

Tijdelijke tabellen

Tijdelijke tabellen zijn sessiespecifieke tabellen die automatisch worden verwijderd wanneer je huidige sessie eindigt. Ze fungeren als werkruimtetabellen voor tussentijdse verwerkingsstappen en helpen complexe datatransformaties te organiseren zonder je permanente opslag te vervuilen. De data in tijdelijke tabellen is alleen zichtbaar voor de sessie die ze heeft aangemaakt en wordt automatisch opgeruimd wanneer de sessie sluit.

Externe tabellen

Externe tabellen bieden een manier om data te bevragen die buiten de opslag van Snowflake staat. Ze fungeren als een metadatalayer die verwijst naar data op externe opslaglocaties zoals AWS S3 of Azure Blob Storage. In plaats van de data in te laden, maken externe tabellen er een verwijzing naar, zodat je externe data direct kunt bevragen. Deze aanpak is vooral waardevol wanneer je met data werkt die in de bronsystemen moet blijven of die vaak wordt bijgewerkt vanuit externe systemen.

Dynamische tabellen

Dynamische tabellen zijn een krachtige functie in Snowflake die automatisch up-to-date resultaten van een query bijhouden. Ze werken als gematerialiseerde views die automatisch verversen op basis van wijzigingen in de onderliggende brontabellen. Wanneer je een dynamische tabel maakt, definieer je die met een SELECT-statement, en Snowflake beheert automatisch het verversingsproces zodat de data actueel blijft.

Dynamische tabellen zijn vooral handig voor:

  • Realtime dashboards bouwen die verse data nodig hebben zonder handmatige refresh
  • Geaggregeerde of getransformeerde versies van brondata bijhouden die automatisch worden bijgewerkt
  • Afhankelijke datamodellen creëren waarbij downstream-tabellen upstream-wijzigingen moeten weerspiegelen
  • Queryprestaties optimaliseren door complexe transformaties vooraf te berekenen

Belangrijke kenmerken van dynamische tabellen zijn onder meer:

  • Configureerbare verversingsintervallen (van 1 minuut tot 24 uur)
  • Automatische afhankelijkheidsopvolging van brontabellen
  • Instellingen voor target-lag om de actualiteit te sturen
  • Incrementele verwerking om compute-kosten te minimaliseren
  • Ingebouwde monitoring- en optimalisatiecapaciteiten

Elk tabeltype heeft een eigen rol in je data-architectuur. Permanente tabellen vormen de basis van je datawarehouse, tijdelijke tabellen faciliteren datapijplijnen, externe tabellen maken integratie met externe bronnen mogelijk, en dynamische tabellen zorgen voor geautomatiseerde, realtime datatransformaties.

Snowflake-tabellen vergelijken 

In de onderstaande tabel hebben we de verschillende typen Snowflake-tabellen samengevat in een beknopte, snelle referentiegids: 

Tabeltype

Persistentie

Zichtbaarheid

Het beste voor

Permanent

Tot verwijdering

Elke sessie

Kernbedrijfsdata

Tijdelijk

Alleen sessie

Zelfde sessie

Tussentijdse transformaties

Extern

Externe opslag

Elke sessie

Externe data bevragen (bijv. S3)

Dynamisch

Automatisch verversend

Elke sessie

Realtime analytics

Tabellen maken: Snowflake instellen

Voordat je de voorbeelden in deze tutorial uitvoert, heb je toegang tot een Snowflake-omgeving nodig. Dit zijn verschillende manieren om verbinding te maken en Snowflake-commando's uit te voeren:

1. Snowflake-webinterface (Snowsight)

De eenvoudigste manier om te beginnen is via de webinterface van Snowflake:

  1. Log in op je Snowflake-account 
  2. Navigeer naar Worksheets
  3. Maak een nieuw werkblad om SQL-commando's uit te voeren

2. Snowflake CLI (commandlinetool)

Voor toegang via de commandline:

  1. Installeer Snowflake CLI 
  2. Verbind met:
snowsql -a <account> -u <username> -d <database> -w <warehouse>

Je vindt je Snowflake-accountgegevens op de volgende plekken:

  1. Account-URL: Kijk in je welkomstmail of accountinstellingen
  2. Gebruikersnaam: Opgegeven tijdens het aanmaken van het account
  3. Database: Aangemaakt of toegewezen door je admin
  4. Warehouse: Aangemaakt of toegewezen door je admin

Deel of commit deze inloggegevens om veiligheidsredenen nooit. Sla ze veilig op in omgevingsvariabelen of een configuratiebestand.

3. Python-verbinding

Als je Python gebruikt, kun je de bibliotheek snowflake-connector-python gebruiken:

import snowflake.connector

conn = snowflake.connector.connect(
   user='your_username',
   password='your_password',
   account='your_account',
   warehouse='your_warehouse',
   database='your_database',
   schema='your_schema'
)

cur = conn.cursor()

cur.execute("SELECT current_version()")

Belangrijke beveiligingsopmerking:

  • Sla inloggegevens nooit direct in je code op
  • Gebruik omgevingsvariabelen of veilige secret management
  • Overweeg voor productie keypair-authenticatie
  • Volg de beveiligingsrichtlijnen van je organisatie

Nu de setup klaar is, gaan we tabellen maken!

Tabellen maken in Snowflake: stapsgewijze voorbeelden

Voorbeeld 1: Een eenvoudige Snowflake-tabel maken

Laten we een tabel maken om klantinformatie op te slaan. Dit voorbeeld laat basis-tabelcreatie zien met verschillende datatypes en constraints.

-- Create a permanent table for customer data
CREATE OR REPLACE TABLE customers (
   customer_id INTEGER PRIMARY KEY,
   first_name VARCHAR(50) NOT NULL,
   last_name VARCHAR(50) NOT NULL,
   email VARCHAR(100) UNIQUE,
   date_of_birth DATE,
   created_at TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()
);

Belangrijke punten bij dit voorbeeld:

  • CREATE OR REPLACE TABLE - Maakt een nieuwe tabel of vervangt deze als hij al bestaat
  • PRIMARY KEY - Zorgt voor unieke identificatie van elk record
  • NOT NULL - Voorkomt null-waarden in vereiste velden
  • UNIQUE - Zorgt dat e-mailadressen niet dubbel voorkomen
  • TIMESTAMP_NTZ - Timestamp zonder tijdzone
  • DEFAULT - Stelt automatisch het aanmaaktijdstip in

Voorbeeld 2: Een tijdelijke tabel maken

Tijdelijke tabellen zijn perfect voor tussentijdse dataverwerking. Hier is een voorbeeld dat een tijdelijke tabel maakt voor analyse van klantorders:

-- Create a temporary table for order analysis
CREATE OR REPLACE TEMPORARY TABLE temp_order_analysis (
   order_date DATE,
   total_orders INTEGER,
   total_revenue DECIMAL(18,2)
)
AS
SELECT
   DATE_TRUNC('day', order_date) as order_date,
   COUNT(*) as total_orders,
   SUM(order_amount) as total_revenue
FROM orders
GROUP BY 1;

Belangrijke punten over tijdelijke tabellen:

  • Het sleutelwoord TEMPORARY geeft aan dat deze tabel alleen binnen de huidige sessie bestaat. Dit betekent dat andere gebruikers deze tabel niet kunnen zien of benaderen.
  • Met CREATE TABLE AS (CTAS) kun je in één stap een tabel creëren en vullen door de tabeldefinitie te combineren met een SELECT-statement.
  • De tijdelijke tabel wordt automatisch verwijderd wanneer je sessie eindigt, waardoor de database schoon blijft zonder handmatige opschoning.
  • Tijdelijke tabellen zijn handig voor het opslaan van tussenresultaten tijdens complexe datatransformaties of analysestromen.

Voorbeeld 3: Een externe tabel maken in Snowflake 

Dit voorbeeld laat zien hoe je een externe tabel maakt die data leest uit bestanden die in een cloudopslagbucket zijn opgeslagen:

-- Create file format for CSV files
CREATE OR REPLACE FILE FORMAT my_csv_format
   TYPE = CSV
   FIELD_DELIMITER = ','
   SKIP_HEADER = 1
   NULL_IF = ('NULL', 'null');

-- Create external stage
CREATE OR REPLACE STAGE my_external_stage
   URL = 's3://my-bucket/data/'
   CREDENTIALS = (AWS_KEY_ID = 'xxx' AWS_SECRET_KEY = 'xxx');

-- Create external table
CREATE OR REPLACE EXTERNAL TABLE ext_customer_data (
   customer_id VARCHAR AS (VALUE:c1::VARCHAR),
   purchase_date DATE AS (VALUE:c2::DATE),
   product_id VARCHAR AS (VALUE:c3::VARCHAR),
   amount DECIMAL(10,2) AS (VALUE:c4::DECIMAL(10,2))
)
WITH LOCATION = @my_external_stage/customers/
FILE_FORMAT = my_csv_format
PATTERN = '.*[.]csv';

De eerste instructie definieert een bestandsformaatspecificatie die Snowflake vertelt hoe externe CSV-bestanden te parsen, inclusief de scheidingsteken, headerafhandeling en weergaven van NULL-waarden.

De tweede instructie maakt een stage-object dat een verbinding legt met externe cloudopslag (in dit geval S3) met de opgegeven inloggegevens. Deze stage fungeert als referentiepunt voor toegang tot de externe databestanden.

De derde instructie maakt de externe tabel zelf, met kolomdefinities met AS-clausules om de ruwe tekenreeksdata uit de CSV expliciet te casten naar de juiste Snowflake-datatypen. De WITH LOCATION-clausule wijst naar het specifieke pad binnen de stage waar de bestanden zich bevinden.

De parameter PATTERN filtert met behulp van regex welke bestanden moeten worden opgenomen, zodat alleen CSV-bestanden worden verwerkt.

Vereisten om deze query voor het aanmaken van een externe tabel uit te voeren:

1. Toegang tot een Snowflake-account met rechten om:

  • Bestandsformaten te maken
  • Stages te maken
  • Externe tabellen te maken

2. Geldige AWS-inloggegevens (AWS_KEY_ID en AWS_SECRET_KEY) met rechten om:

  • Uit de S3-bucket te lezen
  • Objecten in de bucket te lijstten

3. Eisen aan brondata:

  • CSV-bestanden opgeslagen in een S3-bucket
  • Bestanden volgen een consistent formaat met vier kolommen
  • Kolomdata komt overeen met gespecificeerde typen:
  • customer_id als string
  • purchase_date als date
  • product_id als string
  • amount als decimal

4. Netwerkconnectiviteit:

  • Netwerktoegang tot AWS S3
  • Juiste security group- en firewallinstellingen

5. Compute-resources:

  • Actief warehouse met voldoende rekenkracht
  • Voldoende gebruikerscredits/-quota

Voorbeeld 4: Een dynamische tabel maken

Dit voorbeeld maakt een dynamische tabel die een actuele samenvatting van verkoopdata bijhoudt:

-- Create a dynamic table for real-time sales analytics
CREATE OR REPLACE DYNAMIC TABLE daily_sales_summary
TARGET_LAG = '20 minutes'
WAREHOUSE = 'COMPUTE_WH'
AS
SELECT
   DATE_TRUNC('day', sale_timestamp) as sale_date,
   product_category,
   SUM(sale_amount) as total_sales,
   COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
GROUP BY 1, 2;

De parameter TARGET_LAG van '20 minutes' definieert de maximaal toegestane vertraging tussen updates in de brontabel en het moment waarop die wijzigingen in de dynamische tabel zichtbaar worden. Dit borgt de actualiteit binnen dat tijdsvenster.

De parameter WAREHOUSE specificeert welke compute-resources (in dit geval COMPUTE_WH) periodiek worden gebruikt om de dynamische tabel te verversen. Dit warehouse moet voldoende capaciteit hebben om de verversingen aan te kunnen.

De dynamische tabel werkt zijn inhoud automatisch bij wanneer de onderliggende tabel sales_transactions verandert, zonder handmatige tussenkomst. Dit biedt mogelijkheden voor near-realtime analytics.

Door vooraf geaggregeerde dagelijkse verkoopsamenvattingen per productcategorie bij te houden, maakt de dynamische tabel snellere query's mogelijk dan wanneer je deze statistieken on demand uit de ruwe transactiedata zou berekenen. Dit verbetert de queryprestaties voor rapportage- en analytics-doeleinden.

Elk van deze voorbeelden laat verschillende scenario's voor tabelcreatie zien die je in praktijktoepassingen kunt tegenkomen. Pas kolomnamen, datatypes en andere parameters altijd aan jouw specifieke behoeften aan.

Best practices voor het maken van tabellen in Snowflake

Laten we enkele best practices doornemen die je kunt volgen bij het maken van tabellen in Snowflake om onderhoudbaarheid, prestaties en datakwaliteit te waarborgen.

1. Naamgevingsconventies

Gebruik altijd duidelijke, consistente namen voor je tabellen en kolommen:

-- Good naming examples
CREATE TABLE customer_orders (
   order_id INTEGER,
   customer_email VARCHAR,
   order_date DATE
);

-- Bad naming examples
CREATE TABLE Orders123 (
   ID INTEGER,
   email VARCHAR,
   dt DATE
);

Tips voor naamgeving:

  • Gebruik kleine letters en underscores (snake_case)
  • Vermijd spaties en speciale tekens
  • Maak namen beschrijvend maar niet te lang
  • Gebruik enkelvoud voor tabelnamen (customer in plaats van customers)
  • Voeg prefixen toe voor verschillende omgevingen (dev_, test_, prod_)

2. Kolomdatatypen

Kies het juiste datatype om opslag te besparen en prestaties te verbeteren:

-- Good data type choices
CREATE TABLE products (
   product_id INTEGER,
   price DECIMAL(10,2),    -- For money values
   name VARCHAR(100),      -- Set a reasonable limit
   description TEXT,       -- For very long text
   is_active BOOLEAN      -- Instead of VARCHAR or INTEGER
);

Veelgebruikte datatypen:

  • NUMBER/INTEGER: Voor gehele getallen
  • DECIMAL/NUMERIC: Voor precieze decimale getallen (vooral geld)
  • VARCHAR: Voor tekst met een bekende maximumlengte
  • TEXT: Voor tekst met onbeperkte lengte
  • TIMESTAMP_NTZ: Voor datum en tijd (zonder tijdzone)
  • BOOLEAN: Voor waar/onwaar-waarden

3. Clustering keys gebruiken

Voeg clustering keys toe om queryprestaties te verbeteren:

CREATE TABLE sales (
   sale_date DATE,
   store_id INTEGER,
   product_id INTEGER,
   amount DECIMAL(10,2)
)
CLUSTER BY (sale_date, store_id);

Wanneer clustering gebruiken:

  • Voor grote tabellen (meer dan 1 miljoen rijen)
  • Op kolommen waarop je vaak filtert of joinet
  • Meestal datumkolommen plus 1–2 andere kolommen
  • Cluster niet op kolommen met te veel unieke waarden

4. Tabelconstraints toevoegen

Gebruik constraints om je data schoon te houden:

CREATE TABLE users (
   user_id INTEGER PRIMARY KEY,  -- Ensures unique IDs
   email VARCHAR(255) UNIQUE,    -- No duplicate emails
   username VARCHAR(50) NOT NULL, -- Must have a value
   age INTEGER CHECK (age >= 18) -- Must be 18 or older
);

Belangrijke constraints:

  • PRIMARY KEY: Voor unieke identifiers
  • FOREIGN KEY: Voor het koppelen van tabellen
  • NOT NULL: Voor verplichte velden
  • UNIQUE: Voor velden die geen duplicaten mogen hebben
  • CHECK: Voor eenvoudige datavalidatie

5. Veelgemaakte fouten om te vermijden

Doe dit niet:

-- Bad practice: No primary key
CREATE TABLE orders (
   date VARCHAR,           -- Wrong data type for dates
   amount VARCHAR(10),     -- Wrong data type for numbers
   status text            -- Inconsistent case with other columns
);

Doe dit in plaats daarvan:

-- Good practice
CREATE TABLE orders (
   order_id INTEGER PRIMARY KEY,
   order_date DATE,
   amount DECIMAL(10,2),
   status VARCHAR(20)
);

De verbeterde versie borgt dataintegriteit met een primary key, gebruikt de juiste datatypen voor datums en getallen om efficiënt te kunnen filteren en rekenen, en houdt kolomdefinities consistent voor betere leesbaarheid en compatibiliteit.

6. Prestatie-tips

Het optimaliseren van tabelprestaties in Snowflake kan de querysnelheid aanzienlijk verbeteren en opslagkosten verlagen. Volg deze best practices om je tabellen efficiënt en schaalbaar te houden.

  • Maak kleinere tabellen in plaats van één enorme tabel
  • Voeg kolombeschrijvingen toe met COMMENT
  • Stel automatische regels voor dataclean-up in
  • Test je tabelontwerp met echte data
  • Monitor tabelgebruik en stel bij waar nodig

7. Beveiligingsbest practices

Goede beveiligingsmaatregelen zijn essentieel om gevoelige data te beschermen en toegang te beheersen. Implementeer deze best practices om je Snowflake-omgeving te beveiligen tegen ongeautoriseerde toegang en datalekken.

  • Stel altijd de juiste toegangsrechten in
  • Gebruik row-level security waar nodig
  • Versleutel gevoelige kolommen
  • Houd bij wie waartoe toegang heeft
  • Evalueer toegangspatronen regelmatig

Onthoud: een goed ontworpen tabel maakt je werk later makkelijker. Neem de tijd om je tabelstructuur te plannen voordat je deze maakt!

Conclusie

In deze tutorial hebben we de basis behandeld van het maken van tabellen in Snowflake, inclusief:

  • Verschillende typen tabellen (permanent, tijdelijk, extern en dynamisch)
  • Stapsgewijze voorbeelden voor elk type
  • Best practices voor tabelontwerp en -beheer
  • Veelvoorkomende valkuilen om te vermijden

Deze kennis vormt de basis voor het bouwen van efficiënte en schaalbare datasolutions in Snowflake.

Volgende stappen

Wil je je Snowflake-expertise verdiepen? Bekijk dan deze waardevolle bronnen:

1. Interactieve cursussen:

2. Uitgebreide tutorials:

3. Carrièrebronnen:

Vergeet niet: de beste manier om te leren is door te doen. Begin met tabellen maken, experimenteer met verschillende typen en bouw echte projecten. Als je uitdagingen tegenkomt, raadpleeg dan deze bronnen en blijf nieuwe functies van Snowflake verkennen.

Snowflake Create Table FAQs

Wat zijn de verschillende typen tabellen in Snowflake?

Snowflake ondersteunt vier hoofdtypen tabellen: permanente tabellen voor langdurige opslag, tijdelijke tabellen voor sessiespecifiek gebruik, externe tabellen voor het bevragen van externe databronnen en dynamische tabellen voor het automatisch bijhouden van queryresultaten.

Hoe maak ik een basistabel in Snowflake?

Gebruik het commando CREATE TABLE met je gewenste schema. Bijvoorbeeld: "CREATE TABLE customers (customer_id INTEGER PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50))". Voeg passende datatypen en constraints toe.

Wat is een dynamische tabel in Snowflake en wanneer gebruik ik die?

Dynamische tabellen houden automatisch up-to-date resultaten van een query bij, vergelijkbaar met gematerialiseerde views. Ze zijn ideaal voor realtime dashboards, geautomatiseerde datatransformaties en het bijhouden van geaggregeerde data die vaak moet worden bijgewerkt.

Wat zijn de best practices voor het benoemen van tabellen in Snowflake?

Gebruik kleine letters met underscores (snake_case), vermijd spaties en speciale tekens, maak namen beschrijvend maar beknopt, gebruik enkelvoud voor tabelnamen en overweeg omgevingsprefixen (dev_, test_, prod_).

Hoe kan ik de tabelprestaties in Snowflake verbeteren?

Verbeter prestaties door geschikte clustering keys te gebruiken, de juiste datatypen te kiezen, de juiste constraints in te stellen, kleinere gefocuste tabellen te maken in plaats van grote, en het gebruikspatroon van tabellen regelmatig te monitoren.

Bexruz (Bex) Tuychiev

Auteur

Bexruz (Bex) Tuychiev

Ik ben een contentmaker op het gebied van data science met meer dan 2 jaar ervaring en een van de grootste achterbannen op Medium. Ik schrijf graag uitgebreide artikelen over AI en ML met een vleugje sarcastische stijl, want je moet toch íets doen om ze wat minder saai te maken. Ik heb meer dan 130 artikelen en een DataCamp-cursus gemaakt, en er is nog een nieuwe in de maak. Mijn content is door meer dan 5 miljoen paar ogen gezien, van wie 20k volgers werden op zowel Medium als LinkedIn. 

Onderwerpen

Gerelateerd