Introducción a las Bases de Datos
¿Qué es una Base de Datos?
Una base de datos es un sistema utilizado para almacenar, organizar y acceder a información. Permite a los usuarios introducir, gestionar y recuperar datos de forma eficiente y segura. Las bases de datos están estructuradas para manejar grandes cantidades de información, permitiendo que los datos se almacenen en tablas que pueden ser buscadas, manipuladas y mantenidas fácilmente.
Une base de données est un système utilisé pour stocker, organiser et accéder à des informations. Elle permet aux utilisateurs de saisir, gérer et récupérer des données de manière efficace et sécurisée. Les bases de données sont structurées pour gérer de grandes quantités d'informations en permettant que les données soient stockées dans des tables qui peuvent être recherchées, manipulées et entretenues facilement.
Tipos de Bases de Datos
Relacional Almacena datos en tablas estructuradas con filas y columnas, permitiendo consultas complejas usando SQL. Ejemplo: bases de datos de RRHH y CRM. ** no relacional** Maneja datos no estructurados y semiestructurados sin una estructura de tabla fija, usando formatos como clave-valor, documentos y grafos. Ejemplo: plataformas de comercio electrónico, gestión de contenido, IoT y análisis en tiempo real.
Relationnelle Stocke les données dans des tables structurées avec des lignes et des colonnes, permettant des requêtes complexes en utilisant SQL. Exemple : bases de données RH et CRM.
Non relationnelle Gère des données non structurées et semi-structurées sans structure de table fixe, en utilisant des formats tels que clé-valeur, documents et graphes. Exemple : plateformes de commerce électronique, gestion de contenu, IoT et analyses en temps réel.
Introducción a los Sistemas de Gestión de Bases de Datos (SGBD)
Software que permite a los usuarios definir, crear, mantener y controlar el acceso a la base de datos. Gestiona el almacenamiento, la manipulación y la recuperación de datos, facilitando múltiples interacciones de usuarios con diversas bases de datos.
Logiciel permettant aux utilisateurs de définir, créer, maintenir et contrôler l'accès à la base de données. Il gère le stockage, la manipulation et la récupération des données, facilitant les interactions de plusieurs utilisateurs avec diverses bases de données.
Fundamentos de las Bases de Datos Orientadas a Columnas
Almacenamiento Orientado a Filas vs. Orientado a Columnas
Bases de Datos Orientadas a Filas:- Estructura: Almacena datos por filas, lo que lo hace eficiente para operaciones de escritura y procesamiento transaccional donde el acceso a registros completos es común.
- Beneficios: Óptimo para sistemas OLTP (Procesamiento de Transacciones en Línea) como la gestión de relaciones con clientes donde las actualizaciones e inserciones rápidas son cruciales.
Bases de Datos Orientadas a Columnas:- Estructura: Almacena datos por columnas, mejorando las operaciones de lectura y el análisis de datos donde se requieren agregaciones sobre grandes conjuntos de datos.
- Beneficios: Ideal para sistemas OLAP (Procesamiento Analítico en Línea) como el almacenamiento de datos y el análisis de big data, ofreciendo alto rendimiento para consultas que acceden solo a un subconjunto de columnas.
Ventajas:- Orientadas a Filas: Recuperación rápida de datos por fila completa, implementación más sencilla, eficiente para la entrada y actualización de registros.
- Orientadas a Columnas: Mejor compresión, almacenamiento eficiente que conduce a una lectura más rápida de los datos de las columnas, optimizadas para consultar grandes conjuntos de datos, lo que reduce las operaciones de E/S.
Bases de données orientées ligne :- Estructura: Almacena los datos por filas, lo que es eficiente para las operaciones de escritura y el procesamiento transaccional donde el acceso a registros completos es común.
- Ventajas: Óptimo para sistemas OLTP (Procesamiento de Transacciones en Línea) como la gestión de relaciones con el cliente, donde las actualizaciones e inserciones rápidas son cruciales.
Bases de datos orientadas a columnas:- Estructura: Almacena los datos por columnas, mejorando las operaciones de lectura y el análisis de datos donde se necesitan agregaciones en grandes conjuntos de datos.
- Ventajas: Ideal para sistemas OLAP (Procesamiento Analítico en Línea) como el almacenamiento de datos y el análisis de grandes datos, ofreciendo un alto rendimiento para consultas que acceden únicamente a un subconjunto de columnas.
Ventajas:- Orientado a filas: Recuperación rápida de datos por fila completa, implementación más sencilla, eficaz para la entrada y actualización de registros.
- Orientado a columnas: Mejor compresión, almacenamiento eficiente que conduce a una lectura rápida de los datos de las columnas, optimizado para la consulta de grandes conjuntos de datos, lo que reduce las operaciones de entrada/salida.
Base de datos orientada a columnas
Base de Datos Orientada a Filas
Introducción a ClickHouse
¿Qué es ClickHouse?
ClickHouse es un sistema de gestión de bases de datos (DBMS) orientado a columnas de código abierto diseñado para el procesamiento analítico en línea (OLAP). Permite a los usuarios generar informes analíticos utilizando consultas SQL en tiempo real, ofreciendo alto rendimiento y escalabilidad para procesar grandes volúmenes de datos. Las características clave incluyen:
-
Almacenamiento orientado a columnas
-
Compresión de datos
-
Procesamiento de consultas distribuidas
-
Soporte SQL
-
Alto rendimiento para consultas analíticas
-
Capacidad para manejar petabytes de datos
-
Tolerancia a fallos mediante replicación
ClickHouse es particularmente adecuado para aplicaciones que requieren análisis rápidos en conjuntos de datos masivos, como inteligencia de negocios, observabilidad y almacenamiento de datos en tiempo real.
ClickHouse es un sistema de gestión de bases de datos (SGBD) orientado a columnas y de código abierto, diseñado para el procesamiento analítico en línea (OLAP). Permite a los usuarios generar informes analíticos en tiempo real utilizando consultas SQL, ofreciendo un alto rendimiento y escalabilidad para el procesamiento de grandes volúmenes de datos. Las características clave incluyen:
-
Almacenamiento orientado a columnas
-
Compresión de datos
-
Procesamiento distribuido de consultas
-
Soporte SQL
-
Alto rendimiento para consultas analíticas
-
Capacidad para gestionar petabytes de datos
-
Tolerancia a fallos gracias a la replicación
ClickHouse es particularmente adecuado para aplicaciones que requieren análisis rápidos en conjuntos de datos masivos, como inteligencia de negocios, observabilidad y almacenamiento de datos en tiempo real.
Características Clave de ClickHouse y Velocidad
-
Almacenamiento Orientado a Columnas: A menudo, solo unas pocas de las cientos de columnas en los datos de origen son necesarias para un informe. El almacenamiento orientado a columnas mejora la eficiencia al acceder solo a las columnas necesarias, reduciendo las costosas lecturas de disco.
-
Índices: ClickHouse utiliza estructuras de datos en memoria para leer solo las columnas requeridas y rangos de filas específicos, optimizando la recuperación de datos.
-
Compresión de Datos: Agrupar los valores de la misma columna mejora la compresión en comparación con los sistemas orientados a filas, ya que los valores similares son comunes en filas adyacentes. ClickHouse también emplea códecs especializados para una mayor compacidad de los datos.
-
Ejecución Vectorizada de Consultas: ClickHouse procesa los datos por columnas, mejorando la eficiencia de la caché de la CPU y permitiendo el uso de instrucciones SIMD de la CPU para operaciones más rápidas.
-
Escalabilidad: ClickHouse maximiza la utilización de recursos al aprovechar todos los núcleos de CPU y discos disponibles, no solo en un único servidor sino en todo un clúster, mejorando el rendimiento para consultas complejas.
-
Almacenamiento orientado a columnas: A menudo, solo algunas de las cientos de columnas de los datos de origen son necesarias para un informe. El almacenamiento orientado a columnas mejora la eficiencia al acceder únicamente a las columnas necesarias, reduciendo así las costosas lecturas de disco.
-
Índice: ClickHouse utiliza estructuras de datos en memoria para leer únicamente las columnas requeridas y los rangos de filas específicos, optimizando así la recuperación de datos.
-
Compresión de datos: Agrupar los valores de una misma columna mejora la compresión en comparación con los sistemas orientados a filas, ya que los valores similares son comunes en las filas adyacentes. ClickHouse también utiliza códecs especializados para una compacidad aún mayor de los datos.
-
Ejecución de consultas vectorizadas: ClickHouse procesa los datos por columnas, mejorando la eficiencia de la caché de la CPU y permitiendo el uso de instrucciones SIMD de la CPU para operaciones más rápidas.
-
Escalabilidad: ClickHouse maximiza el uso de los recursos al explotar todos los núcleos de CPU y los discos disponibles, no solo en un único servidor sino en todo un clúster, mejorando así el rendimiento para consultas complejas.
Primary Key, Index & granule
Primary Key:
-
Determina el orden de clasificación físico de los datos en el disco
-
Se utiliza para crear un índice disperso
Índice:
-
El índice se crea para cada N filas (por defecto 8192), llamado gránulo
-
Almacenado en el archivo primary.idx
-
Se utiliza para localizar rápidamente bloques de datos relevantes
Gránulos:
-
Un gránulo es un grupo lógico de filas (por defecto 8192 filas)
-
Los datos se dividen en múltiples partes, y cada parte se divide en gránulos
Cómo funcionan juntos:
-
Cuando se ejecuta una consulta, ClickHouse utiliza la clave primaria para buscar en el índice disperso
-
El índice ayuda a identificar qué gránulos pueden contener datos relevantes
-
ClickHouse luego carga solo los gránulos coincidentes en la memoria
-
Los datos dentro de los gránulos se procesan para encontrar las filas coincidentes exactas
Arquitectura de ClickHouse
Visión general de la arquitectura de ClickHouse
-
El motor ClickHouse es un tipo de motor de tabla que determina cómo y dónde se almacenan los datos, cómo se ejecutan las consultas y las capacidades de concurrencia y replicación de la base de datos. Cada motor está optimizado para casos de uso específicos, proporcionando diversas funcionalidades como el particionamiento de datos, la indexación y el soporte para diferentes tipos de consultas.
-
Moteur : Le moteur ClickHouse est un type de moteur de table qui détermine comment et où les données sont stockées, comment les requêtes sont exécutées, ainsi que les capacités de concurrence et de réplication de la base de données. Chaque moteur est optimisé pour des cas d'utilisation spécifiques, offrant diverses fonctionnalités telles que le partitionnement des données, l'indexation et le support pour différents types de requêtes.
Motores ClickHouse
Familia MergeTree:
-
MergeTree: El motor más versátil y comúnmente utilizado, diseñado para operaciones de lectura y escritura de alto rendimiento, compatible con particionamiento de datos, claves primarias y replicación de datos.
-
ReplacingMergeTree: Permite la deduplicación de filas durante las fusiones basándose en la clave de ordenación.
-
SummingMergeTree: Suma las columnas numéricas para las filas con la misma clave de ordenación durante las fusiones.
-
AggregatingMergeTree: Agrega datos durante las fusiones utilizando funciones de agregación especificadas.
-
CollapsingMergeTree: Colapsa filas con la misma clave de ordenación durante las fusiones, basándose en una columna especial 'Sign'.
-
VersionedCollapsingMergeTree: Extiende CollapsingMergeTree con control de versiones para las filas.
-
GraphiteMergeTree: Especializado para almacenar datos de series temporales.
Motores de Integración:
-
ODBC: Permite consultar bases de datos externas utilizando ODBC.
-
JDBC: Permite consultar bases de datos externas utilizando JDBC.
-
MySQL: Para consultar bases de datos MySQL.
-
MongoDB: Permite consultar bases de datos MongoDB.
-
HDFS: Para trabajar con datos almacenados en el Sistema de Archivos Distribuido de Hadoop.
-
S3: Permite trabajar con datos almacenados en Amazon S3.
-
Kafka: Para trabajar con flujos de Apache Kafka.
-
Famille MergeTree :
-
MergeTree : Le moteur le plus polyvalent et le plus utilisé, conçu pour des opérations de lecture et d'écriture à haute performance, prenant en charge le partitionnement des données, les clés primaires et la réplication des données.
-
ReplacingMergeTree : Permet la déduplication des lignes pendant les fusions basées sur la clé de tri.
-
SummingMergeTree : Somme les colonnes numériques pour les lignes ayant la même clé de tri pendant les fusions.
-
AggregatingMergeTree : Agrège les données pendant les fusions en utilisant des fonctions d'agrégation spécifiées.
-
CollapsingMergeTree: Colapsa las filas con la misma clave de ordenación durante las fusiones, basándose en una columna especial 'Signo'.
-
VersionedCollapsingMergeTree: Extiende CollapsingMergeTree con control de versiones para las filas.
-
GraphiteMergeTree: Especializado para el almacenamiento de datos de series temporales.
Primeros pasos con ClickHouse
Instalación y configuración - en Mac o Linux
- Instalar librería
curl https://clickhouse.com/ | sh
- Ejecuta el siguiente comando para iniciar el servidor de ClickHouse:
./clickhouse server
- Abre una nueva Terminal y conéctate al servidor
clickhouse-client
- Consultar archivos remotos
- -Verificar el archivo
SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/ontime/csv_by_year/*.csv.gz', CSVWithNames) limit 10;
-
-Conteo Básico
SELECT count() FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/ontime/csv_by_year/*.csv.gz', CSVWithNames) limit 10; -
-El número de retrasos por aerolínea para 2007
SELECT IATA_CODE_Reporting_Airline AS Carrier, count()
FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/ontime/csv_by_year/.csv.gz')
WHERE DepDelay>10 AND Year=2007
GROUP BY Carrier
ORDER BY count(*) DESC limit 5;
**Resultados** \\ ┌─Carrier─┬─count()─┐
- │ WN │ 296293 │ └─────────┴─────────┘ ┌─Carrier─┬─count()─┐
- │ AA │ 176203 │
- │ MQ │ 145630 │
- │ US │ 135987 │
- │ UA │ 128174 │ └─────────┴─────────┘
5 filas en el conjunto. Transcurrido: 420.586 seg. Procesadas 204.84 millones de filas, 11.66 GB (487.03 mil filas/s., 27.72 MB/s.) Uso máximo de memoria: 1.18 GiB.
## Ejecutando Tu Primera Consulta
#### Crear tabla
CREATE TABLEontime
(
Year UInt16,
Quarter UInt8,
Month UInt8,
DayofMonth UInt8,
DayOfWeek UInt8,
FlightDate Date,
Reporting_Airline LowCardinality(String),
DOT_ID_Reporting_Airline Int32,
IATA_CODE_Reporting_Airline LowCardinality(String),
Tail_Number LowCardinality(String),
Flight_Number_Reporting_AirlineLowCardinality(String),
OriginAirportID Int32,
OriginAirportSeqID Int32,
OriginCityMarketID Int32,
Origin FixedString(5),
OriginCityName LowCardinality(String),
OriginState FixedString(2),
OriginStateFips FixedString(2),
OriginStateName LowCardinality(String),
OriginWac Int32,
DestAirportID Int32,
DestAirportSeqID Int32,
DestCityMarketID Int32,
Dest FixedString(5),
DestCityName LowCardinality(String),
DestState FixedString(2),
DestStateFips FixedString(2),
DestStateName LowCardinality(String),
DestWac Int32,
CRSDepTime Int32,
DepTime Int32,
DepDelay Int32,
DepDelayMinutes Int32,
DepDel15 Int32,
DepartureDelayGroups LowCardinality(String),
DepTimeBlk LowCardinality(String),
TaxiOut Int32,
WheelsOff LowCardinality(String),
WheelsOn LowCardinality(String),
TaxiIn Int32,
CRSArrTime Int32,
ArrTime Int32,
ArrDelay Int32,
ArrDelayMinutes Int32,
ArrDel15 Int32,
ArrivalDelayGroups LowCardinality(String),
ArrTimeBlk LowCardinality(String),
Cancelled Int8,
CancellationCode FixedString(1),
Diverted Int8,
CRSElapsedTime Int32,
ActualElapsedTime Int32,
AirTime Int32,
Flights Int32,
Distance Int32,
DistanceGroup Int8,
CarrierDelay Int32,
WeatherDelay Int32,
NASDelay Int32,
SecurityDelay Int32,
LateAircraftDelay Int32,
FirstDepTime Int16,
TotalAddGTime Int16,
LongestAddGTime Int16,
DivAirportLandings Int8,
DivReachedDest Int8,
DivActualElapsedTime Int16,
DivArrDelay Int16,
DivDistance Int16,
Div1Airport LowCardinality(String),
Div1AirportID Int32,
Div1AirportSeqID Int32,
Div1WheelsOn Int16,
Div1TotalGTime Int16,
Div1LongestGTime Int16,
Div1WheelsOff Int16,
Div1TailNum LowCardinality(String),
Div2Airport LowCardinality(String),
Div2AirportID Int32,
Div2AirportSeqID Int32,
Div2WheelsOn Int16,
Div2TotalGTime Int16,
Div2LongestGTime Int16,
Div2WheelsOff Int16,
Div2TailNum LowCardinality(String),
Div3Airport LowCardinality(String),
Div3AirportID Int32,
Div3AirportSeqID Int32,
Div3WheelsOn Int16,
Div3TotalGTime Int16,
Div3LongestGTime Int16,
Div3WheelsOff Int16,
Div3TailNum LowCardinality(String),
Div4Airport LowCardinality(String),
Div4AirportID Int32,
Div4AirportSeqID Int32,
Div4WheelsOn Int16,
Div4TotalGTime Int16,
Div4LongestGTime Int16,
Div4WheelsOff Int16,
Div4TailNum LowCardinality(String),
Div5Airport LowCardinality(String),
Div5AirportID Int32,
Div5AirportSeqID Int32,
Div5WheelsOn Int16,
Div5TotalGTime Int16,
Div5LongestGTime Int16,
Div5WheelsOff Int16,
Div5TailNum LowCardinality(String)
) ENGINE = MergeTree
ORDER BY (Year, Quarter, Month, DayofMonth, FlightDate, IATA_CODE_Reporting_Airline);
#### Cargar los datos - 1M de registros cargados y solo 2002
INSERT INTO ontime SELECT *
FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/ontime/csv_by_year/2001.csv.gz', CSVWithNames)
WHERE Year=2001 limit 1000000
SETTINGS max_insert_threads = 40;
- Número de retrasos por aeropuerto
SELECT Origin, count(*) AS c
FROM ontime
WHERE DepDelay>10
GROUP BY Origin
ORDER BY c DESC
LIMIT 10;
#### Consultar datos locales - El archivo es local
Usando el conjunto de datos de Quejas de NY.
[QUEJAS DEL NYPD](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243/about_data)
describe table file("/Users/ [you]/user_files/nypd_complaint.tsv")
select * from file("/Users/ [you]/user_files/nypd_complaint.tsv") limit 10
##### Análisis rápido
- Recuento de quejas por tipo de delito
SELECT IFNULL(NYPD_Complaint_Data_Current_Year_To_Date.OFNS_DESC, 'Unknown') AS Crime_Type,
COUNT(*) AS Complaint_Count
FROM url('https://data.cityofnewyork.us/api/views/5uac-w243/rows.csv?accessType=DOWNLOAD', CSVWithNames)
AS NYPD_Complaint_Data_Current_Year_To_Date
GROUP BY Crime_Type ORDER BY Complaint_Count DESC limit 10
- Delitos más comunes por la noche
SELECT IFNULL(NYPD_Complaint.OFNS_DESC, 'Unknown') AS Crime_Type,
COUNT(*) AS Complaint_Count
FROM url('https://data.cityofnewyork.us/api/views/5uac-w243/rows.csv?accessType=DOWNLOAD', CSVWithNames)
AS NYPD_Complaint
WHERE (NYPD_Complaint.CMPLNT_FR_TM>= '18:00:00' OR NYPD_Complaint.CMPLNT_FR_TM<= '06:00:00')
GROUP BY Crime_Type ORDER BY Complaint_Count DESC limit 10
Primeros pasos con ClickHouse Cloud
chDB - Una visión general
Visión general
chDB es un motor SQL OLAP (Procesamiento Analítico en Línea) en proceso impulsado por ClickHouse. Está diseñado para ser una base de datos incrustada que lleva el poder de ClickHouse a las aplicaciones sin la necesidad de una instalación de servidor separada. chDB es desarrollado por ClickHouse, Inc. y colaboradores de código abierto.
Las características clave de chDB incluyen:
-
Operación sin servidor - no es necesario instalar o ejecutar servicios de ClickHouse
-
Soporte para múltiples lenguajes de programación incluyendo Python, Go, Rust, NodeJS y Bun
-
Capacidad para trabajar con varios formatos de datos como Parquet, CSV, JSON, Arrow y ORC
-
Funciones Definidas por el Usuario (UDFs) personalizadas
chDB est un moteur OLAP (Online Analytical Processing) SQL en cours d'exécution, alimenté par ClickHouse. Il est conçu pour être une base de données embarquée qui apporte la puissance de ClickHouse aux applications sans nécessiter d'installation de serveur séparée. chDB est développé par ClickHouse, Inc. et des contributeurs open source.
Les principales caractéristiques de chDB incluent :
-
Fonctionnement sans serveur - pas besoin d'installer ou d'exécuter des services ClickHouse
-
Prise en charge de plusieurs langages de programmation, y compris Python, Go, Rust, NodeJS et Bun
-
Capacité à travailler avec divers formats de données tels que Parquet, CSV, JSON, Arrow et ORC
-
Fonctions définies par l'utilisateur (UDFs) personnalisées
Caso de Uso - ¿Por qué usar chDB?
Basado en la información proporcionada, aquí hay algunos casos de uso prácticos para chDB en aplicaciones del mundo real:
-
Análisis de datos en notebooks de Jupyter: chDB permite a los usuarios ejecutar consultas de ClickHouse directamente en notebooks de Jupyter, lo que facilita a los científicos y analistas de datos trabajar con grandes conjuntos de datos sin necesidad de un servidor ClickHouse separado.
-
Análisis integrados en aplicaciones: Los desarrolladores pueden integrar chDB en sus aplicaciones para proporcionar capacidades analíticas rápidas sin necesidad de un servidor de base de datos separado.
-
Procesamiento de grandes conjuntos de datos localmente: chDB permite el procesamiento de grandes conjuntos de datos (por ejemplo, archivos Parquet, CSV, JSON) en una máquina local sin necesidad de configurar un sistema de base de datos completo.
-
Prototipos rápidos: Los ingenieros y analistas de datos pueden prototipar y probar rápidamente consultas en grandes conjuntos de datos sin implementar un clúster completo de ClickHouse.
-
Entornos sin servidor: chDB se puede utilizar en funciones sin servidor para proporcionar capacidades analíticas sin gestionar la infraestructura de la base de datos.
-
Procesamiento de pipelines de datos: chDB se puede integrar en pipelines de datos para transformaciones y agregaciones rápidas.
Basado en la información proporcionada, aquí hay algunos casos de uso prácticos de chDB en aplicaciones reales:
-
Análisis de datos en notebooks Jupyter: chDB permite a los usuarios ejecutar consultas ClickHouse directamente en notebooks Jupyter, facilitando el trabajo de los científicos y analistas de datos con grandes conjuntos de datos sin necesidad de un servidor ClickHouse separado.
-
Analítica incrustada en aplicaciones: Los desarrolladores pueden integrar chDB en sus aplicaciones para proporcionar capacidades analíticas rápidas sin requerir un servidor de base de datos separado.
-
Procesamiento de grandes conjuntos de datos localmente: chDB permite procesar grandes conjuntos de datos (por ejemplo, archivos Parquet, CSV, JSON) en una máquina local sin tener que configurar un sistema de base de datos completo.
-
Prototipado rápido: Los ingenieros de datos y los analistas pueden prototipar y probar rápidamente consultas en grandes conjuntos de datos sin desplegar un clúster completo de ClickHouse.
-
Entornos sin servidor: chDB se puede utilizar en funciones sin servidor para proporcionar capacidades analíticas sin tener que gestionar una infraestructura de base de datos.
-
Procesamiento de pipelines de datos: chDB se puede integrar en pipelines de datos para transformaciones y agregaciones rápidas de datos.
