Saltar al contenido principal

Crear tablas en Snowflake: Tipos, ejemplos y buenas prácticas

Aprende a crear distintos tipos de tablas en Snowflake, incluidas las tablas permanentes, temporales, externas y dinámicas. Incluye ejemplos paso a paso y buenas prácticas.
Actualizado 20 feb 2025  · 9 min de lectura

Snowflake es una potente plataforma de almacenamiento de datos basada en la nube que ayuda a las organizaciones a almacenar, gestionar y analizar sus datos de forma eficaz. A diferencia de los almacenes de datos tradicionales, que requieren complejas configuraciones de hardware, Snowflake se ejecuta totalmente en la nube, lo que facilita a las empresas ampliar sus operaciones de datos según sea necesario.

Crear tablas en Snowflake es una habilidad fundamental que constituye la base de la gestión de datos. Las tablas son el lugar donde almacenas tus datos estructurados, lo que hace posible ejecutar consultas, generar informes y obtener información valiosa de tu información. Tanto si trabajas con datos de clientes, cifras de ventas o resultados analíticos, es esencial comprender cómo crear y gestionar tablas en Snowflake.

En este tutorial, aprenderás todo lo que necesitas saber sobre la creación de tablas en Snowflake. Cubriremos los distintos tipos de tablas, te mostraremos ejemplos paso a paso y compartiremos las mejores prácticas para el diseño de tablas. Al final, tendrás confianza para elegir el tipo de tabla adecuado a tus necesidades y crear tablas que sigan las normas del sector en cuanto a rendimiento y capacidad de mantenimiento.

Entender los tipos de tabla en Snowflake

Antes de sumergirnos en ejemplos de código sobre cómo crear tablas, vamos a explorar los distintos tipos de tablas en Snowflake, ya que cada una de ellas tiene propósitos únicos y características distintas en cuanto a persistencia de datos, accesibilidad y ubicación de almacenamiento.

Mesas permanentes

Las tablas permanentes son el tipo de tabla estándar en Snowflake. Persisten hasta que se abandonan explícitamente y se guardan en el almacenamiento interno de Snowflake. Estas tablas son ideales para almacenar los datos principales de tu empresa que deben conservarse a largo plazo y a los que se debe acceder en varias sesiones. Los datos de las tablas permanentes permanecen intactos entre sesiones y cualquier usuario autorizado puede acceder a ellos.

Tablas temporales

Las tablas temporales son tablas específicas de la sesión que se eliminan automáticamente cuando finaliza la sesión actual. Sirven como tablas de espacio de trabajo para pasos intermedios de procesamiento, ayudando a organizar transformaciones complejas de datos sin saturar tu almacenamiento permanente. Los datos de las tablas temporales sólo son visibles para la sesión que las creó y se limpian automáticamente cuando se cierra la sesión.

Tablas externas

Las tablas externas proporcionan una forma de consultar datos que residen fuera del almacenamiento de Snowflake. Actúan como una capa de metadatos que mapea los datos en ubicaciones de almacenamiento externas como AWS S3 o Azure Blob Storage. En lugar de ingerir los datos, las tablas externas crean una referencia a ellos, lo que te permite consultar directamente los datos externos. Este enfoque es especialmente valioso cuando se trabaja con datos que deben permanecer en su ubicación de origen o que requieren actualizaciones frecuentes desde sistemas externos.

Tablas dinámicas

Las tablas dinámicas son una potente función de Snowflake que mantiene automáticamente actualizados los resultados de una consulta. Actúan como vistas materializadas que se actualizan automáticamente en función de los cambios en las tablas fuente subyacentes. Cuando creas una tabla dinámica, la defines mediante una sentencia SELECT, y Snowflake gestiona automáticamente el proceso de actualización para garantizar que los datos se mantienen actualizados.

Las tablas dinámicas son especialmente útiles para:

  • Construir cuadros de mando en tiempo real que necesiten datos frescos sin actualizaciones manuales
  • Mantener versiones agregadas o transformadas de los datos fuente que se actualizan automáticamente
  • Crear modelos de datos dependientes en los que las tablas descendentes deban reflejar los cambios ascendentes
  • Optimizar el rendimiento de las consultas precalculando transformaciones complejas

