Ga naar hoofdinhoud

Snowflake-gegevensinname: een uitgebreide gids

Volg deze gids om gegevensinname in Snowflake te begrijpen. Deze tutorial is perfect voor wie nieuw is met Snowflake of snel de functionaliteit wil herhalen.
· 12 min lezen

Verken met AI

Snowflake is een cloud-native dataplatform dat veel wordt gebruikt door dataprofessionals vanwege de schaalbaarheid, performance en eenvoud. Het is ideaal voor alles van analytics tot data science. Om het maximale uit de tool te halen, is het echter essentieel om Snowflake-gegevensinname onder de knie te krijgen. Als je nieuw bent op het platform, raad ik aan te beginnen met deze Snowflake-tutorial voor beginners om je eerst vertrouwd te maken met de architectuur.

Efficiënte en goed ontwikkelde gegevensinnamepijplijnen zijn cruciaal om data beschikbaar en betrouwbaar te maken voor downstream-usecases. Of je nu werkt met periodieke batchupdates of realtime datastreams, de juiste inname­methode en -tools kiezen heeft direct invloed op de performance en het onderhoud van je datapijplijn.

Voordat we de details induiken, is het belangrijk om een paar kernconcepten rond datastromen te begrijpen:

  • Batch- vs. realtime-inname: Batchprocessen laden data op geplande intervallen en bieden in één keer grotere brokken data. Realtime-inname zorgt ervoor dat data vrijwel direct beschikbaar is zodra die wordt gegenereerd, als een live stream. Je kunt meer leren in dit artikel over Batch- versus streamverwerking.
  • Gestructureerde vs. semi-gestructureerde data: Gestructureerde data past netjes in rijen en kolommen, terwijl semi-gestructureerde data (zoals JSON of Avro) flexibeler moet worden behandeld en tags of markeringen gebruikt om de inname te ondersteunen.

Wat is gegevensinname in Snowflake?

Gegevensinname verwijst naar het proces waarbij data van verschillende bronnen naar een database wordt verplaatst voor opslag, verwerking en analyse. Of je data nu afkomstig is uit cloudopslag, databases, applicaties of eventstreams, inname vormt de eerste stap in de datalevenscyclus binnen Snowflake.

Snowflake’s unieke architectuur scheidt compute en storage. Dit maakt het proces van data inladen eenvoudiger zonder de analytische performance te beïnvloeden. Inname kan gericht zijn op interne stages (binnen Snowflake) of externe stages (zoals S3 of Azure Blob Storage), afhankelijk van de databron en usecase. Voor meer inzicht gaat dit artikel dieper in op de Snowflake-architectuur.

Belangrijke overwegingen bij inname

Houd bij het ontwerpen van een innamepijplijn rekening met de vier V’s van data:

  • Volume: Hoeveel data neem je in?
  • Snelheid: Hoe vaak komt de data binnen?
  • Variëteit: Welke formaten zijn betrokken (CSV, JSON, Parquet)?
  • Betrouwbaarheid: Hoe betrouwbaar is de data, en welk niveau van opschoning is nodig?

Deze vier componenten zijn belangrijk om te overwegen. Volume en snelheid vereisen dat we rekening houden met de beschikbare bandbreedte voor onze pijplijn en het vermogen om data te verwerken. Variëteit en betrouwbaarheid vragen om robuuste en flexibele pijplijnen die in staat zijn om data te controleren op kwaliteit terwijl deze stroomt.

Belangrijke overwegingen bij inname

Methoden voor gegevensinname in Snowflake

Laten we enkele inname­methoden bespreken die we in Snowflake tot onze beschikking hebben. Sommige methoden gebruiken een commando zoals COPY INTO, Snowpipe of Snowpipe Streaming.

Batchinname met COPY INTO

De meest fundamentele innamemethode van Snowflake is het COPY INTO-commando. COPY INTO laadt data uit bestanden die zijn opgeslagen in externe stages in Snowflake-tabellen. Het is ideaal voor het bulk-laden van historische data of reguliere batchupdates.

Data laden vanuit cloudopslag

Je kunt data laden vanuit Amazon S3, Azure Blob Storage of Google Cloud Storage door een externe stage te maken die die clouddiensten met Snowflake verbindt. Met het juiste bestandspad en de juiste inloggegevens leest en verwerkt Snowflake de bestanden efficiënt.

Omgaan met verschillende dataformaten

COPY INTO ondersteunt meerdere formaten: CSV, JSON, Avro, ORC en Parquet. Bij het maken van de connector zijn er diverse opties voor het bestandstype. De lijst is behoorlijk uitgebreid, maar vaak zijn er instellingen om dingen te definiëren zoals het datumnotatieformaat, delimiters (komma’s of andere waarden), encodering, nulopties, enzovoort. Ik raad ten zeerste aan de documentatie op de Snowflake-website te lezen voor alle details.

