Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Uso de la interfaz HTTP de ClickHouse en Azure Data Factory

La función de tabla azureBlobStorage es una forma rápida y práctica de ingestar datos desde Azure Blob Storage en ClickHouse. Sin embargo, no siempre es la opción adecuada por las siguientes razones:

  • Es posible que sus datos no estén almacenados en Azure Blob Storage; por ejemplo, podrían estar en Azure SQL Database, Microsoft SQL Server o Cosmos DB.
  • Las políticas de seguridad pueden impedir por completo el acceso externo a Blob Storage; por ejemplo, si la cuenta de almacenamiento está restringida y no tiene ningún endpoint público.

En estos casos, puede usar Azure Data Factory junto con la interfaz HTTP de ClickHouse para enviar datos desde los servicios de Azure a ClickHouse.

Este método invierte el flujo: en lugar de que ClickHouse extraiga los datos de Azure, Azure Data Factory envía los datos a ClickHouse. Este enfoque normalmente requiere que su instancia de ClickHouse sea accesible desde internet.

Convertir ClickHouse en un servicio REST

Azure Data Factory permite enviar datos a sistemas externos a través de HTTP en formato JSON. Podemos usar esta capacidad para insertar datos directamente en ClickHouse mediante la interfaz HTTP de ClickHouse. Puede obtener más información en la documentación de interfaz HTTP de ClickHouse.

Para este ejemplo, solo necesitamos especificar la tabla de destino, definir el formato de los datos de entrada como JSON e incluir opciones para permitir un procesamiento más flexible de las marcas de tiempo.

INSERT INTO my_table
SETTINGS 
    date_time_input_format='best_effort',
    input_format_json_read_objects_as_strings=1
FORMAT JSONEachRow

Para enviar esta consulta como parte de una petición HTTP, simplemente pásela como una cadena codificada en URL al parámetro de consulta de su endpoint de ClickHouse:

https://your-clickhouse-url.com?query=INSERT%20INTO%20my_table%20SETTINGS%20date_time_input_format%3D%27best_effort%27%2C%20input_format_json_read_objects_as_strings%3D1%20FORMAT%20JSONEachRow%0A

Ahora puedes enviar datos en formato JSON a esta URL. Los datos deben coincidir con la estructura de la tabla de destino. Aquí tienes un ejemplo sencillo con curl, suponiendo una tabla con tres columnas: col_1, col_2 y col_3.

curl \
    -XPOST "https://your-clickhouse-url.com?query=<our_URL_encded_query>" \
    --data '{"col_1":9119,"col_2":50.994,"col_3":"2019-06-01 00:00:00"}'

También puedes enviar un array JSON de objetos o JSON Lines (objetos JSON delimitados por saltos de línea). Azure Data Factory usa el formato de array JSON, que funciona perfectamente con la entrada JSONEachRow de ClickHouse.

Como puedes ver, en este paso no necesitas hacer nada especial del lado de ClickHouse. La interfaz HTTP ya ofrece todo lo necesario para actuar como un endpoint de tipo REST; no hace falta ninguna configuración adicional.

Ahora que hemos hecho que ClickHouse se comporte como un endpoint REST, es hora de configurar Azure Data Factory para usarlo.

En los siguientes pasos, crearemos una instancia de Azure Data Factory, configuraremos un Linked Service para tu instancia de ClickHouse, definiremos un Dataset para el REST sink y crearemos una actividad Copy Data para enviar datos desde Azure a ClickHouse.

Crear una instancia de Azure Data Factory

Esta guía asume que tienes acceso a una cuenta de Microsoft Azure y que ya has configurado una suscripción y un grupo de recursos. Si ya tienes Azure Data Factory configurado, puedes omitir este paso sin problema y pasar al siguiente usando tu servicio existente.

  1. Inicia sesión en el Microsoft Azure Portal y haz clic en Create a resource.

    Página principal de Azure Portal
  2. En el panel de categorías de la izquierda, selecciona Analytics y luego haz clic en Data Factory en la lista de servicios populares.

    Nuevo recurso de Azure Portal
  3. Selecciona tu suscripción y grupo de recursos, introduce un nombre para la nueva instancia de Data Factory, elige la región y deja la versión en V2.

    Nuevo Data Factory de Azure Portal
  4. Haz clic en Review + Create y luego en Create para iniciar la implementación.

    Confirmación del nuevo Data Factory de Azure Portal
    Creación correcta del nuevo Data Factory de Azure Portal

Una vez que la implementación se haya completado correctamente, podrás empezar a usar tu nueva instancia de Azure Data Factory.

