> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> marimo es un notebook de Python de última generación para trabajar con datos

# Uso de marimo con ClickHouse

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            Community Maintained
        </div>;
};

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

[marimo](https://marimo.io/) es un notebook reactivo de código abierto para Python con SQL integrado. Cuando ejecutas una celda o interactúas con un elemento de la UI, marimo ejecuta automáticamente las celdas afectadas (o las marca como desactualizadas), manteniendo el código y los resultados coherentes y evitando errores antes de que ocurran. Cada notebook de marimo se almacena como Python puro, se puede ejecutar como script y desplegar como aplicación.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/clickhouse-connect.gif?s=e4444eb3b097e38a5e2704368b315dd7" size="md" border alt="Conectar a ClickHouse" width="1536" height="864" data-path="images/integrations/sql-clients/marimo/clickhouse-connect.gif" />

<div id="install-marimo-sql">
  ## 1. Instala marimo con soporte para SQL
</div>

```shell theme={null}
pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.py
```

Esto debería abrir un navegador web en localhost.

<div id="connect-to-clickhouse">
  ## 2. Conectarse a ClickHouse.
</div>

Ve al panel de orígenes de datos en el lado izquierdo del editor de marimo y haz clic en 'Add database'.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/panel-arrow.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=1a7a8fd365a58a2c0e384f608e6243e5" size="sm" border alt="Agregar una nueva base de datos" width="491" height="561" data-path="images/integrations/sql-clients/marimo/panel-arrow.png" />

Se te pedirá que completes los datos de la base de datos.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/OHCdlXRrniGWimcZ/images/integrations/sql-clients/marimo/add-db-details.png?fit=max&auto=format&n=OHCdlXRrniGWimcZ&q=85&s=1b5659d759834d07398bd6a95b0e4465" size="md" border alt="Completa los datos de la base de datos" width="818" height="487" data-path="images/integrations/sql-clients/marimo/add-db-details.png" />

A continuación, tendrás una celda que puedes ejecutar para establecer una conexión.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/run-cell.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=6e5be921d5319027c13474246a431147" size="md" border alt="Ejecuta la celda para conectarte a ClickHouse" width="995" height="283" data-path="images/integrations/sql-clients/marimo/run-cell.png" />

<div id="run-sql">
  ## 3. Ejecuta SQL
</div>

Una vez que hayas configurado una conexión, puedes crear una nueva celda SQL y elegir el motor de ClickHouse.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/choose-sql-engine.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=91cb3f8da6211871526129f9e40557a7" size="md" border alt="Elegir motor SQL" width="2762" height="709" data-path="images/integrations/sql-clients/marimo/choose-sql-engine.png" />

Para esta guía, usaremos el conjunto de datos New York Taxi.

```sql theme={null}
CREATE TABLE trips (
    trip_id             UInt32,
    pickup_datetime     DateTime,
    dropoff_datetime    DateTime,
    pickup_longitude    Nullable(Float64),
    pickup_latitude     Nullable(Float64),
    dropoff_longitude   Nullable(Float64),
    dropoff_latitude    Nullable(Float64),
    passenger_count     UInt8,
    trip_distance       Float32,
    fare_amount         Float32,
    extra               Float32,
    tip_amount          Float32,
    tolls_amount        Float32,
    total_amount        Float32,
    payment_type        Enum('CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4, 'UNK' = 5),
    pickup_ntaname      LowCardinality(String),
    dropoff_ntaname     LowCardinality(String)
)
ENGINE = MergeTree
PRIMARY KEY (pickup_datetime, dropoff_datetime);
```

```sql theme={null}
INSERT INTO trips
SELECT
    trip_id,
    pickup_datetime,
    dropoff_datetime,
    pickup_longitude,
    pickup_latitude,
    dropoff_longitude,
    dropoff_latitude,
    passenger_count,
    trip_distance,
    fare_amount,
    extra,
    tip_amount,
    tolls_amount,
    total_amount,
    payment_type,
    pickup_ntaname,
    dropoff_ntaname
FROM gcs(
    'https://storage.googleapis.com/clickhouse-public-datasets/nyc-taxi/trips_0.gz',
    'TabSeparatedWithNames'
);
```

```sql theme={null}
SELECT * FROM trips LIMIT 1000;
```

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/results.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=d4ff3465f52b48f2e44dc5be952b997e" size="lg" border alt="Resultados en un DataFrame" width="947" height="415" data-path="images/integrations/sql-clients/marimo/results.png" />

Ahora puedes ver los resultados en un DataFrame. Quiero visualizar los trayectos más caros desde un punto de recogida determinado. marimo ofrece varios componentes de la UI para ayudarte. Usaré un menú desplegable para seleccionar la ubicación y altair para crear gráficos.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/dropdown-cell-chart.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=7bf4803081a52700efd91474c14395d8" size="lg" border alt="Combinación de menú desplegable, tabla y gráfico" width="2720" height="2115" data-path="images/integrations/sql-clients/marimo/dropdown-cell-chart.png" />

El modelo de ejecución reactivo de marimo también se aplica a las consultas SQL, por lo que los cambios en tu SQL desencadenarán automáticamente los cálculos posteriores de las celdas dependientes (o, de forma opcional, marcarán las celdas como desactualizadas si los cálculos son costosos). Por eso, el gráfico y la tabla cambian cuando se actualiza la consulta.

También puedes cambiar a App View para tener una interfaz más limpia con la que explorar tus datos.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ldyQZWT-cIRJh7wo/images/integrations/sql-clients/marimo/run-app-view.png?fit=max&auto=format&n=ldyQZWT-cIRJh7wo&q=85&s=d13de1f559c0b58d4c8f15828e7bbb96" size="md" border alt="Ejecutar vista de aplicación" width="2209" height="1534" data-path="images/integrations/sql-clients/marimo/run-app-view.png" />
