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.
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.
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 bronschema
Gelijkaardig 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?
airbyte_source_wh en airbyte_target_wh). 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_source_role en airbyte_target_role). We zullen later de juiste rechten toekennen aan deze rollen;airbyte_source_user en airbyte_target_user). Ken de rollen toe aan hun respectievelijke gebruikers. Ik raad aan om default_role en default_warehouse in te stellen voor beide gebruikers, zodat Airbyte onmiddellijk verbinding maakt met Snowflake met de juiste gegevens.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!
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:
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.
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!
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.
Zodra alles is ingesteld, starten we de synchronisatie.
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 schema
Hoewel 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.