> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Carga en ClickHouse datos de scraping web y automatización desde Apify

# Conectar Apify a 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>
            Mantenimiento de la comunidad
        </div>;
};

<CommunityMaintainedBadge />

[Apify](https://apify.com/) es una plataforma de web scraping y automatización. En ella puedes crear, ejecutar y escalar programas serverless en la nube llamados [**Actors**](https://docs.apify.com/platform/actors). Los Actors extraen datos de sitios web, rastrean la web, procesan datos o automatizan flujos de trabajo. Cada ejecución de un Actor genera una salida estructurada almacenada en [**Datasets**](https://docs.apify.com/platform/storage/dataset) (colecciones de objetos JSON).

Carga en ClickHouse los datos extraídos o procesados para análisis, monitoreo o pipelines de enriquecimiento.

<div id="key-concepts">
  ## Conceptos clave
</div>

| Concepto de Apify                                                    | Qué es                                                                                                                                                                                                                       |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Actor](https://docs.apify.com/platform/actors)**                  | Un programa serverless en la nube que se ejecuta en la plataforma de Apify. Hay miles de Actors listos para usar disponibles en la [Apify Store](https://apify.com/store).                                                   |
| **[Dataset](https://docs.apify.com/platform/storage/dataset)**       | El resultado de la ejecución de un Actor. Una colección de objetos JSON similar a una tabla, que puede recuperarse como JSON, CSV, XML u otros formatos mediante la [Apify API](https://docs.apify.com/api/v2).              |
| **[Webhook](https://docs.apify.com/platform/integrations/webhooks)** | Una llamada HTTP basada en eventos que se activa cuando la ejecución de un Actor finaliza correctamente, falla o alcanza otros eventos de su ciclo de vida. Usa webhooks para automatizar el pipeline de Apify a ClickHouse. |

<div id="setup-guide">
  ## Guía de configuración
</div>

<Steps>
  <Step title="Recopila los detalles de conexión de ClickHouse" id="1-gather-your-connection-details">
    Para conectarse a ClickHouse con HTTP(S), necesita esta información:

    | Parámetro(s)              | Descripción                                                                                                                       |
    | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | Normalmente, el puerto es 8443 cuando se usa TLS o 8123 cuando no se usa TLS.                                                     |
    | `DATABASE NAME`           | De forma predeterminada, existe una base de datos llamada `default`; use el nombre de la base de datos a la que desea conectarse. |
    | `USERNAME` and `PASSWORD` | De forma predeterminada, el nombre de usuario es `default`. Use el nombre de usuario adecuado para su caso de uso.                |

    Los detalles de su servicio de ClickHouse Cloud están disponibles en la consola de ClickHouse Cloud.
    Seleccione un servicio y haga clic en **Connect**:

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="Botón Connect del servicio de ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    Elija **HTTPS**. Los detalles de conexión se muestran en un comando `curl` de ejemplo.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="Detalles de conexión HTTPS de ClickHouse Cloud" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Si usa ClickHouse autogestionado, los detalles de conexión los establece su administrador de ClickHouse.
  </Step>

  <Step title="Requisitos previos de Apify" id="2-apify-prerequisites">
    También necesitarás lo siguiente:

    * Una [cuenta de Apify](https://console.apify.com/sign-up) (hay un nivel gratuito disponible).
    * Un [token de API de Apify](https://docs.apify.com/platform/integrations/api#api-token), que encontrarás en **Settings > Integrations** en la [Apify Console](https://console.apify.com/).
    * Node.js 18+ instalado localmente (para los ejemplos en JavaScript).
  </Step>

  <Step title="Instala las dependencias" id="3-install-dependencies">
    Instala el cliente de JavaScript de Apify y el cliente de JavaScript de ClickHouse:

    ```bash theme={null}
    npm install apify-client @clickhouse/client
    ```

    <Note>
      Apify también ofrece un [cliente de Python](https://docs.apify.com/api/client/python). Si prefieres Python, instala `apify-client` con pip y usa [clickhouse-connect](/docs/es/integrations/language-clients/python/index) para ClickHouse.
    </Note>
  </Step>

  <Step title="Crea una tabla de destino en ClickHouse" id="4-create-a-target-table">
    Crea una tabla para almacenar los datos extraídos. El esquema depende del Actor que uses. Este ejemplo usa [MergeTree](/docs/es/reference/engines/table-engines/mergetree-family/mergetree) para un Actor de scraping de productos:

    ```sql theme={null}
    CREATE TABLE apify_products
    (
        url        String,
        title      String,
        price      Float64,
        currency   String,
        scraped_at DateTime DEFAULT now()
    )
    ENGINE = MergeTree()
    ORDER BY (scraped_at, url);
    ```
  </Step>

  <Step title="Obtén el dataset de Apify y cárgalo en ClickHouse" id="5-fetch-and-load">
    El siguiente script obtiene los resultados de una ejecución de un Actor de Apify y los inserta en ClickHouse:

    ```javascript theme={null}
    import { ApifyClient } from 'apify-client';
    import { createClient } from '@clickhouse/client';

    // Inicializar clientes
    const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
    const clickhouse = createClient({
        url: 'https://YOUR_CLICKHOUSE_HOST:8443',
        username: 'default',
        password: 'YOUR_CLICKHOUSE_PASSWORD',
        database: 'default',
    });

    // Obtener elementos del dataset de la última ejecución de un Actor
    const run = await apify.actor('YOUR_ACTOR_ID').call();
    const { items } = await apify.dataset(run.defaultDatasetId).listItems();

    console.log(`Fetched ${items.length} items from Apify dataset.`);

    // Insertar en ClickHouse
    await clickhouse.insert({
        table: 'apify_products',
        values: items,
        format: 'JSONEachRow',
    });

    console.log(`Inserted ${items.length} rows into ClickHouse.`);
    await clickhouse.close();
    ```

    <Tip>
      Para datasets grandes, pagina los resultados con los parámetros `limit` y `offset` del endpoint [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items). También puedes pasar `clean=true` para recuperar solo elementos no vacíos y deduplicados.
    </Tip>
  </Step>

  <Step title="Automatiza con webhooks" id="6-automate-with-webhooks">
    En lugar de ejecutar el script manualmente, automatiza el pipeline para que los datos se carguen en ClickHouse cada vez que termine un Actor:

    1. En la [Apify Console](https://console.apify.com/), ve a tu Actor y abre la pestaña **Integrations**.
    2. Añade un webhook nuevo con:
       * **Event type:** `ACTOR.RUN.SUCCEEDED`
       * **Action:** un HTTP POST a tu endpoint de carga, o activa otro Actor que gestione la inserción en ClickHouse.
    3. El payload del webhook incluye `defaultDatasetId`, que puedes usar para obtener los resultados de la ejecución.

    Consulta la [documentación de webhooks de Apify](https://docs.apify.com/platform/integrations/webhooks) para ver los detalles del payload y las opciones de configuración.

    Otra alternativa es usar [Apify Schedules](https://docs.apify.com/platform/schedules) para ejecutar Actors con una programación tipo cron, combinado con webhooks para el paso de carga.
  </Step>
</Steps>

<div id="best-practices">
  ## Buenas prácticas
</div>

<div id="fetching-data-from-apify">
  ### Recuperación de datos de Apify
</div>

Utiliza la biblioteca cliente de Apify (`apify-client` para [JavaScript](https://docs.apify.com/api/client/js) o [Python](https://docs.apify.com/api/client/python)) en lugar de hacer solicitudes HTTP directas. Se encarga de la paginación, los reintentos y la autenticación por ti. Para datasets grandes, pagina los resultados con los parámetros `limit` y `offset` del endpoint [List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items).

<div id="loading-into-clickhouse">
  ### Carga en ClickHouse
</div>

Utiliza el formato [`JSONEachRow`](/docs/es/reference/formats/JSON/JSONEachRow) al insertar datos en ClickHouse. Se corresponde directamente con la salida JSON de Apify, sin necesidad de realizar ninguna transformación.

Haz que el esquema de la tabla de ClickHouse coincida con los campos de salida del Actor. Consulta el esquema de salida del Actor en su página de [Apify Store](https://apify.com/store) o en la pestaña **Dataset** después de una ejecución.

<div id="performance">
  ### Rendimiento
</div>

Para inserciones de alto rendimiento desde el cliente de JavaScript, siga los [Consejos para optimizar el rendimiento](/docs/es/integrations/language-clients/js/index#tips-for-performance-optimizations). Agrupe las filas en lotes de inserción más grandes en lugar de insertarlas una por una, y considere las [inserciones asíncronas](/docs/es/concepts/features/operations/insert/asyncinserts) cuando la agrupación en lotes del lado del cliente no sea viable.

<div id="security">
  ### Seguridad
</div>

Los ejemplos de esta página usan el usuario y la base de datos `default` para simplificar. En producción, cree un usuario específico con los privilegios mínimos necesarios para insertar datos en la tabla de destino y almacene las credenciales de forma segura (por ejemplo, en variables de entorno o en un gestor de secretos, en lugar de subirlas al código fuente). Consulte [Gestión de acceso a Cloud](/docs/es/products/cloud/guides/security/cloud-access-management/index) para obtener más información.

<div id="related-resources">
  ## Recursos relacionados
</div>

* [Documentación de la plataforma Apify](https://docs.apify.com)
* [Referencia de la API de Apify](https://docs.apify.com/api/v2)
* [Cliente de JavaScript de Apify](https://docs.apify.com/api/client/js)
* [Cliente de Python de Apify](https://docs.apify.com/api/client/python)
* [Apify Store (Actors listos para usar)](https://apify.com/store)
* [Descripción general de las integraciones de Apify](https://docs.apify.com/platform/integrations)
* [Cliente de JavaScript de ClickHouse](/docs/es/integrations/language-clients/js/index)