Las principales características de las tablas dinámicas son

  • Intervalos de actualización configurables (de 1 minuto a 24 horas)
  • Seguimiento automático de las dependencias de las tablas de origen
  • Ajustes del tiempo de retardo objetivo para controlar la frescura de los datos
  • Procesamiento incremental para minimizar los costes de cálculo
  • Capacidades integradas de supervisión y optimización

Cada tipo de tabla tiene una finalidad distinta en la arquitectura de datos. Las tablas permanentes forman la base de tu almacén de datos, las tablas temporales facilitan los flujos de trabajo de procesamiento de datos, las tablas externas permiten la integración con fuentes de datos externas y las tablas dinámicas proporcionan transformaciones de datos automatizadas y en tiempo real.

Comparar tablas de copos de nieve 

En la tabla siguiente, hemos resumido los distintos tipos de tablas Snowflake en una guía concisa de referencia rápida: 

Tipo de mesa

Persistencia

Visibilidad

Lo mejor para

Permanente

Hasta que caiga

Cualquier sesión

Datos empresariales básicos

Temporal

Sólo para sesión

Misma sesión

Transformaciones intermedias

Externo

Almacenamiento externo

Cualquier sesión

Consulta de datos externos (por ejemplo, S3)

Dinámico

Auto-refrescante

Cualquier sesión

Análisis en tiempo real

Crear tablas: Configurar Snowflake

Antes de ejecutar los ejemplos de este tutorial, necesitarás acceder a un entorno Snowflake. Aquí tienes varias formas de conectarte y ejecutar comandos Snowflake:

1. Interfaz web Snowflake (Snowsight)

La forma más sencilla de empezar es a través de la interfaz web de Snowflake:

  1. Accede a tu cuenta cuenta Snowflake 
  2. Navegar a Hojas de cálculo
  3. Crear una nueva hoja de cálculo para ejecutar comandos SQL

2. SnowSQL (herramienta de línea de comandos)

Para acceder a la línea de comandos:

  1. Instala SnowSQL 
  2. Conéctate utilizando:
snowsql -a <account> -u <username> -d <database> -w <warehouse>

Puedes encontrar las credenciales de tu cuenta Snowflake en los siguientes lugares:

  1. URL de la cuenta: Mira en tu correo electrónico de bienvenida o en la configuración de tu cuenta
  2. Nombre de usuario: Proporcionado durante la configuración de la cuenta
  3. Base de datos: Creado o asignado por tu administrador
  4. Almacén: Creado o asignado por tu administrador

Por seguridad, nunca compartas ni comprometas estas credenciales. Almacénalos de forma segura en variables de entorno o en un archivo de configuración.

3. Conexión Python

Si utilizas Python, puedes utilizar la biblioteca snowflake-connector-python:

import snowflake.connector

conn = snowflake.connector.connect(
   user='your_username',
   password='your_password',
   account='your_account',
   warehouse='your_warehouse',
   database='your_database',
   schema='your_schema'
)

cur = conn.cursor()

cur.execute("SELECT current_version()")

Nota de seguridad importante:

  • Nunca almacenes credenciales directamente en tu código
  • Utiliza variables de entorno o gestión secreta segura
  • Para la producción, considera el uso de la autenticación por pares de claves
  • Sigue las políticas de seguridad de tu organización

Ahora que nuestra configuración está lista, ¡vamos a crear tablas!

Crear tablas en Snowflake: Ejemplos paso a paso

Ejemplo 1: Crear una tabla simple de Copo de Nieve

Vamos a crear una tabla para almacenar la información de los clientes. Este ejemplo muestra la creación de tablas básicas con distintos tipos de datos y restricciones.

-- Create a permanent table for customer data
CREATE OR REPLACE TABLE customers (
   customer_id INTEGER PRIMARY KEY,
   first_name VARCHAR(50) NOT NULL,
   last_name VARCHAR(50) NOT NULL,
   email VARCHAR(100) UNIQUE,
   date_of_birth DATE,
   created_at TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()
);

