4 steg till insikter i realtid med Snowflake och Snowpipe

3 mars 2018

Strömma realtidsdata till Snowflake genom 4 enkla steg – häng med och testa själv

Snowflake har precis lanserat en förhandsversion av sin nya tjänst för hantering av realtidsdata, Snowpipe. Häng med på mina första tester av tjänsten, den är kanon och jag gillar den skarpt. Det här kommer göra livet lättare för alla er som vill ha realtidsdata flödande in i Snowflake så era analytiker och applikationer kan reagera ännu smartare och snabbare.

Snowpipe är återigen ett bevis på att det finns fördelar med molnet. Snowflake har skapat Snowpipe genom att bygga vidare på de generella tjänster som redan finns i Amazons molntjänst AWS. (En förklaring till de olika molntjänsterna hittas i slutet på artikeln.) Snowpipe kombinerar Amazons lagringstjänst S3 med en eventkö som heter Amazon SQS. Det ger en tjänst som i realtid kan konsumera data till Snowflake.

Snowpipe bygger på att den data som ska strömmas finns tillgänglig i S3. Till S3 kan data komma på en rad olika sätt, t.ex. genom att din webbapplikation strömmar alla klick via Kafka. När Snowpipe lanseras senare i vår i Europa kommer den med två olika alternativ för att initiera laddningar till Snowflake från S3.

Alternativ 1 – Enkelt och utan kod

Det första alternativet, som jag visar lite längre ned, bygger på att man ställer in Snowflake för att lyssna efter event. Detta kallas för S3 Notification och är ett event som triggas när förändringar sker på en viss S3-mapp/bucket. Detta är det enklaste alternativet då det egentligen inte kräver något kodande annat än SQL och lite konfiguration med grafiska gränssnitt. Denna lösning är också helt server-less då allt som händer i denna konfiguration inte behöver någon specifik server utan exekveras i Snowflake.

Alternativ 2 – fler möjligheter med hjälp av API:er

Det andra alternativet att hantera laddningar i Snowpipe bygger fortfarande på att data mellanlagras i S3. Men i detta fall kan de APIer som Snowpipe tillgängliggör användas för att styra hur och när dataladdningar triggas. Med dessa APIer kan t.ex. dataladdningar triggas genom att en Amazon Lambda-funktion initierar att en viss laddning ska ske. Man kan också tänka sig att de initieras av er egen applikation som kallar på Snowpipe.

Det var lite om hur Snowpipe hänger ihop med andra tjänster i molnet. Men – som vanligt tycker jag bästa sättet att visa nya funktioner är genom konkreta exempel så nedan ska jag visa hur enkelt det är att komma igång med Snowpipe!

Dags för exempel – häng med

Tanken är att vi ska sätta upp ett flöde som automatiskt läser in JSON-filer från en mapp i S3 så fort de läggs i mappen. I vårt fall bygger vi vidare på det Citibikes exempel vi brukar använda i våra Snowflake-demos. Det räcker med fyra steg, sen är vi redo:

STEG 1 – Skapa måltabellen i Snowflake

Det första steget är att skapa en måltabell som vi kallar station_info. Eftersom vi ska läsa in JSON-data kommer tabellen endast ha en kolumn av typen variant.

CREATE OR REPLACE TABLE station_info ( src variant);

STEG 2 – Skapa en stage för att peka ut en S3 Bucket

Nästa steg är att skapa en så kallad Stage vilket är en paketering av de uppgifter som behövs för att Snowflake ska kunna veta om just din S3-mapp/bucket.

CREATE OR REPLACE STAGE ”CITIBIKES”.”PUBLIC”.”CITIBIKESS3″ url=’s3://sparkssnowflake/citibikes/’
credentials=(aws_key_id=’YYYYYYYYYYYY’ aws_secret_key=’XXXXXXX’) file_format = citicsvformat;

STEG 3 – Skapa en Pipe

