Glue ETL szkript példa a Tulip táblázat adatainak betöltésére
  • 28 Aug 2024
  • 1 Elolvasandó perc
  • Közreműködők

Glue ETL szkript példa a Tulip táblázat adatainak betöltésére


Cikk összefoglaló

Tulip táblák lekérdezése egy Glue ETL Script segítségével, hogy egyszerűsítse az adatok mozgatását a Tulipból a Redshiftbe (vagy más adatfelhőkbe)

Cél

Ez a szkript egy egyszerű kiindulási pontot biztosít a Tulip táblák adatainak lekérdezéséhez és a Redshiftbe vagy más adattárházakba történő áthelyezéséhez.

Magas szintű architektúra

Ez a magas szintű architektúra használható a Tulip Tables API-ból származó adatok lekérdezésére, majd a Redshiftbe történő mentésére további elemzés és feldolgozás céljából.

image.png

Példa szkript

Az alábbi példaszkript bemutatja, hogyan lehet lekérdezni egyetlen Tulp Table-t a Glue ETL (Python Powershell) segítségével, majd a Redshiftbe írni. MEGJEGYZÉS: A skálázott termelési felhasználási eseteknél ehelyett a vödör tartalmának egy ideiglenes S3 vödörbe való írása, majd S3-ra való másolása ajánlott. Ezenkívül a hitelesítő adatok az AWS Secrets Manager segítségével kerülnek mentésre.



import sys import pandas as pd import numpy as np import requests import json import boto3 from botocore.exceptions import ClientError from sqlalchemy import create\_engine import sqlalchemy as sa from sqlalchemy.engine.url import URL import psycopg2 from datetime import datetime import logging logger = logging.getLogger()


table\_id = 'aKzvoscgHCyd2CRu3\_DEFAULT' def get\_secret(secret\_name, region\_name): # Titokkezelő kliens létrehozása session = boto3.session.Session() client = session.client( service\_name='secretsmanager', region\_name=region\_name ) try: get\_secret\_value\_response = client.get\_secret\_value( SecretId=secret\_name ) except ClientError as e: # A dobott kivételek listáját lásd # https://docs.aws.amazon.com/secretsmanager/latest/apireference/API\_GetSecretValue.html raise e return json.loads(get\_secret\_value\_response['SecretString'])


redshift\_credentials = get\_secret(secret\_name='tulip\_redshift', region\_name='us-east-1') api\_credentials = get\_secret(secret\_name='[INSTANCE].tulip.co-API-KEY', region\_name='us-east-1')


# SQL motor létrehozása


url = URL.create( drivername='postgresql', host=redshift\_credentials['host'], port=redshift\_credentials['port'], database=redshift\_credentials['dbname'], username=redshift\_credentials['username'], password=redshift\_credentials['password'] ) engine = sa.create\_engine(url)


header = {'Authorization' : api\_credentials['auth\_header']} base\_url = 'https://william.tulip.co/api/v3'


offset = 0 function = f'/tables/{table\_id}/records?limit=100&offset={offset}&includeTotalCount=false&filterAggregator=all' r = requests.get(base\_url+function, headers=header) df = pd.DataFrame(r.json()) length = len(r.json())


while length > 0: offset += 100 function = f'/tables/{table\_id}/records?limit=100&offset={offset}&includeTotalCount=false&filterAggregator=all' r = requests.get(base\_url+function, headers=header) length = len(r.json()) df\_append = pd.DataFrame(r.json()) df = pd.concat([df, df\_append], axis=0)


# dátum-idő bélyegző rögzítése


now = datetime.now() df['datetime\_updated'] = now


# írás a Redshiftbe


df.to\_sql('station\_activity\_from\_glue', engine, schema='product\_growth', index=False,if\_exists='replace')


Méretezési megfontolások

Fontolja meg az S3 használatát köztes ideiglenes tárolóként, hogy aztán az adatokat az S3-ból a Redshiftbe másolja, ahelyett, hogy közvetlenül a Redshiftbe írná őket. Ez számítási szempontból hatékonyabb lehet.

Ezenkívül metaadatokat is használhat az összes Tulip-tábla adattárházba írásához az egyszeri Tulip-táblák helyett.

Végül ez a példaszkript minden alkalommal felülírja a teljes táblát. Hatékonyabb módszer lenne az utolsó frissítés vagy lekérdezés óta módosított sorok frissítése.

Következő lépések

További olvasmányokért tekintse meg az Amazon Well-Architected Frameworket. Ez egy nagyszerű forrás az adatfolyamok és integrációk optimális módszereinek megértéséhez.


Hasznos volt ez a cikk?