Zephyrnet-logo

Creëer een modern dataplatform met behulp van de Data Build Tool (dbt) in de AWS Cloud | Amazon-webservices

Datum:

Het bouwen van een dataplatform omvat verschillende benaderingen, elk met zijn unieke mix van complexiteiten en oplossingen. Een modern dataplatform omvat het onderhouden van gegevens over meerdere lagen, gericht op diverse platformmogelijkheden zoals hoge prestaties, ontwikkelingsgemak, kosteneffectiviteit en DataOps-functies zoals CI/CD, lineage en unit-tests. In dit bericht verdiepen we ons in een casestudy voor een gebruiksscenario in de detailhandel, waarbij we onderzoeken hoe de Hulpmiddel voor gegevensopbouw (dbt) werd effectief gebruikt binnen een AWS-omgeving om een ​​krachtig, efficiënt en modern dataplatform te bouwen.

dbt is een open-source opdrachtregeltool waarmee data-analisten en engineers gegevens in hun magazijnen effectiever kunnen transformeren. Het doet dit door teams te helpen bij het afhandelen van de T in ETL-processen (extract, transform en load). Het stelt gebruikers in staat datatransformatiecode te schrijven, uit te voeren en de uitvoer te testen, allemaal binnen het raamwerk dat het biedt. Met dbt kunt u SQL-select-instructies schrijven en deze select-instructies vervolgens omzetten in tabellen of weergaven Amazon roodverschuiving.

Gebruik geval

De Enterprise Data Analytics-groep van een grote juwelierszaak begon in 2021 aan hun cloudreis met AWS. Als onderdeel van hun cloudmoderniseringsinitiatief probeerden ze hun bestaande dataplatform te migreren en te moderniseren. Het doel was om hun analytische capaciteiten te versterken en de toegankelijkheid van data te verbeteren en tegelijkertijd een snelle time-to-market en hoge datakwaliteit te garanderen, allemaal met lage totale eigendomskosten (TCO) en geen behoefte aan extra tools of licenties.

dbt kwam naar voren als de perfecte keuze voor deze transformatie binnen hun bestaande AWS-omgeving. Deze populaire open source-tool voor datawarehouse-transformaties heeft om verschillende redenen de overhand gekregen op andere ETL-tools. Het op SQL gebaseerde raamwerk van dbt maakte het eenvoudig om te leren en zorgde ervoor dat het bestaande ontwikkelingsteam snel kon opschalen. De tool bood ook wenselijke kant-en-klare functies zoals data-afstamming, documentatie en testen van eenheden. Een cruciaal voordeel van dbt ten opzichte van opgeslagen procedures was de scheiding tussen code en gegevens. In tegenstelling tot opgeslagen procedures slaat dbt de code niet op in de database zelf. Deze scheiding vereenvoudigt het gegevensbeheer verder en verbetert de algehele prestaties van het systeem.

Laten we de architectuur verkennen en leren hoe u deze use case kunt bouwen met behulp van AWS Cloud-services.

Overzicht oplossingen

De volgende architectuur demonstreert de datapijplijn die op dbt is gebouwd om het Redshift datawarehouse ETL-proces te beheren.

        Figuur 1: Modern dataplatform dat gebruik maakt van AWS Data Services en dbt

Deze architectuur bestaat uit de volgende belangrijke services en tools:

  • Amazon roodverschuiving werd gebruikt als datawarehouse voor het dataplatform, waar enorme hoeveelheden gestructureerde en semi-gestructureerde gegevens werden opgeslagen en verwerkt
  • Amazon QuickSight diende als business intelligence (BI)-tool, waardoor het zakelijke team analytische rapporten en dashboards kon maken voor verschillende zakelijke inzichten
  • AWS-databasemigratieservice (AWS DMS) werd gebruikt om replicatie van change data capture (CDC) uit te voeren vanuit verschillende transactionele brondatabases
  • AWS lijm werd aan het werk gezet door bestanden van de SFTP-locatie naar de Amazon eenvoudige opslagservice (Amazon S3) landingsbak en vervolgens naar het Redshift-landingsschema
  • AWS Lambda functioneerde als een clientprogramma, riep API's van derden aan en laadde de gegevens in Redshift-tabellen
  • AWS Fargate, een serverloze containerbeheerservice, werd gebruikt om de consumentenapplicatie te implementeren voor bronwachtrijen en onderwerpen
  • Door Amazon beheerde workflows voor Apache Airflow (Amazon MWAA) werd gebruikt om verschillende taken van dbt-pijpleidingen te orkestreren
  • dbt, een open-sourcetool, werd gebruikt om op SQL gebaseerde datapijplijnen te schrijven voor gegevens die zijn opgeslagen in Amazon Redshift, waardoor complexe transformaties mogelijk werden gemaakt en de mogelijkheden voor gegevensmodellering werden verbeterd

