Zephyrnet-logo

Ontgrendel schaalbare analyses met AWS Glue en Google BigQuery | Amazon-webservices

Datum:

Data-integratie is de basis van robuuste data-analyse. Het omvat de ontdekking, voorbereiding en samenstelling van gegevens uit verschillende bronnen. In het moderne datalandschap is het benaderen, integreren en transformeren van data uit diverse bronnen een essentieel proces voor datagestuurde besluitvorming. AWS lijm, een serverloze data-integratie- en extractie-, transformatie- en laadservice (ETL), heeft een revolutie in dit proces teweeggebracht, waardoor het toegankelijker en efficiënter is geworden. AWS Glue elimineert complexiteit en kosten, waardoor organisaties data-integratietaken binnen enkele minuten kunnen uitvoeren, wat de efficiëntie vergroot.

Deze blogpost verkent de nieuw aangekondigd beheerde connector voor Google BigQuery en demonstreert hoe u een moderne ETL-pijplijn kunt bouwen met AWS Glue Studio zonder code te schrijven.

Overzicht van AWS-lijm

AWS lijm is een serverloze data-integratieservice die het gemakkelijker maakt om gegevens te ontdekken, voor te bereiden en te combineren voor analyse, machine learning (ML) en applicatie-ontwikkeling. AWS Glue biedt alle mogelijkheden die nodig zijn voor data-integratie, zodat u binnen enkele minuten in plaats van maanden kunt beginnen met het analyseren van uw gegevens en deze in gebruik kunt nemen. AWS Glue biedt zowel visuele als op code gebaseerde interfaces om data-integratie eenvoudiger te maken. Gebruikers kunnen gemakkelijker gegevens vinden en openen met behulp van de AWS-lijmgegevenscatalogus. Data-ingenieurs en ETL-ontwikkelaars (extract, transform, and load) kunnen in een paar stappen visueel ETL-workflows creëren, uitvoeren en monitoren. AWS Lijm Studio. Data-analisten en datawetenschappers kunnen er gebruik van maken AWS lijm DataBrew om gegevens visueel te verrijken, op te schonen en te normaliseren zonder code te schrijven.

Maak kennis met de Google BigQuery Spark-connector

Om te voldoen aan de eisen van diverse gebruiksscenario's voor data-integratie, biedt AWS Glue nu een native spark-connector voor Google BigQuery. Klanten kunnen nu AWS Glue 4.0 voor Spark gebruiken om te lezen van en te schrijven naar tabellen in Google BigQuery. Bovendien kunt u een hele tabel lezen of een aangepaste query uitvoeren en uw gegevens schrijven met behulp van directe en indirecte schrijfmethoden. U maakt verbinding met BigQuery met behulp van de serviceaccountgegevens die veilig zijn opgeslagen in AWS-geheimenmanager.

Voordelen van de Google BigQuery Spark-connector

  • Naadloze integratie: De native connector biedt een intuïtieve en gestroomlijnde interface voor gegevensintegratie, waardoor de leercurve wordt verkort.
  • Kost efficiëntie: Het bouwen en onderhouden van aangepaste connectoren kan duur zijn. De native connector van AWS Glue is een kosteneffectief alternatief.
  • Efficiënt: Gegevenstransformatietaken die voorheen weken of maanden in beslag namen, kunnen nu binnen enkele minuten worden uitgevoerd, waardoor de efficiëntie wordt geoptimaliseerd.

Overzicht oplossingen

In dit voorbeeld maakt u twee ETL-taken met AWS Glue met de native Google BigQuery-connector.

  1. Query's uitvoeren in een BigQuery-tabel en de gegevens opslaan in Eenvoudige opslagservice van Amazon (Amazon S3) in Parquet-formaat.
  2. Gebruik de gegevens uit de eerste taak om deze te transformeren en een samengevoegd resultaat te creëren dat in Google BigQuery kan worden opgeslagen.

oplossingsarchitectuur

Voorwaarden

De dataset die in deze oplossing wordt gebruikt, is de NCEI/WDS Wereldwijde database met significante aardbevingen, met een wereldwijde lijst van meer dan 5,700 aardbevingen van 2150 voor Christus tot heden. Kopieer deze openbare gegevens naar uw Google BigQuery-project of gebruik uw bestaande dataset.

Configureer BigQuery-verbindingen