Foutenafhandeling en monitoring

Je kunt de instelling ON_ERROR configureren om probleem­rijen over te slaan, de laadactie af te breken of fouten te loggen. Combineer dit met VALIDATION_MODE om fouten te volgen en te retourneren. Je kunt metadat-tabellen gebruiken zoals LOAD_HISTORY, die ook het aantal fouten bij een laadactie bijhouden.

Continue inname met Snowpipe

Snowpipe maakt continue inname mogelijk door automatisch nieuwe bestanden te detecteren en te laden zodra ze in een aangewezen stage verschijnen. Deze functionaliteit is ingebouwd in het Snowflake-platform. Het biedt automatische bestandsintegratie, eventgestuurde triggers en monitoring.

Bestandsinname automatiseren

Snowpipe kan worden geconfigureerd om bestanden automatisch in te nemen via integratie met cloudopslagmeldingen, waardoor handmatige uitvoering minder nodig is. Zo heeft Amazon S3 eventmeldingen die gebruikers attenderen op wijzigingen in een specifieke bucket. 

Snowpipe kan worden gekoppeld aan een gebruiker die deze meldingen ziet. Wanneer die gebruiker een eventmelding ontvangt, wordt Snowpipe geactiveerd om het innametraject te starten.

pipeline waarop databestanden naar de externe S3-stage van Snowflake stromen, met een SQS-queue voor inname die de Snowpipe COPY INTO-functie triggert

Diagram van geautomatiseerde gegevensinname (Snowflake-documentatie)

Monitoring en beheer

Snowflake biedt verschillende tools voor monitoring en foutbeheer. De metadatatafel PIPE_USAGE_HISTORY stelt gebruikers in staat om laadgeschiedenis te bekijken, zoals bytes en bestanden die zijn ingenomen. De tabel VALIDATE_PIPE_LOAD geeft informatie over opgetreden fouten. 

Binnen Snowpipe is er de ON_ERROR-instelling, waarmee we bestanden kunnen overslaan en meldingen kunnen versturen die ons op de fouten wijzen.

Realtime streaming met Snowpipe Streaming

Snowpipe Streaming is Snowflake’s nieuwste methode voor het innemen van realtime streamingdata met sub-seconde latentie. In tegenstelling tot Snowpipe, dat op bestanden reageert, neemt Snowpipe Streaming data rij-voor-rij in via een API. Deze methoden vullen elkaar aan en bieden flexibiliteit en efficiëntie.

De Snowflake Ingest SDK gebruiken

Met de Snowflake Ingest SDK kunnen ontwikkelaars Java- of Scala-applicaties schrijven die data rechtstreeks naar Snowflake pushen via een geheugenresident queue. Deze applicaties zijn ontworpen om rijniveau-data te accepteren van onder meer Apache Kafka-topics en andere streamingconnectors.

Usecases en voordelen

Ideaal voor telemetrie-, clickstream- of IoT-data: Snowpipe Streaming zorgt voor vrijwel realtime beschikbaarheid van data met minimale opslagoverhead en hoge doorvoer. Deze innamemethode is perfect wanneer je gegevens met hoge snelheid bijna realtime nodig hebt.

Tools voor gegevensinname in Snowflake

Voor het innemen van data in Snowflake met tools als Snowpipe en Snowpipe Streaming heb je enkele hulpmiddelen nodig om datapijplijnen goed te verbinden. Een belangrijke tool is Kafka, dat vaak wordt gebruikt als communicatiemiddel tussen databronnen en Snowflake. Alternatief zijn er derde­partijtools zoals Fivetran en Matillion die ook ETL naar Snowflake kunnen beheren.

Snowflake-connector voor Kafka

Snowflake biedt een Kafka-connector die van Kafka-topics leest en berichten direct naar Snowflake-opslag schrijft. Data wordt gepubliceerd naar Kafka en met Snowpipe of Snowpipe Streaming kan Snowflake deze gepubliceerde data oppikken en naar interne opslag overzetten.  Dit is een uiterst flexibele manier om data over te dragen. Ik raad deze cursus Introduction to Apache Kafka aan, die de kracht en schaalbaarheid van Kafka behandelt.

Kafka-configuratie en best practices

Je moet een Kafka Connect-worker configureren en parameters instellen zoals topicnamen, buffer­groottes en Snowflake-credentials om de integratie goed op te zetten. 

Met deze configuraties kunnen we ook datatypes en metadata definiëren die we willen bijhouden. De twee belangrijkste manieren om deze verbindingen te definiëren zijn via Confluent (een door derden beheerde versie van Apache Kafka) of handmatig met de open-source Apache Kafka JDK. 