Laten we elke component eens nader bekijken en zien hoe deze samenwerken in de algehele architectuur om ruwe gegevens om te zetten in inzichtelijke informatie.

Data bronnen

Als onderdeel van dit dataplatform verzamelen we gegevens uit diverse en gevarieerde gegevensbronnen, waaronder:

  • Transactionele databases – Dit zijn actieve databases waarin realtime gegevens van verschillende applicaties worden opgeslagen. De gegevens omvatten doorgaans alle transacties en bewerkingen waarmee het bedrijf zich bezighoudt.
  • Wachtrijen en onderwerpen – Wachtrijen en onderwerpen komen uit verschillende integratietoepassingen die in realtime gegevens genereren. Ze vertegenwoordigen een onmiddellijke stroom van informatie die kan worden gebruikt voor realtime analyses en besluitvorming.
  • API's van derden – Deze bieden analyse- en enquêtegegevens met betrekking tot e-commercewebsites. Dit kunnen details zijn zoals verkeersstatistieken, gebruikersgedrag, conversiepercentages, feedback van klanten en meer.
  • Platte bestanden – Andere systemen leveren gegevens in de vorm van platte bestanden van verschillende formaten. Deze bestanden, opgeslagen op een SFTP-locatie, kunnen records, rapporten, logboeken of andere soorten onbewerkte gegevens bevatten die verder kunnen worden verwerkt en geanalyseerd.

Gegevensopname

Gegevens uit verschillende bronnen zijn gegroepeerd in twee hoofdcategorieën: realtime opname en batchopname.

Voor realtime opname worden de volgende services gebruikt:

  • AWS DMS - AWS DMS wordt gebruikt om CDC-replicatiepijplijnen te creëren vanuit OLTP-databases (Online Transaction Processing). De gegevens worden bijna realtime in Amazon Redshift geladen om ervoor te zorgen dat de meest recente informatie beschikbaar is voor analyse. Je kan ook gebruiken Amazon Aurora zero-ETL-integratie met Amazon Redshift om gegevens rechtstreeks vanuit OLTP-databases in Amazon Redshift op te nemen.
  • fargate -Fargate wordt gebruikt om Java-consumententoepassingen te implementeren die gegevens uit brononderwerpen en wachtrijen in realtime opnemen. Dit realtime dataverbruik kan het bedrijf helpen onmiddellijke en op data gebaseerde beslissingen te nemen. Je kan ook gebruiken Amazon Redshift streaming-opname om gegevens op te nemen van streaming-engines zoals Amazon Kinesis-gegevensstromen or Amazon Managed Streaming voor Apache Kafka (Amazon MSK) naar Amazon Redshift.

Batchopname maakt gebruik van de volgende services:

  • Lambda – Lambda wordt gebruikt als client voor het aanroepen van API's van derden en het laden van de resulterende gegevens in Redshift-tabellen. Dit proces is gepland om dagelijks te worden uitgevoerd, waardoor een consistente batch nieuwe gegevens voor analyse wordt gegarandeerd.
  • AWS lijm – AWS Glue wordt gebruikt om bestanden in Amazon Redshift te laden via het S3-datameer. U kunt ook functies gebruiken zoals automatisch kopiëren van Amazon S3 (functie onder preview) om gegevens van Amazon S3 naar Amazon Redshift op te nemen. De focus van dit bericht ligt echter meer op de gegevensverwerking binnen Amazon Redshift, dan op het laadproces van gegevens. Gegevensopname, zowel realtime als batchgewijs, vormt de basis van elke effectieve gegevensanalyse, waardoor organisaties informatie uit diverse bronnen kunnen verzamelen en deze kunnen gebruiken voor inzichtelijke besluitvorming.

Datawarehousing met behulp van Amazon Redshift

In Amazon Redshift hebben we drie schema's opgesteld, die elk als een andere laag in de data-architectuur dienen:

  • Landingslaag – Dit is waar alle gegevens die door onze services worden opgenomen, in eerste instantie terechtkomen. Het zijn ruwe, onverwerkte gegevens rechtstreeks uit de bron.
  • Gecertificeerde dataset (CDS)-laag – Dit is de volgende fase, waarin gegevens uit de landingslaag worden opgeschoond, genormaliseerd en samengevoegd. De opgeschoonde en verwerkte gegevens worden opgeslagen in dit gecertificeerde datasetschema. Het dient als een betrouwbare, georganiseerde bron voor downstream data-analyse.
  • Gebruiksvriendelijke datamart-laag (UFDM) – Deze laatste laag gebruikt gegevens uit de CDS-laag om datamart-tabellen te maken. Deze zijn specifiek afgestemd op de ondersteuning van BI-rapporten en dashboards volgens de zakelijke vereisten. Het doel van deze laag is om de gegevens te presenteren op een manier die het nuttigst en toegankelijk is voor eindgebruikers.