Puntos clave de este ejemplo:

  • CREATE OR REPLACE TABLE - Crea una tabla nueva o la sustituye si ya existe
  • PRIMARY KEY - Garantiza la identificación única de cada registro
  • NOT NULL - Evita los valores nulos en los campos obligatorios
  • UNIQUE - Garantiza que las direcciones de correo electrónico no estén duplicadas
  • TIMESTAMP_NTZ - Marca de tiempo sin zona horaria
  • DEFAULT - Establece automáticamente la marca de tiempo de creación

Ejemplo 2: Crear una tabla temporal

Las tablas temporales son perfectas para el tratamiento intermedio de datos. Aquí tienes un ejemplo que crea una tabla temporal para analizar los pedidos de los clientes:

-- Create a temporary table for order analysis
CREATE OR REPLACE TEMPORARY TABLE temp_order_analysis (
   order_date DATE,
   total_orders INTEGER,
   total_revenue DECIMAL(18,2)
)
AS
SELECT
   DATE_TRUNC('day', order_date) as order_date,
   COUNT(*) as total_orders,
   SUM(order_amount) as total_revenue
FROM orders
GROUP BY 1;

Puntos clave sobre las tablas temporales:

  • La palabra clave TEMPORARY indica que esta tabla sólo existirá dentro de la sesión actual. Esto significa que otros usuarios no pueden ver ni acceder a esta tabla.
  • Utilizar CREATE TABLE AS (CTAS) te permite crear y rellenar una tabla en un solo paso, combinando la definición de la tabla con una sentencia SELECT.
  • La tabla temporal se elimina automáticamente cuando finaliza tu sesión, lo que ayuda a mantener limpia la base de datos sin necesidad de limpieza manual.
  • Las tablas temporales son útiles para almacenar resultados intermedios durante transformaciones complejas de datos o flujos de trabajo de análisis.

Ejemplo 3: Crear una tabla externa en Snowflake 

Este ejemplo muestra cómo crear una tabla externa que lea datos de archivos almacenados en un cubo de almacenamiento en la nube:

-- Create file format for CSV files
CREATE OR REPLACE FILE FORMAT my_csv_format
   TYPE = CSV
   FIELD_DELIMITER = ','
   SKIP_HEADER = 1
   NULL_IF = ('NULL', 'null');

-- Create external stage
CREATE OR REPLACE STAGE my_external_stage
   URL = 's3://my-bucket/data/'
   CREDENTIALS = (AWS_KEY_ID = 'xxx' AWS_SECRET_KEY = 'xxx');

-- Create external table
CREATE OR REPLACE EXTERNAL TABLE ext_customer_data (
   customer_id VARCHAR AS (VALUE:c1::VARCHAR),
   purchase_date DATE AS (VALUE:c2::DATE),
   product_id VARCHAR AS (VALUE:c3::VARCHAR),
   amount DECIMAL(10,2) AS (VALUE:c4::DECIMAL(10,2))
)
WITH LOCATION = @my_external_stage/customers/
FILE_FORMAT = my_csv_format
PATTERN = '.*[.]csv';

La primera sentencia define una especificación de formato de archivo que indica a Snowflake cómo analizar archivos CSV externos, incluyendo el delimitador, el manejo de cabeceras y las representaciones de valores NULL.

La segunda sentencia crea un objeto stage que establece una conexión con el almacenamiento externo en la nube (en este caso, S3) utilizando las credenciales proporcionadas. Esta etapa actúa como punto de referencia para acceder a los archivos de datos externos.

La tercera sentencia crea la tabla externa propiamente dicha, utilizando definiciones de columna con cláusulas AS para convertir explícitamente los datos de cadena sin procesar del CSV en tipos de datos Snowflake adecuados. La cláusula WITH LOCATION apunta a la ruta concreta dentro de la etapa donde residen los archivos.

El parámetro PATTERN filtra los archivos que deben incluirse mediante la concordancia regex, garantizando que sólo se procesen los archivos CSV.

Requisitos previos para ejecutar esta consulta de creación de tablas externas:

1. Acceso a una cuenta Snowflake con permisos para:

  • Crear formatos de archivo
  • Crear etapas
  • Crear tablas externas