Creación de un nuevo linked service basado en REST

  1. Inicia sesión en el Microsoft Azure Portal y abre tu instancia de Data Factory.

    Página de inicio de Azure Portal con Data Factory
  2. En la página de información general de Data Factory, haz clic en Launch Studio.

    Página de Data Factory en Azure Portal
  3. En el menú de la izquierda, selecciona Manage, luego ve a Linked services y haz clic en + New para crear un nuevo linked service.

    Botón de nuevo linked service de Azure Data Factory
  4. En la barra de búsqueda de New linked service, escribe REST, selecciona REST y haz clic en Continue para crear una instancia del conector REST.

    Búsqueda de nuevo linked service en Azure Data Factory
  5. En el panel de configuración del linked service, introduce un nombre para tu nuevo servicio, haz clic en el campo Base URL y luego en Add dynamic content (este enlace solo aparece cuando el campo está seleccionado).

    Panel de New Lined Service
  6. En el panel de contenido dinámico puedes crear una URL parametrizada, lo que te permite definir la consulta más adelante al crear datasets para distintas tablas; esto hace que el linked service se pueda reutilizar.

    Base URL vacía de New Linked Service
  7. Haz clic en el "+" junto al campo de filtro y agrega un nuevo parámetro; asígnale el nombre pQuery, establece el tipo en String y el valor predeterminado en SELECT 1. Haz clic en Save.

    Parameters de New Linked Service
  8. En el campo de expresión, introduce lo siguiente y haz clic en OK. Reemplaza your-clickhouse-url.com por la dirección real de tu instancia de ClickHouse.

    @{concat('https://your-clickhouse-url.com:8443/?query=', encodeUriComponent(linkedService().pQuery))}
    Campo de expresión de New Linked Service completado
  9. De vuelta en el formulario principal, selecciona basic authentication, introduce el username y la password que usas para conectarte a tu interfaz HTTP de ClickHouse y haz clic en Test connection. Si todo está configurado correctamente, verás un mensaje de éxito.

    Comprobación de conexión de New Linked Service
  10. Haz clic en Create para finalizar la configuración.

    Lista de Linked Services

Ahora deberías ver en la lista el linked service basado en REST que acabas de registrar.

Creación de un nuevo conjunto de datos para la interfaz HTTP de ClickHouse

Ahora que tenemos un servicio vinculado configurado para la interfaz HTTP de ClickHouse, podemos crear un conjunto de datos que Azure Data Factory usará para enviar datos a ClickHouse.

En este ejemplo, insertaremos una pequeña parte de Environmental Sensors Data.

  1. Abra la consola de consultas de ClickHouse que prefiera; puede ser la interfaz web de ClickHouse Cloud, el cliente de CLI o cualquier otra interfaz que use para ejecutar consultas, y cree la tabla de destino:

    CREATE TABLE sensors
    (
        sensor_id UInt16,
        lat Float32,
        lon Float32,
        timestamp DateTime,
        temperature Float32
    )
    ENGINE = MergeTree
    ORDER BY (timestamp, sensor_id);
  2. En Azure Data Factory Studio, seleccione Author en el panel izquierdo. Pase el cursor sobre el elemento Dataset, haga clic en el icono de tres puntos y elija New dataset.

    Nuevo elemento de conjunto de datos
  3. En la barra de búsqueda, escriba REST, seleccione REST y haga clic en Continue. Introduzca un nombre para su conjunto de datos y seleccione el linked service que creó en el paso anterior. Haga clic en OK para crear el conjunto de datos.

    Nueva página de conjunto de datos
  4. Ahora debería ver el conjunto de datos recién creado en la sección Datasets del panel Factory Resources a la izquierda. Seleccione el conjunto de datos para abrir sus propiedades. Verá el parámetro pQuery que se definió en el servicio vinculado. Haga clic en el campo de texto Value. Después, haga clic en Add dynamic content.

    Propiedades del nuevo conjunto de datos
  5. En el panel que se abre, pegue la siguiente consulta:

    INSERT INTO sensors
    SETTINGS 
        date_time_input_format=''best_effort'', 
        input_format_json_read_objects_as_strings=1 
    FORMAT JSONEachRow
Consulta del nuevo conjunto de datos
  1. Haga clic en OK para guardar la expresión. Haga clic en Test connection. Si todo está configurado correctamente, verá el mensaje Connection successful. Haga clic en Publish all en la parte superior de la página para guardar los cambios.
    Conexión correcta del nuevo conjunto de datos

Configuración de un conjunto de datos de ejemplo

En este ejemplo, no usaremos el Environmental Sensors Dataset completo, sino solo un pequeño subconjunto disponible en Sensors Dataset Sample.

Cargue el conjunto de datos en Azure Blob Storage (u otro servicio de almacenamiento que prefiera). Luego, en Azure Data Factory Studio, vaya al panel Factory Resources. Cree un nuevo conjunto de datos que apunte a los datos cargados. Haga clic en Publish all para guardar los cambios.

Crear una actividad de copia para transferir datos a ClickHouse

Ahora que hemos configurado tanto los datasets de entrada como de salida, podemos crear una actividad de Copy Data para transferir datos de nuestro dataset de ejemplo a la tabla sensors de ClickHouse.

  1. Abra Azure Data Factory Studio y vaya a la pestaña Author. En el panel Factory Resources, pase el cursor sobre Pipeline, haga clic en el icono de tres puntos y seleccione New pipeline.

    Nuevo elemento de pipeline de ADF
  2. En el panel Activities, expanda la sección Move and transform y arrastre la actividad Copy data al lienzo.

    Nuevo elemento Copy Data
  3. Seleccione la pestaña Source y elija el dataset de origen que creó anteriormente.

    Origen de Copy Data
  4. Vaya a la pestaña Sink y seleccione el dataset de ClickHouse creado para la tabla sensors. Establezca Request method en POST. Asegúrese de que HTTP compression type esté configurado como None.

Sink de Copy Data: seleccionar POST
  1. Haga clic en Debug en la parte superior del lienzo para ejecutar el pipeline. Tras una breve espera, la actividad se pondrá en cola y se ejecutará. Si todo está configurado correctamente, la tarea debería finalizar con el estado Success.

    Éxito de depuración de Copy Data
  2. Una vez completado, haga clic en Publish all para guardar los cambios en el pipeline y el dataset.

Recursos adicionales

Navigation