Deze gelaagde benadering van databeheer maakt een efficiënte en georganiseerde gegevensverwerking mogelijk, wat leidt tot nauwkeurigere en betekenisvollere inzichten.

Gegevenspijplijn

dbt, een open-source tool, kan in de AWS-omgeving worden geïnstalleerd en worden ingesteld om met Amazon MWAA te werken. We slaan onze code op in een S3-bucket en orkestreren deze met behulp van Airflow's Directed Acyclic Graphs (DAG's). Deze opzet vergemakkelijkt onze datatransformatieprocessen in Amazon Redshift nadat de gegevens zijn opgenomen in het landingsschema.

Om de modulariteit te behouden en specifieke domeinen te kunnen behandelen, creëren we individuele dbt-projecten. De aard van de datarapportage – realtime of batchgewijs – beïnvloedt hoe we onze dbt-materialisatie definiëren. Voor realtime rapportage definiëren we materialisatie als een weergave, waarbij gegevens in het landingsschema worden geladen met behulp van AWS DMS vanuit database-updates of van onderwerp- of wachtrijconsumenten. Voor batchpijplijnen definiëren we materialisatie als een tabel, waardoor gegevens uit verschillende soorten bronnen kunnen worden geladen.

In sommige gevallen hebben we datapijplijnen moeten bouwen die zich uitstrekken van het bronsysteem tot aan de UFDM-laag. Dit kan worden bereikt met behulp van Airflow DAG's, die we in de volgende sectie verder bespreken.

Ter afsluiting is het vermeldenswaard dat we een dbt-webpagina implementeren met behulp van een Lambda-functie en een URL voor deze functie inschakelen. Deze webpagina fungeert als een knooppunt voor documentatie en data-afstamming, waardoor de transparantie en het begrip van onze dataprocessen verder worden versterkt.

ETL-taakorkestratie

In onze datapijplijn volgen we deze stappen voor taakorkestratie:

  1. Zet een nieuwe Amazon MWAA-omgeving op. Deze omgeving fungeert als de centrale hub voor het orkestreren van onze datapijplijnen.
  2. Installeer dbt in de nieuwe Airflow-omgeving door de volgende afhankelijkheid toe te voegen aan uw requirements.txt:
    boto3>=1.17.54
    botocore>=1.20.54
    dbt-redshift>=1.3.0
    dbt-postgres>=1.3.0

  3. Ontwikkel DAG's met specifieke taken die een beroep doen op dbt-opdrachten om de noodzakelijke transformaties uit te voeren. Deze stap omvat het structureren van onze workflows op een manier die de afhankelijkheden tussen taken vastlegt en ervoor zorgt dat taken in de juiste volgorde worden uitgevoerd. De volgende code laat zien hoe u de taken in de DAG definieert:
    #imports..
    ... #Define the begin_exec tasks
    start = DummyOperator( task_id='begin_exec', dag=dag ) #Define 'verify_dbt_install' task to check if dbt was installed properly
    verify = BashOperator( task_id='verify_dbt_install', dag=dag, bash_command=''' echo "checking dbt version...."; /usr/local/airflow/.local/bin/dbt --version; if [ $? -gt 0 ]; then pip install dbt-redshift>=1.3.0; else echo "dbt already installed"; fi python --version; echo "listing dbt..."; rm -r /tmp/dbt_project_home; cp -R /usr/local/airflow/dags/dbt_project_home /tmp; ls /tmp/dbt_project_home/<your_dbt_project_name>; '''
    ) #Define ‘landing_to_cds_task’ task to copy from landing schema to cds schema
    landing_to_cds_task = BashOperator( task_id='landing_to_cds_task', dag = dag, bash_command=''' /usr/local/airflow/.local/bin/dbt run --project-dir /tmp/dbt_project_home/<your_dbt_project_name> --profiles-dir /tmp/dbt_project_home/ --select <model_folder_name>.*; '''
    ) ...
    #Define data quality check task to test a package, generate docs and copy the docs to required S3 location
    data_quality_check = BashOperator( task_id='data_quality_check', dag=dag, bash_command=''' /usr/local/airflow/.local/bin/dbt test –-select your_package.* /usr/local/airflow/.local/bin/dbt docs generate --project-dir /tmp/dbt_project_home/<your_project_name> --profiles-dir /tmp/dbt_project_home/; aws s3 cp /tmp/dbt_project_home/<your_project_name>/target/ s3://<your_S3_bucket_name>/airflow_home/dags/dbt_project_home/<your_project_name>/target --recursive; '''
    )

  4. Creëer DAG's die zich uitsluitend richten op dbt-transformatie. Deze DAG's verzorgen het transformatieproces binnen onze datapijplijnen en benutten de kracht van dbt om ruwe data om te zetten in waardevolle inzichten.
    #This is how we define the flow start >> verify >> landing_to_cds_task >> cds_to_ufdm_task >> data_quality_check >> end_exec