Om verbinding te maken met Google BigQuery vanuit AWS Glue, zie BigQuery-verbindingen configureren. U moet uw Google Cloud Platform-inloggegevens aanmaken en opslaan in een Secrets Manager-geheim en dat geheim vervolgens koppelen aan een Google BigQuery AWS Glue-verbinding.

Amazon S3 instellen

Elk object in Amazon S3 wordt opgeslagen in een bucket. Voordat u gegevens in Amazon S3 kunt opslaan, moet u dit doen maak een S3-bucket om de resultaten op te slaan.

Een S3-bucket maken:

  1. Op de AWS Management Console voor Amazon S3, kiezen Maak een bucket.
  2. Voer een globaal uniek in Naam voor je emmer; Bijvoorbeeld, awsglue-demo.
  3. Kies Maak een bucket.

Maak een IAM-rol voor de AWS Glue ETL-taak

Wanneer u de AWS Glue ETL-taak maakt, geeft u een AWS identiteits- en toegangsbeheer (IAM) rol die voor de functie moet worden gebruikt. De rol moet toegang verlenen tot alle bronnen die door de taak worden gebruikt, inclusief Amazon S3 (voor alle bronnen, doelen, scripts, stuurprogrammabestanden en tijdelijke mappen) en Secrets Manager.

Voor instructies, zie Configureer een IAM-rol voor uw ETL-taak.

Oplossingsoverzicht

Maak een visuele ETL-taak in AWS Glue Studio om gegevens over te dragen van Google BigQuery naar Amazon S3

  1. Open de AWS lijm console.
  2. Navigeer in AWS Glue naar Visuele ETL onder de ETL-banen sectie en maak een nieuwe ETL-taak met behulp van Visual met een leeg canvas.
  3. Voer een Naam voor bijvoorbeeld uw AWS Glue klus, bq-s3-dataflow.
  4. kies Google BigQuery als de gegevensbron.
    1. Voer een naam voor uw Google BigQuery-bronknooppunt, bijvoorbeeld noaa_significant_earthquakes.
    2. Selecteer een Google BigQuery verbinding, bijvoorbeeld bq-connection.
    3. Voer een Ouder projecteren, bijvoorbeeld bigquery-public-datasources.
    4. kies Kies een enkele tafel voor de BigQuery-bron.
    5. Voer de tafel u wilt migreren in de vorm [dataset].[tabel], bijvoorbeeld noaa_significant_earthquakes.earthquakes.
      grote query-gegevensbron voor bq naar Amazon s3 dataflow
  5. Kies vervolgens het gegevensdoel als Amazon S3.
    1. Voer een Naam voor het doel-Amazon S3-knooppunt, bijvoorbeeld aardbevingen.
    2. Selecteer de uitvoergegevens Formaat as Parket.
    3. Selecteer het Compressietype as pittig.
    4. Voor de S3 doellocatieVoer de bucket in die in de vereisten is gemaakt, bijvoorbeeld s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/.
    5. Je zou moeten vervangen <YourBucketName> met de naam van uw emmer.
      s3 doelknooppunt voor bq naar Amazon s3 dataflow
  6. Ga vervolgens naar de Details van de baan. In de IAM-rolselecteert u de IAM-rol uit de vereisten, bijvoorbeeld AWSGlueRole.
    IAM-rol voor bq naar Amazon s3 dataflow
  7. Kies Bespaar.

Voer de taak uit en controleer deze

  1. Nadat uw ETL-taak is geconfigureerd, kunt u de taak uitvoeren. AWS Glue voert het ETL-proces uit, haalt gegevens uit Google BigQuery en laadt deze naar de door u opgegeven S3-locatie.
  2. Volg de voortgang van de taak in de AWS Glue-console. U kunt logboeken en taakuitvoeringsgeschiedenis bekijken om ervoor te zorgen dat alles soepel verloopt.

voer en monitor bq naar Amazon s3 dataflow

Gegevensvalidatie

  1. Nadat de taak met succes is uitgevoerd, valideert u de gegevens in uw S3-bucket om er zeker van te zijn dat deze aan uw verwachtingen voldoen. U kunt de resultaten bekijken met behulp van Amazon S3 Selecteren.

beoordelingsresultaten in Amazon s3 van de bq naar s3 dataflow-run

