Data ingestion with python to redshift

Published on
2 mins read
--- views

Introduccion

Si conoces sobre las librerias de python, sabrás que hay muchas y existe una muy popular para la ingesta de datos a traves de APIs, es la libreria REQUESTS, esta libreria es capaz de extraer cualquier tipo de datos JSON para nuestro caso jalaremos de un muyy conocida que recoge datos de puntajes de tiendas, restaurantes, lugares públicos, etc. la API de YELP

Que debemos preparar

API key Remote database access Python v3.10.5 Requests v2.81 Pandas v2.0.2 SQLAlchemy v1.4.38 psycopg2-binary v2.9.7

pip install requests==2.81
pip install pandas==2.0.2
pip install psycopg2-binary==2.9.7
pip install SQLAlchemy==1.4.38


%reset -f
import requests
import pandas as pd

url = "https://api.yelp.com/v3/businesses/search"

api_key = "tCHWtqVrsUiwlSnk8gftldKYGvhU71upowSlbuydOXW_qByHx7hcp6nUcS3GqLZ47WljuHN1OXqjGbuhE0opoqmhT6g4qrIvrUEl-Ci5wuFuYI-j7DCWMNRY4P89ZnYx"

headers = {"Authorization": "Bearer {}".format(api_key)}

params = {"term": "bookstore",
          "location": "San Francisco"}

response = requests.get(url, headers=headers, params=params)
data = response.json()
df = pd.DataFrame(data['businesses'])
bookstore = pd.json_normalize(data["businesses"],
                              sep="_",
                              record_path="categories",
                              meta=["name",
                                    "alias",
                                    "rating",
                                    ["coordinates", "latitude"],
                                    ["coordinates", "longitude"]],
                              meta_prefix="pr_")
from sqlalchemy import create_engine

# https://docs.sqlalchemy.org/en/20/core/engines.html#postgresql
engine = create_engine('postgresql://username:password@data-engineer-cluster.cyhh5bfevlmn.us-east-1.redshift.amazonaws.com:5439/data-engineer-database')
bookstore.to_sql('bookstore', con=engine, if_exists='append', chunksize=100, index=False)

Fuente de datos
Destino de datos

Happy reading!