De volgende afbeelding laat zien hoe deze workflow er uit zou zien in de Airflow-gebruikersinterface.

  1. Maak DAG's met AWS Glue voor inname. Deze DAG's gebruiken AWS Glue voor gegevensopnametaken. AWS Glue is een volledig beheerde ETL-service waarmee u eenvoudig gegevens kunt voorbereiden en laden voor analyse. We creëren DAG's die AWS Glue-taken orkestreren voor het extraheren van gegevens uit verschillende bronnen, het transformeren ervan en het laden ervan in ons datawarehouse.
     #Create boto3 client for Glue glue_client = boto3.client('glue', region_name='us-east-1') #Define callback function to start the Glue job using boto3 client def run_glue_ingestion_job(): glue_client.start_job_run(JobName='glue_ingestion_job') #Define the task for glue job for ingestion glue_job_step = PythonOperator( task_id=’glue_task_for_source_to_landing’, python_callable=run_glue_ingestion_job )
    #This is how we define the flow start >> verify >> glue_task_for_source_to_landing >> landing_to_cds_task >> cds_to_ufdm_task >> data_quality_check >> end_exec
    

De volgende afbeelding laat zien hoe deze workflow zou worden gezien in de Airflow-gebruikersinterface.

  1. Maak DAG's met Lambda voor inname. Met Lambda kunnen we code uitvoeren zonder servers in te richten of te beheren. Deze DAG's gebruiken Lambda-functies om API's van derden aan te roepen en gegevens in onze Redshift-tabellen te laden, die kunnen worden gepland om met bepaalde tussenpozen of als reactie op specifieke gebeurtenissen te worden uitgevoerd.
    #Create boto3 client for Lambda lambda_client = boto3.client('lambda') #Define callback function to invoke the lambda function using boto3 client def run_lambda_ingestion_job(): Lambda_client.invoke(FunctionName='<funtion_arn>')
    ) #Define the task for glue job for ingestion
    glue_job_step = PythonOperator( task_id=’lambda_task_for_api_to_landing’, python_callable=run_lambda_ingestion_job
    )

De volgende afbeelding laat zien hoe deze workflow zou worden gezien in de Airflow-gebruikersinterface.

We hebben nu een uitgebreid, goed georkestreerd proces dat gebruikmaakt van een verscheidenheid aan AWS-services om verschillende stadia van onze datapijplijn af te handelen, van opname tot transformatie.

Conclusie

De combinatie van AWS-diensten en het dbt open-sourceproject biedt een krachtige, flexibele en schaalbare oplossing voor het bouwen van moderne dataplatforms. Het is een perfecte mix van beheersbaarheid en functionaliteit, met zijn gebruiksvriendelijke, op SQL gebaseerde raamwerk en functies zoals gegevenskwaliteitscontroles, configureerbare belastingstypen en gedetailleerde documentatie en afstamming. De principes van ‘code gescheiden van data’ en herbruikbaarheid maken het tot een handig en efficiënt hulpmiddel voor een breed scala aan gebruikers. Deze praktische use case van het bouwen van een dataplatform voor een retailorganisatie demonstreert het enorme potentieel van AWS en dbt voor het transformeren van databeheer en -analyse, waardoor de weg wordt vrijgemaakt voor snellere inzichten en weloverwogen zakelijke beslissingen.

Zie voor meer informatie over het gebruik van dbt met Amazon Redshift Beheer datatransformaties met dbt in Amazon Redshift.


Over de auteurs

Prantik Gachhayat is een Enterprise Architect bij Infosys en heeft ervaring op verschillende technologiegebieden en bedrijfsdomeinen. Hij heeft een bewezen staat van dienst bij het helpen van grote ondernemingen bij het moderniseren van digitale platforms en het leveren van complexe transformatieprogramma's. Prantik is gespecialiseerd in het ontwerpen van moderne data- en analyseplatforms in AWS. Prantik houdt ervan nieuwe technologische trends te ontdekken en houdt van koken.

Ashutosh Dubey is een Senior Partner Solutions Architect en Global Tech Leader bij Amazon Web Services, gevestigd in New Jersey, VS. Hij heeft uitgebreide ervaring, gespecialiseerd op het gebied van data, analyse en AIML, inclusief generatieve AI, heeft bijgedragen aan de gemeenschap door verschillende technische inhoud te schrijven en heeft Fortune 500-bedrijven geholpen bij hun cloudreis naar AWS.

spot_img

Laatste intelligentie

spot_img