Consulta datos desde/hacia un servidor HTTP/HTTPS remoto. Este motor es similar al motor File.
Sintaxis: URL(URL [,Format] [,CompressionMethod])
-
El parámetro
URL debe ajustarse a la estructura de un Uniform Resource Locator. La URL especificada debe apuntar a un servidor que use HTTP o HTTPS. Esto no requiere encabezados adicionales para obtener una respuesta del servidor.
-
Format debe ser uno que ClickHouse pueda usar en consultas SELECT y, si es necesario, en INSERTs. Para ver la lista completa de formatos admitidos, consulte Formats.
Si no se especifica este argumento, ClickHouse detecta el formato automáticamente a partir del sufijo del parámetro URL. Si el sufijo del parámetro URL no coincide con ninguno de los formatos admitidos, no se podrá crear la tabla. Por ejemplo, para la expresión del motor URL('http://localhost/test.json'), se aplica el formato JSON.
-
CompressionMethod indica si el body HTTP debe comprimirse. Si la compresión está habilitada, los paquetes HTTP enviados por el motor URL contienen el header ‘Content-Encoding’ para indicar qué método de compresión se está usando.
Para habilitar la compresión, primero asegúrese de que el endpoint HTTP remoto indicado por el parámetro URL admita el algoritmo de compresión correspondiente.
Los valores admitidos de CompressionMethod deben ser uno de los siguientes:
- gzip or gz
- deflate
- brotli or br
- lzma or xz
- zstd or zst
- lz4
- bz2
- snappy
- none
- auto
Si no se especifica CompressionMethod, el valor predeterminado es auto. Esto significa que ClickHouse detecta automáticamente el método de compresión a partir del sufijo del parámetro URL. Si el sufijo coincide con cualquiera de los métodos de compresión enumerados anteriormente, se aplica la compresión correspondiente; de lo contrario, no se habilita ninguna compresión.
Por ejemplo, para la expresión del motor URL('http://localhost/test.gzip'), se aplica el método de compresión gzip, pero para URL('http://localhost/test.fr'), no se habilita ninguna compresión porque el sufijo fr no coincide con ninguno de los métodos de compresión anteriores.
Las consultas INSERT y SELECT se transforman en peticiones POST y GET,
respectivamente. Para procesar las peticiones POST, el servidor remoto debe admitir
la codificación de transferencia en fragmentos.
Puede limitar el número máximo de redirecciones HTTP GET mediante el ajuste max_http_get_redirects.
1. Cree una tabla url_engine_table en el servidor:
CREATE TABLE url_engine_table (word String, value UInt64)
ENGINE=URL('http://127.0.0.1:12345/', CSV)
2. Crea un servidor HTTP básico con las herramientas estándar de Python 3 e
inícialo:
from http.server import BaseHTTPRequestHandler, HTTPServer
class CSVHTTPServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/csv')
self.end_headers()
self.wfile.write(bytes('Hello,1\nWorld,2\n', "utf-8"))
if __name__ == "__main__":
server_address = ('127.0.0.1', 12345)
HTTPServer(server_address, CSVHTTPServer).serve_forever()
3. Solicitar datos:
SELECT * FROM url_engine_table
┌─word──┬─value─┐
│ Hello │ 1 │
│ World │ 2 │
└───────┴───────┘
Detalles de la implementación
- Las lecturas y escrituras pueden realizarse en paralelo
- No se admite:
- las operaciones
ALTER y SELECT...SAMPLE.
- Índices.
- Replicación.
_path — Ruta de la URL. Tipo: LowCardinality(String).
_file — Nombre del recurso de la URL. Tipo: LowCardinality(String).
_size — Tamaño del recurso en bytes. Tipo: Nullable(UInt64). Si se desconoce el tamaño, el valor es NULL.
_time — Fecha y hora de la última modificación del archivo. Tipo: Nullable(DateTime). Si se desconoce la hora, el valor es NULL.
_headers - Encabezados de la respuesta HTTP. Tipo: Map(LowCardinality(String), LowCardinality(String)).
Resolución de las URL relativas
La configuración url_base permite usar una URL relativa en el motor URL. Cuando se establece url_base, la URL que se pasa al motor se resuelve con respecto a esta según la RFC 3986. Para obtener una descripción completa de las reglas de resolución, consulta la documentación de la función de tabla url.
Ejemplo
SET url_base = 'http://127.0.0.1:12345/';
CREATE TABLE url_engine_table (word String, value UInt64) ENGINE = URL('hello.csv', CSV);
SELECT * FROM url_engine_table;
Configuración de almacenamiento
- engine_url_skip_empty_files - permite omitir archivos vacíos durante la lectura. Está deshabilitado de forma predeterminada.
- enable_url_encoding - permite habilitar o deshabilitar la decodificación/codificación de la ruta en el URI. Está habilitado de forma predeterminada.
- url_base - URL base para resolver las URL relativas que se pasan al motor.
Última modificación el 10 de junio de 2026