Automatiseer en plan

  1. Stel indien nodig een taakplanning in om het ETL-proces regelmatig uit te voeren. U kunt AWS gebruiken om uw ETL-taken te automatiseren, zodat uw S3-bucket altijd up-to-date is met de nieuwste gegevens van Google BigQuery.

U heeft met succes een AWS Glue ETL-taak geconfigureerd om gegevens over te dragen van Google BigQuery naar Amazon S3. Vervolgens maakt u de ETL-taak om deze gegevens te verzamelen en over te dragen naar Google BigQuery.

Het vinden van hotspots voor aardbevingen met AWS Glue Studio Visual ETL.

  1. Openen AWS lijm console.
  2. Navigeer in AWS Glue naar Visuele ETL onder de ETL-banen sectie en maak een nieuwe ETL-taak met behulp van Visual met een leeg canvas.
  3. Geef een naam op voor uw AWS Glue-taak, bijvoorbeeld s3-bq-dataflow.
  4. Kies Amazon S3 als de gegevensbron.
    1. Voer een Naam voor het bron Amazon S3-knooppunt, bijvoorbeeld aardbevingen.
    2. kies S3 locatie de S3-brontype.
    3. Voer de S3-bucket in die in de vereisten is gemaakt als S3-URLBijvoorbeeld s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/.
    4. Je zou moeten vervangen <YourBucketName> met de naam van uw emmer.
    5. Selecteer het Data formaat as Parket.
    6. kies Schema afleiden.
      Amazon s3-bronknooppunt voor s3 naar bq-gegevensstroom
  5. Kies vervolgens Selecteer Velden transformatie.
    1. kies earthquakes as Knooppunt ouders.
    2. Velden selecteren: id, eq_primary, and country.
      selecteer veldknooppunt voor amazon s3 naar bq dataflow
  6. Kies vervolgens Geaggregeerde transformatie.
    1. Voer een NaamBijvoorbeeld Aggregate.
    2. Kies Select Fields as Knooppunt ouders.
    3. Kies eq_primary and country de groeperen op kolommen.
    4. Toevoegen id de aggregaat kolom en count de aggregatie functie.
      geaggregeerd knooppunt voor Amazon s3 naar bq-gegevensstroom
  7. Kies vervolgens HernoemVeld transformatie.
    1. Voer een naam in voor het Amazon S3-bronknooppunt, bijvoorbeeld Rename eq_primary.
    2. Kies Aggregate as Knooppunt ouders.
    3. Kies eq_primary de Huidige veldnaam en ga naar binnen earthquake_magnitude de Nieuwe veldnaam.
      hernoem het veld eq_primary voor Amazon s3 naar bq dataflow
  8. Kies vervolgens HernoemVeld transformatie
    1. Voer een naam in voor het Amazon S3-bronknooppunt, bijvoorbeeld Rename count(id).
    2. Kies Rename eq_primary as Knooppunt ouders.
    3. Kies count(id) de Huidige veldnaam en ga naar binnen number_of_earthquakes de Nieuwe veldnaam.
      hernoem het cound(id)-veld voor amazon s3 naar bq dataflow
  9. Kies vervolgens het gegevensdoel als Google BigQuery.
    1. Geef een naam op voor uw Google BigQuery-bronknooppunt, bijvoorbeeld most_powerful_earthquakes.
    2. Selecteer een Google BigQuery-verbindingBijvoorbeeld bq-connection.
    3. kies Ouder projectBijvoorbeeld bigquery-public-datasources.
    4. Voer de naam van de in tafel die u wilt maken in de vorm [dataset].[tabel], bijvoorbeeld noaa_significant_earthquakes.most_powerful_earthquakes.
    5. Kies Direct de Schrijf methode.
      bq-bestemming voor Amazon s3 naar bq dataflow
  10. Ga vervolgens naar de Details van de baan tab en in de IAM-rolselecteert u de IAM-rol uit de vereisten, bijvoorbeeld AWSGlueRole.
    IAM-rol voor Amazon s3 naar bq-gegevensstroom
  11. Kies Bespaar.

Voer de taak uit en controleer deze

  1. Nadat uw ETL-taak is geconfigureerd, kunt u de taak uitvoeren. AWS Glue voert het ETL-proces uit, extraheert gegevens uit Google BigQuery en laadt deze naar de door u opgegeven S3-locatie.
  2. Volg de voortgang van de taak in de AWS Glue-console. U kunt logboeken en taakuitvoeringsgeschiedenis bekijken om ervoor te zorgen dat alles soepel verloopt.

