I en verden hvor data kontinuerlig utvikles, er det essensielt å forstå hvordan man håndterer ulike typer datatyper for å oppnå effektiv databehandling og analyse. Blant de mest utfordrende typene data er semi-strukturerte data, som er forskjellige fra tradisjonell strukturerte data, spesielt på grunn av deres fleksibilitet og uforutsigbarhet i formatering. I denne sammenhengen er det viktig å forstå hvordan man laster og bruker slike data i Snowflake, et kraftig verktøy for datahåndtering i skyen.
Semi-strukturerte data er data som ikke følger de faste reglene for strukturerte data, men som inneholder markører eller tagger som identifiserer distinkte enheter innenfor dataene. Denne typen data kan inneholde hierarkiske strukturer og variabelt antall attributter. De vanligste eksemplene på semi-strukturerte data inkluderer JSON, XML og Avro, som kan inneholde flere nivåer av nestede informasjoner, noe som skiller dem betydelig fra flat, tabellbasert data.
Når det gjelder Snowflake, håndteres semi-strukturerte data gjennom en VARIANT-kolonne. Dette gir fleksibilitet, ettersom det ikke er behov for å definere et rigid skjema på forhånd. Data kan kontinuerlig utvikles, og nye attributter kan legges til uten å forstyrre eksisterende datamodell. Dette skiller seg fra strukturerte data, som krever et forhåndsdefinert skjema. Når data settes inn i en VARIANT-kolonne i Snowflake, behandles de som et semi-strukturert dokument som lagres og refereres av Snowflake’s metadata-motor for rask SQL-spørring. Dette muliggjør effektiv lagring og tilgang til data, uavhengig av deres formatering.
En utfordring som kan oppstå ved håndtering av semi-strukturerte data er håndtering av "null"-verdier. I Snowflake refererer ikke "null"-verdier til de vanlige SQL NULL-verdiene, men til en spesifikk indikasjon på fravær av data. For å unngå problemer ved lasting, anbefales det å bruke en innstilling som kalles STRIP_NULL_VALUES, som automatisk fjerner disse nullverdiene under lasting, dersom de ikke har noen spesiell betydning.
Et annet viktig aspekt ved datalasting i Snowflake er staging. Både interne og eksterne staging-lokasjoner i Snowflake kan bruke prefikser for å organisere data etter forskjellige kriterier som geografisk plassering eller dato for dataoppdatering. Dette gjør det mulig å håndtere store datamengder effektivt ved å bruke parallelle operasjoner for å laste deler av dataene. For eksempel, ved å lagre data i en strukturert stier som "NA/Mexico/Quintana_Roo/Cancun/2024/01/01/", kan dataene kopieres og lastes inn i Snowflake raskt med én kommando, samtidig som man kan spesifisere spesifikke filmønstre for å laste ut ønsket datadeling.
Staging og partitionering er også viktige faktorer for å opprettholde organiseringen av dataene dine. Når data lagres i f.eks. S3-bøtter, kan du opprette en struktur som benytter ulike nivåer som kontinenter, land eller til og med byer for å organisere dataene på en måte som gir god oversikt og rask tilgang. Ved å bruke detaljerte stier som "s3://bucket_name/brand/2024/07/01/11/" kan du dra nytte av parallelle operasjoner og raskere dataoverføring til Snowflake.
Når data lastes inn i Snowflake, er det viktig å forstå hvordan COPY-kommandoen fungerer. COPY støtter flere alternativer for datalasting, for eksempel å laste filer basert på interne stier, eksterne stier eller spesifikke filmønstre. Spesifisering av filer som skal lastes inn, for eksempel med opp til 1000 filer per COPY-kommando, kan gi raskere og mer effektiv datalasting. For optimal ytelse anbefales det å bruke filmønstre og partisjoner som gjør at bare relevante data kopieres inn i tabellene på en gang.
Når du håndterer semi-strukturerte data, er det også viktig å være oppmerksom på mulige dataformater som kan oppstå fra forskjellige kilder. Snowflake gir fleksibilitet til å bruke forskjellige filformater som JSON, Avro, og Parquet, og gjør det mulig å hente ut spesifikke dataelementer med enkle SQL-spørringer. Dette gir et betydelig handlingsrom for videre behandling og analyse av dataene, noe som er kritisk for selskaper som håndterer store mengder dynamisk innhold.
Dataorganisering og effektiv lasting er essensielt for enhver datalagringsløsning. Med Snowflake får du kraftige verktøy for å håndtere både strukturerte og semi-strukturerte data, og kan bruke deres spesifikasjoner for optimal ytelse og skalerbarhet. Ved å bruke detaljerte stier, organisering av filsystemer, og riktige innstillinger for håndtering av NULL-verdier, kan du sikre at dataene dine er både tilgjengelige og korrekte for videre analyser.
Hvordan bygge interaktive applikasjoner med Streamlit og Snowflake
Streamlit og Snowflake sammen gir en kraftig plattform for å lage interaktive dataapplikasjoner som kan forenkle databehandling, visualisering og rapportering. Dette kan være spesielt nyttig for virksomheter som ønsker å automatisere datarelaterte oppgaver eller skape tilpassede løsninger for datavisualisering og utforskning. Ved å kombinere Snowflakes robuste dataplattform med Streamlits enkle brukergrensesnitt, kan utviklere lage applikasjoner som effektivt integrerer dataanalyse og visualisering på en brukervennlig måte.
Streamlit tilbyr en rekke funksjoner som gjør det til et ideelt verktøy for rask utvikling av datadrevne applikasjoner. En av de største fordelene er Streamlits minimalistiske syntaks og deklarative tilnærming, som gjør det lett å bruke, selv for dem uten erfaring med webutvikling. Dette, kombinert med muligheten for rask prototyping, der utviklere kan se endringer i sanntid, gjør Streamlit til et kraftig verktøy for å iterere raskt på ideer og bygge dynamiske brukergrensesnitt.
En annen viktig funksjon ved Streamlit er dets interaktive widgets, som gir utviklere mulighet til å lage engasjerende applikasjoner med glidebrytere, knapper, nedtrekkslister og mye mer. Streamlit integreres sømløst med populære Python-biblioteker for datavitenskap, som Pandas, NumPy, Scikit-learn og TensorFlow, som betyr at eksisterende kode kan gjenbrukes og verktøy kan benyttes uten problemer. Når det gjelder distribusjon, tilbyr Streamlit enkle alternativer som gjør det lett å dele applikasjoner med kolleger eller kunder.
Hvordan Streamlit integreres med Snowflake
En av de største fordelene ved å bruke Streamlit i Snowflake er den enkle integrasjonen med Snowflake-miljøet, som ikke krever at data eller kode flyttes utenfor plattformen. Denne integrasjonen muliggjør utvikling av applikasjoner som direkte kommuniserer med Snowflake-databasene, og gir dermed flere fordeler:
-
Forenklet infrastrukturhåndtering: Snowflake håndterer både databehandling og lagring for Streamlit-applikasjoner, noe som fjerner behovet for ekstern systemadministrasjon.
-
Sikker datatilgang: Streamlit-applikasjoner benytter Snowflakes rollebaserte tilgangskontroll for å sikre at bare autoriserte brukere har tilgang til dataene.
-
Effektiv arbeidsflyt: Ved å bruke Snowflakes lagringssystemer og virtuelle lager, kan Streamlit-applikasjoner kjøre raskt og effektivt.
-
Integrasjon med Snowflake-funksjoner: Streamlit kan brukes sammen med andre Snowflake-funksjoner, som Snowpark, lagrede prosedyrer og brukerdefinerte funksjoner, for å skape enda mer kraftfulle applikasjoner.
-
Rask utvikling og testing: Gjennom Snowflakes Snowsight-verktøy kan utviklere se endringer i sanntid, noe som muliggjør rask prototyping og testing av applikasjoner i Snowflake-miljøet.
Det er viktig å merke seg at kjøring av Streamlit-applikasjoner krever at det tilknyttede virtuelle lageret forblir aktivt så lenge WebSocket-tilkoblingen er åpen. Dette kan føre til økte kostnader, og det anbefales derfor at utviklere stopper virtuelle lagre eller lukker applikasjonens webside for å unngå unødvendige kostnader.
Bygge en enkel Streamlit-applikasjon
En god måte å komme i gang på er å bygge en enkel Streamlit-applikasjon som viser innholdet i en Snowflake-tabell. Denne applikasjonen kan vise dataene i et interaktivt grensesnitt, slik at brukeren kan utforske informasjonen på en visuell måte.
-
Først setter du opp et eget databaseområde for Streamlit-applikasjoner i Snowflake for å holde utviklingen organisert. Dette kan gjøres med kommandoene for å opprette en ny database og gi nødvendige tillatelser til de rette rollene.
-
Deretter bruker du Streamlit til å lage et Python-skript som henter data fra Snowflake og viser det i et enkelt grensesnitt. Her er et eksempel på hvordan man kan hente og vise innholdet fra tabellen "NATION" i en Pandas DataFrame.
-
Når applikasjonen kjøres, vil den vise tabellinnholdet på en enkel og effektiv måte, og gjøre det lettere for brukeren å forstå og analysere dataene.
Bygge interaktive applikasjoner med Streamlit
Streamlit gjør det også enkelt å bygge interaktive applikasjoner som kan engasjere brukeren med filtre, diagrammer og dynamiske tabeller. Ved å bruke komponenter som st.multiselect og st.bar_chart, kan du bygge applikasjoner som lar brukeren filtrere data og vise oppdaterte visualiseringer på en intuitiv måte.
En enkel interaktiv app kan for eksempel vise antallet nasjoner og kunder per region, med muligheten for brukeren å legge til eller fjerne regioner og nasjoner fra filtrene. Ved å bruke Python-kode som denne:
Denne applikasjonen gir brukeren muligheten til å velge regioner og umiddelbart se antall kunder per valgt region, visualisert i en bar chart.
Streamlit gjør det mulig for både tekniske og ikke-tekniske brukere å skape kraftige datadrevne applikasjoner med minimal innsats, og kombinasjonen med Snowflake gir utviklere de verktøyene de trenger for å håndtere store datamengder på en effektiv måte.
Hvordan sette opp og bruke dbt med Snowflake for utvikling av datamodeller
For å kunne bruke våre modeller, må du først sørge for at dbt er koblet til Snowflake. Dette krever at du har en korrekt dbt-profil konfigurert, hvor variabelen SNOWFLAKE_ACCOUNT er nødvendig. Du må eksportere denne variabelen før du kan fortsette:
Etter at du har gjort dette, kan du teste tilkoblingen til Snowflake ved å kjøre kommandoen dbt debug. Hvis alt er riktig konfigurert, skal den returnere meldingen "All checks passed!". Dette bekrefter at du er klar til å begynne utviklingen av dbt-modeller.
En av fordelene med dbt er at det tilbyr et lokalt utviklingsmiljø, som gjør det mulig å skille produksjonsmiljøet fra utviklingsmiljøet. Dette lar deg teste og bygge modeller i utviklingsskjemaet uten risiko for å ødelegge produksjonsdataene. Miljøene konfigureres i filen profiles.yml.
Når du har bekreftet at tilkoblingen fungerer, bør du kjøre kommandoen dbt deps for å installere alle dbt-pakkene som er definert i packages.yml. Det finnes mange nyttige pakker tilgjengelig på dbt Hub (https://hub.getdbt.com), som kan forenkle arbeidet ditt. Typiske dbt-prosjekter består av flere lag. Du kan for eksempel bruke tilnærmingen med Medallion-arkitektur, som deler opp dataene i "bronze", "silver" og "gold" nivåer. I vårt tilfelle har vi definert to lag i Snowflake-datalageret: stg som staging-lag og business som lag for fakta-tabeller. Dette er kun en praktisk oppdeling, og du kan organisere filene på den måten som passer deg best.
Når det gjelder materialisering, har vi valgt å bruke +materialized: view i konfigurasjonen, som betyr at Snowflake oppretter visninger i stedet for tabeller. Det er også mulig å bruke tabeller, men i produksjon bruker vi gjerne inkrementelle modeller for å unngå dyre fullstendige dataoppdateringer.
For å kjøre alle modellene og tilhørende datatester, kan du bruke dbt build-kommandoen. Alternativt kan du kjøre bare modellene med dbt run eller bare testene med dbt test. Du kan også spesifisere å kjøre en spesifikk modell ved å bruke dbt run --select.
I korte trekk er dbt et SQL-rammeverk som lar deg konvertere forretningslogikk til SQL-modeller med avhengigheter, datatester og dokumentasjon. dbt gjør ikke selve beregningsarbeidet – det genererer SQL-kommandoer som blir kjørt i Snowflake. Du kan alltid gjennomgå SQL-kommandoene som dbt genererer i mappen target eller loggfilene i logs/dbt.log. Resultatet av dbt run skal være opprettelsen av visninger i databasen.
Neste steg er å koble Metabase BI-verktøyet til Snowflake. Metabase er et populært BI-verktøy som gir deg muligheten til å skrive SQL-spørringer direkte i nettleseren og lage visuelle elementer. Dette skiller seg fra verktøy som Tableau, hvor du kan dra og slippe dimensjoner og mål for å lage dashbord. I Metabase må du skrive SQL-spørringer for hver tabell eller visuell enhet, og deretter kombinere dem i et dashbord.
Metabase kan installeres i en container og kjøres på plattformer som AWS Elastic Container Service eller Azure Kubernetes Service. Det er et utmerket valg for små bedrifter eller som et komplementært BI-verktøy for løsninger som Tableau eller Looker. Du kan installere Metabase ved å bruke Docker med følgende kommandoer:
Når Metabase er installert, kan du gå til http://localhost:3000 for å begynne å bruke det. Du kan registrere deg med e-postadressen din og deretter koble Metabase til Snowflake-datalageret med de samme bruker- og passordinnstillingene som du brukte for dbt.
For å bygge dashbord i Metabase, må du skrive SQL-spørringer for hver visuell komponent og deretter kombinere disse komponentene til et dashbord. Du kan også utforske eksempler på dashbord i Example collection på Metabase, og administrere databaser fra administrasjonskonsollen. Metabase gir også et API som gjør det mulig å programmere utførelsen av rapporter og sende disse rapportene via e-post eller andre meldingsplattformer.
For å avslutte utviklingsprosessen på en profesjonell måte, bør du følge beste praksis for programvareutvikling som pre-commit, CI/CD, containerisering og enhetstester. Når du jobber med dbt, er det vanlig å lagre koden i et Git-versjonssystem. Før du begynner utviklingen, bør du lage en utviklingsgren i Git, for eksempel:
Deretter kan du gjøre endringer eller legge til ny kode. Når du er ferdig, bør du bruke pre-commit-verktøyet for å automatisk sjekke koden før den deles med teamet. Pre-commit-konfigurasjonen for dbt og Snowflake er tilgjengelig i prosjektets rotkatalog og dbt-prosjektets /.pre-commit-config.yaml.
Kommandoene for pre-commit inkluderer:
Og for å kjøre pre-commit-manuelt:
pre-commit-verktøyet vil bidra til å opprettholde en jevn og konsekvent kodebase, noe som er viktig for langvarig vedlikehold og samarbeid på prosjektet.
Hvordan optimere datalagring og spørreytelse i Snowflake
Effektiv datalagring og behandling er sentrale faktorer for å oppnå høy ytelse og redusere kostnader i Snowflake. Gjennom funksjoner som mikropartisjonering og clustering, samt riktige strategier for spørring og lagring, kan man betydelig forbedre både lese- og skriveoperasjoner. I denne sammenhengen er det viktig å forstå hvordan disse funksjonene fungerer, og hvordan de kan tilpasses ulike brukstilfeller for optimal ytelse.
Mikropartisjonering er en av de mest fundamentale egenskapene ved Snowflake. Når data lastes inn i en tabell, deles den automatisk opp i mikropartisjoner – sammenhengende lagringsenheter på mellom 50 MB og 500 MB, som inneholder komprimert data. Hver mikropartisjon lagrer detaljert kolonnemetadata, som inkluderer min/max-verdier, null-teller og mer. Snowflake benytter denne metadataen for å hoppe over irrelevante partisjoner under spørringskjøring, noe som kalles partisjonsbeskjæring. Denne prosessen skjer automatisk og krever ikke manuell konfigurasjon.
For store tabeller der spørringsytelse er kritisk, kan clustering nøkler defineres for å påvirke hvordan data fysisk organiseres på mikropartisjoner. Dette kan være særlig nyttig i tidserie-, hendelses- eller store faktatabeller, hvor filtrering på bestemte områder eller undergrupper er vanlig. Det anbefales å velge kolonner som ofte brukes i filtrering, JOIN eller GROUP BY-operasjoner som clustering nøkler. Eksempler på dette kan være kolonner som transaksjonsdato eller region-id. Det er derimot viktig å unngå å bruke kolonner med høy kardinalitet, som UUID-er eller unike ID-er, da de kan føre til ineffektiv eller ubrukelig clustering.
For å vurdere hvor godt en tabell er clustered, kan man bruke funksjonen SELECT SYSTEM$CLUSTERING_INFORMATION('tabellnavn'). Denne gir verdifull informasjon om dybden på clustering, som indikerer hvordan godt dataene samsvarer med de definerte clustering-nøklene. En høy dybde kan signalisere at clustering har blitt degradert over tid på grunn av nye data eller oppdateringer.
En annen viktig teknikk er å sortere dataene etter clustering-nøkler før de lastes inn i Snowflake. Dette kan forbedre spørringsytelsen ved å sikre at relaterte poster lagres sammen i de samme mikropartisjonene. For eksempel vil sortering av salgsdata etter region og bestillingsdato bidra til at spørringer som filtrerer på disse kolonnene, trenger å skanne færre mikropartisjoner, og dermed returnere resultater raskere. Dette komplementerer clustering ved å forbedre den fysiske layouten av dataene før de lagres.
Snowflake tilbyr også automatisk clustering, som kontinuerlig administrerer partisjoneringen når nye data legges til. Når dette er aktivert, vil Snowflake automatisk reclustere tabellen basert på de definerte clustering-nøklene, uten at manuell inngripen er nødvendig. Dette kan imidlertid medføre ekstra kostnader, så det bør vurderes nøye om det er nødvendig for ditt arbeidsbelastningsmønster.
I tillegg til clustering er det flere beste praksiser for partisjonering av store datasett. For tidseriedata kan det være lurt å bruke kolonner som dato, datetime eller timestamp som clustering-nøkler for å optimalisere spørringer som omfatter tidsintervall (for eksempel måned eller år). For fler-dimensional filtrering kan man kombinere flere kolonner i clustering-nøklene, som for eksempel region, produkt-ID og transaksjonsdato. Det er også viktig å overvåke både ytelse og clustering-dybde regelmessig, spesielt for store eller raskt endrede tabeller.
Når det gjelder lagring, er det viktig å kun lagre dataene som er nødvendige og bruke Snowflake sin komprimering for å minimere lagringskostnadene. Funksjonen TIME TRAVEL gir deg muligheten til å få tilgang til historiske data i en definert periode (opptil 90 dager avhengig av Snowflake-utgaven). Dette kan være nyttig for å rette opp i utilsiktede slettinger eller oppdateringer. For eksempel, dersom en tabell er slettet ved et uhell, kan man hente den tilbake ved å bruke en kommando som SELECT * FROM sales AT (TIMESTAMP => '2025-01-01 10:00:00');. Fail-safe-funksjonen gir et ekstra sikkerhetsnett, hvor data kan gjenopprettes etter at TIME TRAVEL-perioden er utløpt, men denne tilgangen krever Snowflake-støtte og medfører ekstra kostnader.
For å optimalisere spørringsytelsen er det avgjørende å redusere kjøre-tiden og sikre effektiv ressursutnyttelse. Snowflake tilbyr flere verktøy og teknikker for å strømlinjeforme spørringer. Et av de viktigste verktøyene er Query Profile, som lar deg analysere utførelsesplaner og identifisere flaskehalser som store tabellskanninger eller ineffektive JOIN-operasjoner. Ved å optimalisere rekkefølgen på JOIN-operasjoner, for eksempel ved å behandle mindre datasett først, kan man redusere kjøretid og forbedre spørringsytelsen. Det er også viktig å unngå SELECT *-spørringer, da dette kan føre til unødvendig databehandling og høyere kostnader.
En annen effektiv teknikk for spørringsoptimalisering er materialiserte visninger. Disse kan brukes til å forhåndsberegne og lagre resultatene av hyppige spørringer, noe som gjør at påfølgende tilgang til dataene skjer raskere. Ved å bruke materialiserte visninger kan man redusere kjøretiden på spørringer som utføres regelmessig, og dermed oppnå en betydelig ytelsesforbedring.
Bruken av caching kan også ha stor innvirkning på spørringsytelsen. Snowflake cacher data på flere nivåer, inkludert resultat-cache, spørre-cache og lagrings-cache. Ved å utnytte caching kan man redusere tiden det tar å hente data som har blitt spurt tidligere, noe som fører til raskere spørringsresponser.
Det er avgjørende å forstå hvordan data organiseres, hvordan spørringer utføres og hvordan man kan bruke Snowflakes verktøy for å oppnå optimal ytelse. Korrekt implementering av teknikker som mikropartisjonering, clustering, og materialiserte visninger kan ikke bare redusere kostnader, men også øke systemets responsivitet og pålitelighet.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский