Snowflake instellen in Airbyte
Door Kris Winnubst op 19 May, 2023

Fivetran en Airbyte zijn twee tools die gegevens extraheren, laden en mogelijk transformeren (het ELT-proces). De gegevens kunnen van veel verschillende plaatsen komen, bijvoorbeeld van een Snowflake account. In deze blog duiken we in de setup van Airbyte om een Snowflake verbinding te maken.
Airbyte
In Airbyte stelt de gebruiker de bron en bestemming van de datapijplijn onafhankelijk van elkaar in. Vervolgens kan hiertussen de verbinding worden gemaakt. Om te laten zien hoe je beide kanten in Airbyte instelt, zal ik een verbinding maken tussen twee schema's die in een database staan die is gespecificeerd voor Airbyte van mijn Snowflake instance. Merk op dat Airbyte zelf waarschuwt tijdens de setup dat de Snowflake connector een alpha release is, en volgens hun documentatie nog niet klaar is voor productiegebruik. Desalniettemin wil ik je laten zien hoe je een Snowflake verbinding opzet, en een aantal van de problemen die Airbyte mogelijk nog moet oplossen voor de algemene beschikbaarheid.
Snowflake setup
Begin de Snowflake setup met het aanmaken van een database genaamd airbyte. Naast de standaard schema's heb ik twee andere schema's gemaakt. In het bronschema komt een tabel die Airbyte uitpakt en vervolgens in het dest schema laadt. Voordat we Airbyte configureren en uitvoeren, is het dest schema leeg.
airy_table in het bronschemaGelijkaardig aan de Fivetran setup, maken we aangewezen objecten voor Airbyte die toegang hebben tot de juiste informatie. Normaal gesproken zouden de schema's op twee verschillende accounts staan, dus ik ga het maken van deze objecten als zodanig behandelen. Welke objecten moeten we maken?
- Maak twee magazijnen aan (bijv.
airbyte_source_when). De instellingen voor deze magazijnen zijn aan jou en het project. Bekijk deze blog als je meer wilt weten over de mogelijkheden om op of uit te schalen met je Snowflake warehouses;airbyte_target_wh - Maak twee rollen aan (bijv.
enairbyte_source_role). We zullen later de juiste rechten toekennen aan deze rollen;airbyte_target_role - Maak twee gebruikers aan (bv.
enairbyte_source_user). Ken de rollen toe aan hun respectievelijke gebruikers. Ik raad aan omairbyte_target_userdefault_roleendefault_warehousein te stellen voor beide gebruikers, zodat Airbyte onmiddellijk verbinding maakt met Snowflake met de juiste gegevens. - [OPTIONEEL, maar aanbevolen] Maak een resource monitor die de warehouses in de gaten houdt. Doe dit zeker als u niet zeker weet hoe u Airbyte moet instellen of als u twijfels hebt over de complexiteit van de gegevens.
airbyte bron instellen
Om een Snowflake-bron in Airbyte in te stellen, gebruiken we het object dat we zojuist hebben gemaakt. Vul de airbyte_source_user, airbyte_source_role en airbyte_source_wh in. Net als in Fivetran moet je ervoor zorgen dat je alle identifiers in hoofdletters opgeeft, want we zijn meerdere keren tegen problemen aangelopen omdat sommige tests in Airbyte hoofdlettergevoelig zijn. Er is een optioneel veld om het schema in te vullen. Als je wilt dat de bron verbinding maakt met dataobjecten van meerdere schema's, laat je dit veld leeg. In mijn demo geef ik het schema wel op omdat ik alleen de tabel uit dat ene schema nodig heb. Vul tot slot je eigen wachtwoord en accountnaam in.
Voordat we de setup daadwerkelijk gaan testen, moeten we de juiste privileges toekennen. We hebben een set privileges getest voor de Fivetran setup. We hebben dezelfde privileges toegekend als in de onderstaande code.
GRANT USAGE ON WAREHOUSE airbyte_source_wh TO ROLE airbyte_source_role; GRANT USAGE ON DATABASE airbyte TO ROLE airbyte_source_role; GRANT USAGE ON SCHEMA airbyte.source TO ROLE airbyte_source_role; GRANT SELECT ON TABLE airbyte.source.airy_table TO ROLE airbyte_source_role;
De bron is succesvol ingesteld!
airbyte bestemming instellen
Voor het instellen in Airbyte van de Snowflake-bestemming gebruiken we weer de specifiek aangemaakte gebruiker, rol en magazijn zoals in de afbeelding hieronder. In tegenstelling tot Fivetran vraagt Airbyte je om het schema op te geven. Dit is ook de reden dat we het dest schema hebben gemaakt.
Airbyte vraagt je om een 'Data Staging Method' in te stellen. De opties inclusief de beschrijving die Airbyte geeft in de informatie knop:
- [Aanbevolen] Interne Staging
Aanbevolen voor grote productieworkloads voor betere snelheid en schaalbaarheid. - AWS S3 Staging
Aanbevolen voor grote productieworkloads voor betere snelheid en schaalbaarheid. - Google cloudopslag
Aanbevolen voor grote productieworkloads voor betere snelheid en schaalbaarheid.
Ah, de beschrijving is hetzelfde voor alle opties. Ik vind het dus moeilijk om te begrijpen welke optie ik moet gebruiken. Gelukkig is er een aanbevolen optie, dus die kunnen we proberen voor deze demo.
Privileges voor bestemming
Nu alle opties zijn ingevuld, moeten we weer de juiste privileges toekennen. Aangezien we weten met welk schema de destination verbinding wil maken, geven we de usage en create table privilege op voor het dest schema. Zie de onderstaande code voor alle toekenningen die we denken nodig te hebben.
GRANT USAGE ON WAREHOUSE airbyte_dest_wh TO ROLE airbyte_dest_role; GRANT USAGE ON DATABASE airbyte TO ROLE airbyte_dest_role; GRANT USAGE, CREATE TABLE ON SCHEMA airbyte.dest TO ROLE airbyte_dest_role;
Als we de destination testen met deze privileges, falen we in de controle! Airbyte heeft meer privileges nodig om op schema dest te kunnen werken. Als we de Snowflake documentatie over schema privileges raadplegen, zien we dat we het schema ook kunnen wijzigen of monitoren. Verder kunnen we het privilege geven om een hele set objecten aan te maken. In eerste instantie proberen we het modify privilege te geven. Fivetran had dit privilege ook nodig op de database en het staat de rol niet veel extra toe, alleen om het DESCRIBE commando te gebruiken. Dit is niet genoeg voor Airbyte. Na een combinatie van andere privileges te hebben geprobeerd, werd ik het een beetje zat en besloot ik ALLES toe te kennen op het schema. In het algemeen probeert Nimbus Intelligence dit te vermijden omdat het moeilijker is om een duidelijk overzicht te houden wie wat mag doen in de Snowflake instantie. Dat zou het moeten doen, toch?
Gelukkig wel!
AIrbyte-verbinding
De Airbyte-verbinding is eenvoudig op te zetten. Kies de bestaande bron en bestemming die we in de vorige stappen hebben gemaakt. Er zijn nog enkele configuraties die je kunt instellen.
- Gegevensresidentie
Kies waar de gegevens voor deze verbinding worden verwerkt. Afhankelijk van je netwerkconfiguratie moet je misschien IP-adressen toevoegen aan je allowlist. - Replicatiefrequentie
Stel in hoe vaak gegevens naar de bestemming moeten worden gesynchroniseerd. Als je Airbyte net uitprobeert, stel dit dan in op 'Handmatig' om veel synchronisaties van je gegevens te voorkomen. - Bestemmingsnaamruimte / Voorvoegsel bestemmingsstroom
Als je wilt dat Airbyte de gegevens in een ander schema plaatst dan je in de bestemming hebt ingesteld, kun je dit doen door deze parameters te wijzigen. - Niet-brekende schema updates gedetecteerd
Vergelijkbaar met de wijzigingen die je toestaat aan Fivetran, vraagt Airbyte je wat te doen met schema updates. Airbyte geeft slechts twee opties; 'ignore' of 'disable connection'. Deze zijn een beetje beperkt, en ik ben benieuwd wat 'ignore' eigenlijk inhoudt. Dit wordt misschien een onderwerp voor een blog in de toekomst. Voor nu laat ik dit op negeren staan omdat ik geen schema-updates verwacht in mijn demo-omgeving.
Zodra alles is ingesteld, starten we de synchronisatie.
Conclusie
Na de eerste synchronisatie heeft onze databaseomgeving in Snowflake twee nieuwe tabellen in het dest schema. Als we het commando uitvoeren om te zien hoe de airy tabel eruit ziet, krijgen we het volgende resultaat. Airbyte maakt ook een andere tabel airbyte_raw_airy_table. Die tabel heeft in wezen dezelfde gegevens als de andere tabel, behalve dat de gegevens in JSON-formaat worden gegeven. Wanneer je de Airbyte verbinding opzet, is er een optie om de normalisatie te kiezen. Airbyte doet de interne pijplijn met 'ruwe gegevens' in JSON-formaat. Ik heb gecontroleerd of Airbyte de gegevens in de bestemming in genormaliseerde tabelgegevens maakt. Bekijk de Airbyte documentatie voor meer informatie over deze transformatie.
airy_table in bestemmingsschema
airbyte_raw_airy_table in dest schemaHoewel het grootste deel van de installatie rechttoe rechtaan was, heb ik wat problemen met het toekennen van rechten voor Airbyte. In de Airbyte documentatie raden ze aan om de Airbyte rollen EIGENDOM te geven van de bron- en doelobjecten. Ik wil nooit het eigendom geven aan een externe rol van mijn Snowflake-instantie. Niet alleen zouden ze nu alle rechten op het object hebben, ze kunnen ook rechten toekennen aan andere rollen! In deze demo hebben we een manier gevonden om het geven van eigenaarschap te omzeilen. Desondanks is dit echt iets waar Airbyte aan zou moeten werken, omdat geen enkele productie-gebruikssituatie zich comfortabel zou voelen met deze privilege-setup.
Mogelijk ook interessant
Gerelateerde blogs

Werken met AWS in VS Code
Wachtwoord protectie