monitor en voer uit voor amazon s3 naar bq dataflow

Gegevensvalidatie

  1. Nadat de taak is uitgevoerd, valideert u de gegevens in uw Google BigQuery-dataset. Deze ETL-taak retourneert een lijst met landen waar de krachtigste aardbevingen hebben plaatsgevonden. Het verschaft deze door het aantal aardbevingen voor een bepaalde omvang per land te tellen.

geaggregeerde resultaten voor Amazon s3 naar bq dataflow

Automatiseer en plan

  1. U kunt taakplanning instellen om het ETL-proces regelmatig uit te voeren. Met AWS Glue kunt u uw ETL-taken automatiseren, zodat uw S3-bucket altijd up-to-date is met de nieuwste gegevens van Google BigQuery.

Dat is het! U heeft met succes een AWS Glue ETL-taak opgezet om gegevens van Amazon S3 naar Google BigQuery over te dragen. U kunt deze integratie gebruiken om het proces van gegevensextractie, transformatie en laden tussen deze twee platforms te automatiseren, waardoor uw gegevens direct beschikbaar zijn voor analyse en andere toepassingen.

Opruimen

Om te voorkomen dat er kosten in rekening worden gebracht, ruimt u de bronnen die in deze blogpost worden gebruikt op uit uw AWS-account door de volgende stappen te voltooien:

  1. Kies op de AWS Glue-console: Visuele ETL in het navigatievenster.
  2. Selecteer de taak in de lijst met taken bq-s3-data-flow en verwijder het.
  3. Selecteer de taak in de lijst met taken s3-bq-data-flow en verwijder het.
  4. Kies op de AWS Glue-console: aansluitingen in het navigatievenster onder Gegevenscatalogus.
  5. Kies de BiqQuery-verbinding die je hebt gemaakt en verwijderd.
  6. Kies op de Secrets Manager-console het geheim dat u hebt gemaakt en verwijder het.
  7. Kies op de IAM-console rollen in het navigatievenster, selecteer vervolgens de rol die u voor de AWS Glue ETL-taak hebt gemaakt en verwijder deze.
  8. Zoek op de Amazon S3-console naar de S3-bucket die u hebt gemaakt en kies Leeg om de objecten te verwijderen en verwijder vervolgens de bucket.
  9. Ruim bronnen in uw Google-account op door het project te verwijderen dat de Google BigQuery-bronnen bevat. Volg de documentatie naar ruim de Google-bronnen op.

Conclusie

De integratie van AWS Glue met Google BigQuery vereenvoudigt de analysepijplijn, verkort de time-to-insight en vergemakkelijkt datagestuurde besluitvorming. Het stelt organisaties in staat data-integratie en -analyse te stroomlijnen. Het serverloze karakter van AWS Glue betekent dat er geen infrastructuurbeheer nodig is en dat u alleen betaalt voor de bronnen die worden verbruikt terwijl uw taken worden uitgevoerd. Omdat organisaties steeds meer afhankelijk zijn van data voor hun besluitvorming, biedt deze native spark-connector een efficiënte, kosteneffectieve en flexibele oplossing om snel te voldoen aan de behoeften op het gebied van data-analyse.

Als u wilt zien hoe u kunt lezen van en schrijven naar tabellen in Google BigQuery in AWS Glue, bekijk dan stap voor stap video tutorial. In deze zelfstudie doorlopen we het hele proces, van het opzetten van de verbinding tot het uitvoeren van de gegevensoverdrachtstroom. Ga voor meer informatie over AWS Glue naar AWS lijm.

Bijlage

Als u dit voorbeeld wilt implementeren en code wilt gebruiken in plaats van de AWS Glue-console, gebruikt u de volgende codefragmenten.

