Python para ingenieros de datos.  Técnicas avanzadas de ETL para principiantes |  por 💡Mike Shakhomirov |  octubre de 2023

Técnicas avanzadas de ETL para principiantes

Foto por Boitumelo en desempaquetar

En esta historia hablaré sobre técnicas avanzadas de ingeniería de datos en Python. Sin duda, Python es el lenguaje de programación de datos más popular. Durante mis casi doce años de carrera en ingeniería de datos, me encontré con varias situaciones en las que el código tenía problemas. Esta historia es un breve resumen de cómo los resolví y aprendí a escribir mejor código. Mostraré algunas técnicas que hacen que nuestro ETL sea más rápido y ayudan a mejorar el rendimiento de nuestro código.

Lista por comprensión

Imagine que está recorriendo una lista de tablas. Normalmente, haríamos esto:

data_pipelines = ['p1','p2','p3']
processed_tables = []
for table in data_pipelines:
processed_tables.append(table)

Pero en su lugar, podríamos utilizar listas por comprensión. No sólo son más rápidos, sino que también reducen el código haciéndolo más conciso:

processed_tables = [table for table in data_pipelines]

Por ejemplo, recorrer un archivo súper grande con datos para transformar (ETL) en cada fila nunca ha sido tan fácil:

def etl(item):
# Do some data transformation here
return json.dumps(item)

data = u"\n".join(etl(item) for item in json_data)

Las listas por comprensión son extremadamente útiles para el procesamiento ETL de archivos de datos de gran tamaño. Imagine un archivo de datos que necesitamos transformar a un formato delimitado por nueva línea. Intente ejecutar este ejemplo en su entorno Python:


import io
import json

def etl(item):
return json.dumps(item)

# Text file loaded as a blob
blob = """
[
{"id":"1","first_name":"John"},
{"id":"2","first_name":"Mary"}
]
"""
json_data = json.loads(blob)
data_str = u"\n".join(etl(item) for item in json_data)

print(data_str)
data_file = io.BytesIO(data_str.encode())

# This data file is ready for BigQuery as Newline delimited JSON
print(data_file)

La salida será una JSON delimitado por nueva línea. Este es un formato estándar para datos en el almacén de datos de BigQuery y está listo para cargarse en la tabla:

{"id": "1", "first_name": "John"}
{"id": "2", "first_name": "Mary"}
<_io.BytesIO object at 0x10c732430>

Generadores