Ongeacht je keuze, volg deze best practices:

  • Gebruik partitionering en op keys gebaseerde ordering om de volgorde van events te behouden.
  • Optimaliseer flush-intervallen voor een goede balans tussen latentie en doorvoer.

Voorbeeld van het gebruik van Kafka met de Snowflake SDK voor streamingdata (Snowflake-documentatie)

ETL-tools van derden

Naast Kafka zijn er derde­partij-ETL-platforms zoals Fivetran, Matillion en Talend die beheerde ETL/ELT-oplossingen bieden voor het innemen en transformeren van data uit honderden bronnen naar Snowflake. Deze platforms bieden vaak low-code en vereenvoudigde SaaS-oplossingen voor databeheer, maar het kiezen van deze platforms heeft ook nadelen.

Voor- en nadelen van ETL-tools van derden

Er zijn enkele aspecten die zorgvuldige afweging vereisen bij het gebruik van ETL-tools van derden, zoals kosten en flexibiliteit. Hoewel het zeker vereenvoudigde manieren zijn om data in Snowflake in te nemen, kunnen er beperkingen zijn die ze uiteindelijk uitdagender maken in gebruik.

  • Voordelen: No-code setup, connectors voor veelgebruikte SaaS-tools, ingebouwde transformaties, eenvoudig en makkelijk te integreren
  • Nadelen: Abonnementskosten, beperkte controle voor maatwerklogica en vaak vendor lock-in zonder gemakkelijke manier om te migreren

Met deze beperkingen in gedachten, houd bij het kiezen van de juiste tool rekening met:

  • De technische expertise van je team
  • Frequentie- en latentievereisten
  • Ondersteuning voor bronsystemen
  • Budget- en licentiebeperkingen

Best practices voor Snowflake-gegevensinname

Hoewel het ontwerpen van een pijplijn veel werk is, zijn er algemene concepten en best practices die je kunt volgen om het jezelf makkelijker te maken. Deze zijn gericht op het verbeteren van efficiëntie en het minimaliseren van kosten.

Optimaliseer voor performance en kosten

Minimaliseer de grootte van je bestanden om opslagkosten te verlagen met bestandsformaten zoals gzip of Parquet. Bovendien is het bij het overzetten van data vaak beter om te kiezen voor minder, grotere bestanden in plaats van veel kleine bestanden voor je copy-proces. Enkele grote bestanden hebben minder netwerkoverhead dan het proberen over te zetten van meerdere kleine bestanden. Plan tot slot grote batchjobs buiten piekuren in als compute- en netwerkkosten een zorg zijn.

Zorg er ten slotte voor dat je schema-evolutie in je pijplijnen afhandelt. Sommige dataformaten zoals Parquet ondersteunen van nature schema-evolutie. Dit betekent dat wanneer het dataschema bij de bron wijzigt, dit geen invloed heeft op historische data en de voorwaartse/achterwaartse compatibiliteit van de data behouden blijft.

Zorg voor datakwaliteit en observability

Nog iets om te overwegen tijdens je gegevensinnamepijplijn is het borgen van datakwaliteit en observability. Een slimme manier is om de data eerst te stagen voordat je die integreert in je definitieve databaseopslag. Je kunt hashes en metadata controleren om datanauwkeurigheid en het ontbreken van corruptie te waarborgen. In plaats van gebruikers directe toegang tot de data zelf te geven, kan het bouwen van views die verschillende databronnen combineren bovendien een betere gebruikerservaring bieden.

Tot slot wil je de gezondheid van je datapijplijn voortdurend monitoren en loggen. Richt dashboards in met de metadataweergaven van Snowflake of externe observability-tools zoals DataDog of Monte Carlo om innamesucces, latentie en fouten te volgen. 

Hands-on tutorial: data in Snowflake innemen

Hier behandelen we enkele high-level voorbeelden van hoe je pijplijnen in Snowflake kunt opzetten. Let op: jouw exacte stappen kunnen afwijken, afhankelijk van hoe je data­beheerder je Snowflake-omgeving heeft geconfigureerd. Volg altijd de best practices van je organisatie! 

Vereisten

Eerst enkele vereisten. Je hebt een Snowflake-account nodig waarmee je de database kunt beheren. Veelvoorkomende toegangsrechten die je nodig hebt zijn onder meer de mogelijkheid om schema’s te maken. Ten tweede moet je ervoor zorgen dat de server waarop je zit toegang heeft tot de externe cloudopslagbucket of interne opslag waar je de data bewaart. Overleg daarover met je databasebeheerder.

Stap 1: Data laden met COPY INTO

Laten we een eenvoudig voorbeeld doornemen van het laden van een CSV-bestand in je Snowflake-database.

1. Data voorbereiden en uploaden Formatteer je bestanden (bijv. CSV) en upload ze naar je cloudopslagbucket.

2. Stage en bestandsformaat aanmaken