Gegevens uit Google BigQuery lezen en gegevens naar Amazon S3 schrijven

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args) # STEP-1 Read the data from Big Query Table noaa_significant_earthquakes_node1697123333266 = ( glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "bq-connection", "parentProject": "bigquery-public-datasources", "sourceType": "table", "table": "noaa_significant_earthquakes.earthquakes", }, transformation_ctx="noaa_significant_earthquakes_node1697123333266", )
)
# STEP-2 Write the data read from Big Query Table into S3
# You should replace <YourBucketName> with the name of your bucket.
earthquakes_node1697157772747 = glueContext.write_dynamic_frame.from_options( frame=noaa_significant_earthquakes_node1697123333266, connection_type="s3", format="glueparquet", connection_options={ "path": "s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/", "partitionKeys": [], }, format_options={"compression": "snappy"}, transformation_ctx="earthquakes_node1697157772747",
) job.commit()

Gegevens uit Amazon S3 lezen en samenvoegen en naar Google BigQuery schrijven

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
from awsglue import DynamicFrame
from pyspark.sql import functions as SqlFuncs def sparkAggregate( glueContext, parentFrame, groups, aggs, transformation_ctx
) -> DynamicFrame: aggsFuncs = [] for column, func in aggs: aggsFuncs.append(getattr(SqlFuncs, func)(column)) result = ( parentFrame.toDF().groupBy(*groups).agg(*aggsFuncs) if len(groups) > 0 else parentFrame.toDF().agg(*aggsFuncs) ) return DynamicFrame.fromDF(result, glueContext, transformation_ctx) args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args) # STEP-1 Read the data from Amazon S3 bucket
# You should replace <YourBucketName> with the name of your bucket.
earthquakes_node1697218776818 = glueContext.create_dynamic_frame.from_options( format_options={}, connection_type="s3", format="parquet", connection_options={ "paths": [ "s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/" ], "recurse": True, }, transformation_ctx="earthquakes_node1697218776818",
) # STEP-2 Select fields
SelectFields_node1697218800361 = SelectFields.apply( frame=earthquakes_node1697218776818, paths=["id", "eq_primary", "country"], transformation_ctx="SelectFields_node1697218800361",
) # STEP-3 Aggregate data
Aggregate_node1697218823404 = sparkAggregate( glueContext, parentFrame=SelectFields_node1697218800361, groups=["eq_primary", "country"], aggs=[["id", "count"]], transformation_ctx="Aggregate_node1697218823404",
) Renameeq_primary_node1697219483114 = RenameField.apply( frame=Aggregate_node1697218823404, old_name="eq_primary", new_name="earthquake_magnitude", transformation_ctx="Renameeq_primary_node1697219483114",
) Renamecountid_node1697220511786 = RenameField.apply( frame=Renameeq_primary_node1697219483114, old_name="`count(id)`", new_name="number_of_earthquakes", transformation_ctx="Renamecountid_node1697220511786",
) # STEP-1 Write the aggregated data in Google BigQuery
most_powerful_earthquakes_node1697220563923 = ( glueContext.write_dynamic_frame.from_options( frame=Renamecountid_node1697220511786, connection_type="bigquery", connection_options={ "connectionName": "bq-connection", "parentProject": "bigquery-public-datasources", "writeMethod": "direct", "table": "noaa_significant_earthquakes.most_powerful_earthquakes", }, transformation_ctx="most_powerful_earthquakes_node1697220563923", )
) job.commit()


Over de auteurs

Kartikay Khator is een Solutions Architect in Global Life Sciences bij Amazon Web Services (AWS). Hij heeft een passie voor het bouwen van innovatieve en schaalbare oplossingen om aan de behoeften van klanten te voldoen, met de nadruk op AWS Analytics-services. Naast de technische wereld is hij een fervent hardloper en houdt hij van wandelen.

Kamen SharlandjevKamen Sharlandjev is een Sr. Big Data en ETL Solutions Architect en Amazon AppFlow-expert. Hij heeft een missie om het leven gemakkelijker te maken voor klanten die worden geconfronteerd met complexe uitdagingen op het gebied van data-integratie. Zijn geheime wapen? Volledig beheerde, low-code AWS-services die de klus kunnen klaren met minimale inspanning en zonder codering.

Anshul SharmaAnshul Sharma is een softwareontwikkelingsingenieur in het AWS Glue-team. Hij geeft leiding aan het connectiviteitscharter dat de klant van Glue een eigen manier biedt om elke gegevensbron (datawarehouse, datalakes, NoSQL enz.) te verbinden met Glue ETL Jobs. Naast de technische wereld is hij een cricket- en voetballiefhebber.

spot_img

Laatste intelligentie

spot_img