2. Credenciales válidas de AWS (AWS_KEY_ID y AWS_SECRET_KEY ) con permisos para:

  • Leer del cubo S3
  • Enumera los objetos del cubo

3. Requisitos de los datos de origen:

  • Archivos CSV almacenados en un bucket S3
  • Los archivos siguen un formato coherente con cuatro columnas
  • Los datos de columna coinciden con los tipos especificados:
  • customer_id como cadena
  • purchase_date como fecha
  • product_id como cadena
  • amount como decimal

4. Conectividad de red:

  • Acceso de red a AWS S3
  • Configuración adecuada del grupo de seguridad y del cortafuegos

5. Recursos informáticos:

  • Almacén activo con capacidad informática adecuada
  • Créditos/cuota de usuario suficientes

Ejemplo 4: Crear una tabla dinámica

Este ejemplo crea una tabla dinámica que mantiene un resumen actualizado de los datos de ventas:

-- Create a dynamic table for real-time sales analytics
CREATE OR REPLACE DYNAMIC TABLE daily_sales_summary
TARGET_LAG = '20 minutes'
WAREHOUSE = 'COMPUTE_WH'
AS
SELECT
   DATE_TRUNC('day', sale_timestamp) as sale_date,
   product_category,
   SUM(sale_amount) as total_sales,
   COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
GROUP BY 1, 2;

El parámetro TARGET_LAG de "20 minutos" define el retraso máximo permitido entre las actualizaciones de la tabla de origen y el momento en que esos cambios se reflejan en la tabla dinámica. Esto garantiza la frescura de los datos dentro de ese intervalo de tiempo.

El parámetro WAREHOUSE especifica qué recursos informáticos (en este caso COMPUTE_WH) se utilizarán para refrescar periódicamente la tabla dinámica. Este almacén debe tener la capacidad adecuada para gestionar las operaciones de actualización.

La tabla dinámica actualiza automáticamente su contenido cuando cambia la tabla sales_transactions subyacente, sin necesidad de intervención manual. Esto proporciona capacidades analíticas casi en tiempo real.

Al mantener resúmenes de ventas diarias pre-agregados y agrupados por categoría de producto, la tabla dinámica permite una consulta más rápida en comparación con el cálculo de estas métricas bajo demanda a partir de los datos brutos de las transacciones. Esto mejora el rendimiento de las consultas para los casos de uso de informes y análisis.

Cada uno de estos ejemplos muestra distintos escenarios de creación de tablas que puedes encontrar en aplicaciones del mundo real. Recuerda ajustar los nombres de las columnas, los tipos de datos y otros parámetros según tus necesidades específicas.

Buenas prácticas para crear tablas en Snowflake

Exploremos algunas de las mejores prácticas que se deben seguir al crear tablas en Snowflake para garantizar la mantenibilidad, el rendimiento y la calidad de los datos.

1. Convenciones de denominación

Utiliza siempre nombres claros y coherentes para tus tablas y columnas:

-- Good naming examples
CREATE TABLE customer_orders (
   order_id INTEGER,
   customer_email VARCHAR,
   order_date DATE
);

-- Bad naming examples
CREATE TABLE Orders123 (
   ID INTEGER,
   email VARCHAR,
   dt DATE
);

Consejos para nombrar:

  • Utiliza letras minúsculas y guiones bajos (serpiente_case)
  • Evita espacios y caracteres especiales
  • Haz que los nombres sean descriptivos pero no demasiado largos
  • Utiliza la forma singular para los nombres de las tablas (cliente no clientes)
  • Añade prefijos para diferentes entornos (dev_, test_, prod_ )

2. Tipos de datos de columna

Elige el tipo de datos adecuado para ahorrar almacenamiento y mejorar el rendimiento:

-- Good data type choices
CREATE TABLE products (
   product_id INTEGER,
   price DECIMAL(10,2),    -- For money values
   name VARCHAR(100),      -- Set a reasonable limit
   description TEXT,       -- For very long text
   is_active BOOLEAN      -- Instead of VARCHAR or INTEGER
);