/* specify the file format */CREATE FILE FORMAT my_csv_format TYPE = 'CSV' 

/* this will help if there are double quotes or apostrophes in your data */

FIELD_OPTIONALLY_ENCLOSED_BY='"';

/* Stage the data using the credentials you have */

CREATE STAGE my_stage URL='s3://my-bucket/data/' CREDENTIALS=(AWS_KEY_ID='...' AWS_SECRET_KEY='...');

3. Voer COPY INTO uit en controleer

COPY INTO my_table FROM @my_stage FILE_FORMAT = (FORMAT_NAME = 'my_csv_format');SELECT * FROM my_table;

Stap 2: Inname automatiseren met Snowpipe

Een geautomatiseerde inname met Snowpipe opzetten kan behoorlijk eenvoudig zijn!

1. Snowpipe aanmaken

CREATE PIPE my_pipe 

AUTO_INGEST = TRUE

   AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'

	AS 

COPY INTO my_table 

FROM @my_stage

 FILE_FORMAT = (TYPE = ‘CSV’);

2. Cloudopslag-events configureren Stel S3-bucketmeldingen in om de pipe te triggeren via SNS/SQS. Voor meer details volg je deze gids over AWS SNS van Datacamp.

3. Inname monitoren 

Zorg dat je de metadatatafel SNOWPIPE_EXECUTION_HISTORY raadpleegt om pipe-activiteit te bekijken.

Stap 3: Data streamen met Snowpipe Streaming

Snowpipe Streaming opzetten kan behoorlijk intens zijn en is wat gedetailleerder dan we hier kunnen behandelen. Ik bespreek enkele basisstappen, maar raad vooral aan de voorbeelden te lezen in de Snowflake Streaming-documentatie over het bouwen van de client-SDK.

  1. SDK instellen: Installeer de Snowflake Ingest SDK in je Java- of Scala-applicatie. Configureer vervolgens de API-verbinding in een profile.json-bestand. De vereiste eigenschappen omvatten autorisatiegegevens, de URL voor Snowflake en de gebruiker. Hiermee kan de SDK verbinding maken met je Snowflake-server. Schrijf de rest van je Java-script om de binnenkomende data af te handelen, inclusief de methode insertRows.
  2. Data streamen met een voorbeeldapp: Push de data vanuit je Kafka-connector met de ClientSDK om je Snowflake-API aan te roepen.
  3. Monitoren en fouten afhandelen: Vang SDK-excepties af, probeer mislukte requests opnieuw en monitor innamemetrics met metadat-tabellen en dashboards. Zorg dat je API ontworpen is om fouten te stoppen en foutmeldingen te versturen.

Conclusie

Snowflake biedt een robuuste en flexibele reeks innamemethoden—van traditionele batchloads tot realtime streaming. Door de beschikbare tools en technieken te begrijpen, kunnen datateams pijplijnen ontwerpen die betrouwbaar, performant en kostenefficiënt zijn. Of je net begint of een oplossing op ondernemingsschaal optimaliseert: het beheersen van Snowflake-gegevensinname is een cruciale stap in het bouwen van een moderne datastack. Wil je meer leren over Snowflake, dan raad ik de volgende resources aan:

Snowflake-gegevensinname: veelgestelde vragen

Wat is het verschil tussen Snowpipe en Snowpipe Streaming?

Snowpipe neemt data in uit bestanden (meestal opgeslagen in cloudopslag) zodra ze landen, met eventgestuurde triggers. Snowpipe Streaming neemt data direct vanuit een applicatie realtime in, rij-voor-rij, via een SDK, met sub-seconde latentie.

Kan Snowflake schemawijzigingen in mijn binnenkomende data automatisch detecteren?

Niet automatisch. Je moet strategieën voor schema-evolutie handmatig implementeren of tools gebruiken die dit ondersteunen. Voor semi-gestructureerde data zoals JSON kun je variant-kolommen gebruiken om dynamische structuren op te vangen.

Hoe monitor ik of mijn gegevensinname correct werkt?

Snowflake biedt verschillende views, zoals LOAD_HISTORY, PIPE_USAGE_HISTORY en TASK_HISTORY, om innames, fouten en performance te volgen. Je kunt ook integreren met observability-tools voor alerts en dashboards.

Welke bestandsformaten ondersteunt Snowflake voor inname?

Snowflake ondersteunt CSV, JSON, Avro, ORC, Parquet en XML. Je definieert hoe het bestand moet worden geïnterpreteerd met een file format-object.

Kan ik data in Snowflake innemen uit andere bronnen dan cloudopslag of Kafka?

Ja. Je kunt data innemen met tools van derden (bijv. Fivetran, Matillion, Airbyte), de REST API van Snowflake, Snowpipe Streaming of aangepaste scripts met connectors of SDK’s.

Onderwerpen