Acelere su procesamiento de datos ETL con Python y AWS
En el mundo actual basado en datos, las empresas confían en canalizaciones de datos para recopilar, procesar y analizar grandes cantidades de datos. Un enfoque popular para crear canalizaciones de datos es el ETL (extraer, transformar, cargar), que extrae datos de múltiples fuentes, los transforma en un formato utilizable y los carga en un sistema de destino para su análisis.
Con el poder de la computación en la nube, ahora es más fácil que nunca crear canalizaciones ETL escalables y eficientes utilizando AWS (Amazon Web Services). En esta publicación de blog, examinamos los componentes clave de una canalización basada en ETL con AWS DynamoDB y Python y proporcionamos una guía paso a paso para crear su propia canalización.
Tanto si es analista de datos, científico de datos o propietario de una empresa, este blog le proporcionará los conocimientos y las herramientas que necesita para crear canalizaciones de ETL que conviertan los datos sin procesar en información procesable.
¿Qué es ETL?
ETL se conoce como "Extraer", "Transformar" y "Cargar".
El proceso que se utiliza
1. para obtener (Extraer) los datos de varias fuentes
2. Para realizar algunas operaciones (Transformar) en esos datos
3. Para almacenar (Cargar) esos datos de manera significativa
- Aquí, la "tubería" es: construir un flujo para obtener los datos de una fuente en particular, luego procesarlos y finalmente almacenarlos en una base de datos. Como el flujo se basa en datos, la canalización de ETL también se denomina "canalización de datos".
- Hoy en día, la mayoría de las organizaciones recopilan datos sin procesar a través de sitios web en línea, plataformas en la nube, encuestas, etc.
- Después de la recopilación de datos sin procesar, las organizaciones necesitan analistas de datos que puedan realizar operaciones o cálculos para limpiar o transformar los datos no estructurados según los requisitos. Ahora, entendamos "Transformar" con un ejemplo.
- Digamos que mi cliente/parte interesada me pide que aplique la lógica de transformación con datos de fila que vienen con 50 columnas, pero solo quieren 10 con algunas condiciones específicas.
- Mi primer paso será entender los requisitos. A continuación, debo verificar esas 10 columnas e intentar encontrar una solución óptima para transformar mis datos sin procesar. (Este es un paso crítico en ETL)
- El último pero importante paso debe ser almacenar los datos transformados en el. base de datos (SQL o No-SQL) con un diseño de esquema de base de datos eficiente. (Analizaremos esto en algún momento).
- Python es un lenguaje de programación de secuencias de comandos, de propósito general, de alto nivel e interpretado.
- El caso de uso de Python es popular con ETL debido a su sintaxis limpia, métodos de código más optimizados y el privilegio de una gran biblioteca y soporte comunitario.
- Podemos definir/escribir una función que haga de todo, desde obtener datos de la API hasta almacenarlos en una base de datos particular. O separe estos diferentes pasos como funciones que pueden funcionar como módulos/subtareas de toda la canalización.
- También podemos aprovechar algunas de las técnicas de optimización de Python para lidiar de manera eficiente con la complejidad del tiempo y el espacio porque cuando se trata de Big Data, todo importa.
- Amazon Web Services (AWS) es una de las plataformas en la nube más completas y ampliamente adoptadas, que ofrece más de 200 servicios completos de centros de datos en todo el mundo.
- AWS es útil al configurar la infraestructura en un entorno basado en la nube donde no tenemos que preocuparnos por servidores, redes y otros recursos, ya que la mayoría de los servicios son "sin servidor". Tenemos que pagar sólo por lo que usamos.
- Como se mencionó anteriormente, AWS tiene muchos servicios para ofrecer, pero actualmente vamos a ver solo algunos que he usado y encontrado interesantes específicamente para realizar tareas de ETL.
- Ahora que tenemos una comprensión básica de lo que hace Extract, profundicemos más para comprender su caso de uso en tiempo real.
- Supongamos que tenemos un requisito para recopilar datos de un servicio de API de terceros llamado API de YouTube (una parte de la biblioteca de API de Google). Primero, tendremos que instalar la biblioteca o paquete requerido para que Python configure la inicialización de una API.
- Después de instalar el paquete, definimos una variable para inicializar la API anterior con algunas credenciales conocidas como acceso y claves secretas . Todas las API disponibles públicamente tienen restricciones contra el uso directo, por lo que necesitaríamos credenciales.
import os
import googleapiclient.discovery
OAUTHLIB_INSECURE_TRANSPORT = "1"
api_service_name = os.environ["API_SERVICE_NAME"]
api_version = os.environ["API_VERSION"]
DEVELOPER_KEY_1 = os.environ["DEVELOPER_KEY_1"]
youtube = googleapiclient.discovery.build(
api_service_name, api_version, developerKey=DEVELOPER_KEY_1, cache_discovery=False
)
# get total channel view count
def fetch_channel_view_count(channel_id):
"""
i/p: channel_id (type: str)
o/p: channel name, view count, upload_id (type: str)
description: takes channel_id as input and returns upload_id and channel view count
"""
# youtube channel API call
channel_request = youtube.channels().list(
part='statistics,snippet,contentDetails',
id=channel_id,
)
# getting particular channel data
channel_data_response = channel_request.execute()
# extracting required fields from YouTube API response
for channel_info in channel_data_response.get('items'):
ChannelName = channel_info['snippet'].get('title', None)
ChannelViewCount = channel_info['statistics'].get('viewCount', None)
ChannelID = channel_info['id']
ChannelUploadID = channel_info['contentDetails']['relatedPlaylists'].get('uploads', None)
# returning 4 required fields as variables
return ChannelName, ChannelViewCount, ChannelID, ChannelUploadID
- Ahora viene la parte interesante de ETL, la Transformación. Con los campos seleccionados, primero, verificaremos el tipo de datos de cada campo, ya que a veces es posible que queramos almacenar datos en forma de tipo de datos "flotante/decimal", pero la respuesta de la API estará en los datos "entero/numérico". tipo.
- Después de seleccionar tipos de datos específicos que coincidan con nuestros requisitos, haremos cálculos manuales o agregaremos dos campos para crear un nuevo campo/columna.
'''
new_field = '<YouTube_Channel_ID>_<YouTube_Channel_Name>'
'''
unique_field = 123456789_RandomChannel
[
{
'channel_id': 123456789,
'chnanle_name': 'RandomChannel',
'new_field': '123456789_RandomChannel',
'total_videos': 50
},
{
'channel_id': 123456789,
'chnanle_name': 'RandomChannel',
'new_field': '123456789_RandomChannel',
'total_videos': 50
},
]
# iterating over rows/records of pandas dataframe
for index, row in channel_df.iterrows():
try:
datetime_format = pd.to_datetime(row['platformdate_id'].replace('yt#', ''), format='%d%m%Y').strftime('%Y-%m-%d %H:%M:%S')
c_dict = {
'artist_id': str(row['artist_id']),
'platformdate_id': str(row['platformdate_id'].replace('yt#', '')),
'created_at': str(datetime_format),
'artist_name': str(row['artist_name']),
'channel_id': str(row['channel_id']),
'data': row['data'],
'youtube_channel_name': str(row['youtube_channel_name']),
'vevo_channel_name': str(row['vevo_channel_name'])
}
# appending required dictionary of data into empty list "c_list" for further process
c_list.append(c_dict)
except Exception as e:
print(f"Exception occured as {e}")
continue
Tipo sin SQL
- Comencemos con SQL, también conocido como lenguaje de consulta estructurado, lo que significa que los datos se almacenan en formato tabular con nombres de columna predefinidos.
- Aquí, tenemos que especificar diferentes nombres de columna al crear una tabla en la base de datos, conocida como "diseño de esquema de tabla". El diseño del esquema se puede modificar después de la creación, pero no se recomienda cuando se trabaja con Big Data.
- Pero en nuestro caso, el número de columnas o claves no es predecible. Entonces, iremos con una base de datos No-SQL. Las bases de datos sin SQL nos permiten agregar múltiples campos o columnas después de la creación de una tabla.
- Solo tenemos que ocuparnos de 2 campos/claves, conocidos como "clave de partición" y "clave de clasificación".
- Cuando se define solo, podemos referirnos a la clave de partición como la clave principal. De lo contrario, hay una combinación de claves de "partición" y "clasificación".
- Cuando ambos se incluyen en el diseño del esquema de la tabla, la combinación se denomina "clave principal" dentro de la tabla.
- AWS DynamoDB es una base de datos sin SQL. Usaremos DynamoDB para almacenar los datos en tablas con la definición de clave de partición y clave de clasificación.
- El diseño del esquema de la tabla de DynamoDB se muestra a continuación en la imagen.
- La siguiente imagen representa cómo se almacenarán realmente los datos dentro de la tabla de DynamoDB, donde video_id_date es la clave de partición y otras columnas son solo campos de la tabla.
- Las canalizaciones de datos son elementos cruciales de cualquier flujo de trabajo que involucre el manejo de datos. Se pueden recopilar, transformar y analizar grandes cantidades de datos con una canalización de datos.
- Python es un lenguaje de programación popular para el procesamiento de datos, gracias a su amplio soporte de biblioteca, facilidad de uso y flexibilidad.
- AWS proporciona una gama de servicios potentes que son ideales para crear e implementar canalizaciones de datos, incluidos Amazon S3, AWS Lambda, AWS Glue y Amazon EMR.
- Es una buena idea ceñirse a algunas prácticas estándar al crear canalizaciones de datos. Estos incluyen el uso de un diseño modular y reutilizable, incluido el manejo y registro de errores, y la optimización de su proceso mediante el uso de herramientas de automatización y monitoreo.
- Python y AWS se pueden usar para crear canalizaciones de datos, lo que puede simplificar sus flujos de trabajo de procesamiento de datos, aumentar la productividad y brindarle una mayor comprensión de sus datos. Con las herramientas y los métodos adecuados, puede convertir los datos no estructurados en conocimientos empresariales procesables que conduzcan a mejores decisiones y resultados.
La creación de canalizaciones de datos con Python y AWS ayuda a simplificar los flujos de trabajo de procesamiento y análisis de datos, lo que le permite desbloquear todo el potencial de sus datos y obtener información valiosa sobre su negocio. Esto puede mejorar sus resultados y generar mejores resultados para su organización. Con las herramientas, las técnicas y la orientación adecuadas, cualquiera puede aprender a crear canalizaciones de datos potentes y escalables que transforman los datos sin procesar en información procesable.
Estén atentos y sigan a Simform Engineering para obtener actualizaciones importantes sobre diversas herramientas y tecnologías.

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