Nu är vi redo att skapa vår pipe, vilket är den entitet som hanterar och definierar vad som ska hända när vi får en notifikation om att något nytt kommit in till vår S3-mapp. Lägg märke till auto_ingest=true som berättar för Snowflake att vår pipe ska hanteras enligt första alternativet ovan. Alltså alternativ 1 där vi grafiskt konfigurerar hur flödet startas och inte via API:t som nämns i alternativ 2. Resterande del av vår pipe är ett vanligt copy kommando som använder vår definierade stage och läser in en json-fil.

CREATE OR REPLACE PIPE “PUBLIC”.”STATIONPIPE” auto_ingest=true as

COPY INTO station_info
FROM @CITIBIKESS3/*.json
file_format = (type = json);

STEG 4 – Koppla ihop vår Pipe med S3 Notification

Nu är vi redo att koppla ihop vår pipe med de notifikationer som kommer när filer skapas på vår S3-mapp.

Först behöver vi få tag på den adress, kallas ARN, som S3 ska skicka notifikationerna till för att berätta för Snowpipe att något har hänt. Det görs genom att i Snowflake köra kommandot

SHOW STAGES;

I resultatsetet vi nu får kopierar vi det värde som visas i Notification channel för just den stage vi vill använda. I vårt fall vill vi använda den stage som vi skapat och kallat för CITIBIKESS3. Detta är adressen, ARN, som Snowflake lyssnar på för notifikationer och vi vill att S3 ska skicka notifikationer dit.

När vi nu har denna ARN-adress kan vi konfigurera S3 att skicka notifikationer till den. Det görs genom att gå in i AWS kontrollpanel och sin S3-buckets egenskaper

Sedan går man in på Events och väljer add notification.

Här fyller man i ett namn, väljer ObjectCreated som event. Sedan fyller jag i ett prefix, som t.ex. stations/ för att bara reagera på en undermapp. Till sist fyller vi i den adress, ARN, som vi fick tag på när vi ovan körde kommandot SHOW STAGES i Snowflake

Klart, svårare än så är det inte!

Nu har vi kopplat ihop S3 med vår Pipe i Snowflake så att S3 skickar notifikationer så fort något händer och startar en viss pipe.

Dags att testa vår allra första Snowpipe

Börja med att verifiera att vi inte har någon data

Sedan lägger vi upp en fil i vår S3-area som till en början är tom,

Efter att vi nu laddat upp en fil till vår S3

Hoppa nu tillbaks till Snowflake. Under den sekund det tar att skifta fönster till Snowflake och ställa frågan igen kan vi se att vår fil och dess innehåll importerats i tabellen station_info.

Vad tycks? Jag tycker det är både enkelt och väldigt kraftfullt för de fall man behöver jobba med realtidsdata. Vill du förstå ännu mer om Snowpipe och så rekommenderar jag Snowflakes hjälpartikel nedan. Bra att veta är att Snowpipe just nu bara är lanserad i de amerikanska datacentren men är redo för Europa inom kort.

https://docs.snowflake.net/manuals/user-guide/data-load-snowpipe.html

Testa GRATIS! – Vill du testa Snowflake gratis så kan du registrera dig och få 400$ att testa med

Mer om varför Sparks och Snowflake gillar varandra så mycket

En liten snabbguide till de molntjänster vi nämnt i artikeln

  • Amazon Web Services – AWS
  • Amazon S3 – Amazons lagringstjänst för filer
  • Amazon S3 bucket – kan ses som en hårddisk i Amazon S3 som filer kan laddas upp till och rättigheter, prestanda och pris kan väljas.
  • Amazon Firehose – tjänst för att fånga events och skriva till någon persistent tjänst så som S3
  • Amazon SQS – tjänst för att hantera köer av events.
  • Amazon Lambda – tjänst för att köra funktioner och kod i Amazons moln utan att behöva skapa upp någon server.
  • Kafka – event-streaming tjänst/mjukvara skapad av Apache