Tipos de datos habituales:

  • NUMBER/INTEGER: Para números enteros
  • DECIMAL/NUMERIC: Para números decimales precisos (especialmente dinero)
  • VARCHAR: Para un texto con una longitud máxima conocida
  • TEXT: Para texto de longitud ilimitada
  • TIMESTAMP_NTZ: Para fechas y horas (sin zona horaria)
  • BOOLEAN: Para valores verdadero/falso

3. Utilizar claves de agrupación

Añade claves de agrupación para mejorar el rendimiento de la consulta:

CREATE TABLE sales (
   sale_date DATE,
   store_id INTEGER,
   product_id INTEGER,
   amount DECIMAL(10,2)
)
CLUSTER BY (sale_date, store_id);

Cuándo utilizar la agrupación:

  • Para tablas grandes (más de 1 millón de filas)
  • En columnas sobre las que filtras o unes con frecuencia
  • Normalmente columnas de fecha más 1-2 columnas más
  • No agrupes por columnas con demasiados valores únicos

4. Añadir restricciones de tabla

Utiliza restricciones para mantener limpios tus datos:

CREATE TABLE users (
   user_id INTEGER PRIMARY KEY,  -- Ensures unique IDs
   email VARCHAR(255) UNIQUE,    -- No duplicate emails
   username VARCHAR(50) NOT NULL, -- Must have a value
   age INTEGER CHECK (age >= 18) -- Must be 18 or older
);

Limitaciones importantes:

  • PRIMARY KEY: Para identificadores únicos
  • FOREIGN KEY: Para enlazar tablas
  • NOT NULL: Para los campos obligatorios
  • UNIQUE: Para campos que no pueden tener duplicados
  • CHECK: Para una simple validación de datos

5. Errores comunes que debes evitar

No lo hagas:

-- Bad practice: No primary key
CREATE TABLE orders (
   date VARCHAR,           -- Wrong data type for dates
   amount VARCHAR(10),     -- Wrong data type for numbers
   status text            -- Inconsistent case with other columns
);

Haz esto en su lugar:

-- Good practice
CREATE TABLE orders (
   order_id INTEGER PRIMARY KEY,
   order_date DATE,
   amount DECIMAL(10,2),
   status VARCHAR(20)
);

La versión mejorada garantiza la integridad de los datos con una clave primaria, utiliza tipos de datos correctos para las fechas y los números a fin de permitir un filtrado y unos cálculos eficaces, y mantiene la coherencia en las definiciones de las columnas para mejorar la legibilidad y la compatibilidad.

6. Consejos de actuación

Optimizar el rendimiento de las tablas en Snowflake puede mejorar significativamente la velocidad de consulta y reducir los costes de almacenamiento. Sigue estas prácticas recomendadas para garantizar que tus tablas sean eficientes y escalables.

  • Crea tablas más pequeñas en lugar de una tabla enorme
  • Añade descripciones de columna mediante COMENTARIO
  • Establecer reglas automáticas de limpieza de datos
  • Prueba el diseño de tu mesa con datos reales
  • Controla el uso de la mesa y ajústalo según sea necesario

7. Buenas prácticas de seguridad

Unas medidas de seguridad adecuadas son esenciales para proteger los datos sensibles y controlar el acceso. Pon en práctica estas buenas prácticas para proteger tu entorno Snowflake de accesos no autorizados y violaciones de datos.

  • Establece siempre permisos de acceso adecuados
  • Utiliza la seguridad a nivel de fila cuando sea necesario
  • Cifrar columnas sensibles
  • Controla quién puede acceder a qué
  • Revisa periódicamente los patrones de acceso

Recuerda: Una mesa bien diseñada facilita tu trabajo posterior. ¡Tómate tu tiempo para planificar la estructura de tu mesa antes de crearla!

Conclusión

En este tutorial, hemos cubierto los aspectos esenciales de la creación de tablas en Snowflake, incluyendo:

  • Diferentes tipos de tablas (permanentes, temporales, externas y dinámicas)
  • Ejemplos paso a paso para crear cada tipo
  • Buenas prácticas para el diseño y la gestión de mesas
  • Errores comunes que hay que evitar

Este conocimiento constituye la base para construir soluciones de datos eficientes y escalables en Snowflake.

Próximos pasos

Para profundizar tus conocimientos sobre Snowflake, consulta estos valiosos recursos:

1. Cursos interactivos:

2. Tutorías completas:

3. Recursos profesionales:

No olvides que la mejor forma de aprender es haciendo. Empieza a crear tablas, experimenta con distintos tipos y construye proyectos reales. Cuando te encuentres con dificultades, consulta estos recursos y sigue explorando nuevas funciones de Snowflake.

Preguntas frecuentes sobre la mesa Crear copo de nieve

¿Cuáles son los distintos tipos de tablas en Snowflake?

Snowflake admite cuatro tipos principales de tablas: tablas permanentes para el almacenamiento de datos a largo plazo, tablas temporales para uso específico de la sesión, tablas externas para consultar fuentes de datos externas y tablas dinámicas para el mantenimiento automático de los resultados de las consultas.

¿Cómo creo una tabla básica en Snowflake?

Utiliza el comando CREATE TABLE con el esquema que desees. Por ejemplo: "CREATE TABLE customers (customer_id INTEGER PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50))". Incluye tipos de datos y restricciones adecuados.

¿Qué es una tabla dinámica en Snowflake y cuándo debo utilizarla?

Las tablas dinámicas mantienen automáticamente actualizados los resultados de una consulta, de forma similar a las vistas materializadas. Son ideales para cuadros de mando en tiempo real, transformaciones automatizadas de datos y mantenimiento de datos agregados que necesitan actualizaciones frecuentes.

¿Cuáles son las mejores prácticas para dar nombre a las tablas en Snowflake?

Utiliza letras minúsculas con guiones bajos (snake_case), evita los espacios y los caracteres especiales, haz que los nombres sean descriptivos pero concisos, utiliza la forma singular para los nombres de las tablas y considera la posibilidad de añadir prefijos de entorno (dev_, test_, prod_).

¿Cómo puedo mejorar el rendimiento de las tablas en Snowflake?

Mejora el rendimiento utilizando claves de agrupación adecuadas, eligiendo tipos de datos correctos, estableciendo restricciones adecuadas, creando tablas centradas más pequeñas en lugar de grandes, y supervisando regularmente los patrones de uso de las tablas.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

Soy un creador de contenidos de ciencia de datos con más de 2 años de experiencia y uno de los mayores seguidores en Medium. Me gusta escribir artículos detallados sobre IA y ML con un estilo un poco sarcastıc, porque hay que hacer algo para que sean un poco menos aburridos. He publicado más de 130 artículos y un curso DataCamp, y estoy preparando otro. Mi contenido ha sido visto por más de 5 millones de ojos, 20.000 de los cuales se convirtieron en seguidores tanto en Medium como en LinkedIn. 

Temas

Los mejores cursos de DataCamp

curso

Introduction to Snowflake

3 hr
26.2K
This course will take you from Snowflake's foundational architecture to mastering advanced SnowSQL techniques.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Las 32 mejores preguntas y respuestas de la entrevista sobre Snowflake para 2024

¿Estás buscando actualmente un trabajo que utilice Snowflake? Prepárate con estas 32 preguntas de entrevista para conseguir el puesto.
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

tutorial

Creación y personalización de tablas dinámicas en Power BI

Aprende a crear tablas dinámicas personalizables en Power BI con formato condicional avanzado y algunos consejos de optimización.
Joleen Bothma's photo

Joleen Bothma

9 min

tutorial

Tutorial sobre cómo crear tablas de fechas en Power BI

Aprende a crear tablas de fechas en Power BI con este tutorial visual paso a paso.
Kafaru Simileoluwa's photo

Kafaru Simileoluwa

12 min

tutorial

Cómo crear modelos de datos en Excel: Guía completa

Creamos modelos de datos formateando los datos, creando relaciones, utilizando Power Query y aprovechando Power Pivot para una integración y análisis de datos sin fisuras.
Vikash Singh's photo

Vikash Singh

13 min

tutorial

Tutorial de Modelado de datos en Power BI

Descubre qué es el modelado de datos en Power BI y cómo unas buenas prácticas de modelado de datos pueden llevar tus informes de Power BI al siguiente nivel.
Joleen Bothma's photo

Joleen Bothma

11 min

tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

13 min

Ver másVer más