Перейти к содержимому
Последнее обновление

HTTP

Табличная функция HTTP (TVF) позволяет пользователям читать данные, возвращаемые любой конечной точкой HTTP, как данные реляционной таблицы. Если возвращаемые данные имеют поддерживаемый формат, их можно напрямую запрашивать и анализировать с помощью SQL. В настоящее время поддерживаются форматы данных csv/csv_with_names/csv_with_names_and_types/json/parquet/orc.

Типичные сценарии использования:

  • Запросы к файлам данных, доступным по HTTP/HTTPS (например, на GitHub, S3 и т. д.).
  • Прямые запросы к конечным точкам HTTP API, возвращающим данные в формате JSON.
  • Доступ к наборам данных, размещённым на Hugging Face.
примечание

Поддерживается начиная с версии 4.0.2.

Синтаксис​

HTTP(
"uri" = "<uri>",
"format" = "<format>"
[, "<optional_property_key>" = "<optional_property_value>" [, ...] ]
)

Обязательные параметры​

ПараметрОписание
uriHTTP-адрес для доступа к данным. Поддерживаются протоколы http, https и hf. Это может быть URL файла данных или конечной точки API, возвращающей данные.
formatФормат данных, то есть способ разбора содержимого, возвращаемого конечной точкой HTTP. Поддерживаются csv/csv_with_names/csv_with_names_and_types/json/parquet/orc.

Для hf:// (Hugging Face) см. раздел Анализ данных Hugging Face.

Необязательные параметры​

ПараметрОписаниеПримечания
http.header.xxxПозволяет задавать произвольные заголовки HTTP, которые передаются непосредственно HTTP-клиенту.Например, при "http.header.Authorization" = "Bearer hf_MWYzOJJoZEymb..." результирующий заголовок будет иметь вид Authorization: Bearer hf_MWYzOJJoZEymb...
http.enable.range.requestИспользовать ли диапазонные запросы для доступа к HTTP-сервису. Значение по умолчанию: true.
http.max.request.size.bytesМаксимальный объём данных при доступе в режиме без диапазонных запросов. Значение по умолчанию: 100 MB.

Если http.enable.range.request имеет значение true, система сначала попытается обратиться к HTTP-сервису с помощью диапазонных запросов. Если HTTP-сервис не поддерживает диапазонные запросы, система автоматически перейдёт в режим без них. Максимальный объём доступных данных ограничивается параметром http.max.request.size.bytes.

Примеры​

Чтение файлов данных по HTTP​

  • Чтение данных CSV с GitHub

    SELECT COUNT(*) FROM
    HTTP(
    "uri" = "https://raw.githubusercontent.com/apache/doris/refs/heads/master/regression-test/data/load_p0/http_stream/all_types.csv",
    "format" = "csv",
    "column_separator" = ","
    );
  • Чтение данных Parquet с GitHub

    SELECT arr_map, id FROM
    HTTP(
    "uri" = "https://raw.githubusercontent.com/apache/doris/refs/heads/master/regression-test/data/external_table_p0/tvf/t.parquet",
    "format" = "parquet"
    );
  • Чтение данных JSON с GitHub и просмотр схемы с помощью DESC FUNCTION

    DESC FUNCTION
    HTTP(
    "uri" = "https://raw.githubusercontent.com/apache/doris/refs/heads/master/regression-test/data/load_p0/stream_load/basic_data.json",
    "format" = "json",
    "strip_outer_array" = "true"
    );

Запросы к конечным точкам HTTP API​

Табличную функцию HTTP можно использовать для прямых запросов к конечным точкам HTTP API, возвращающим данные в формате JSON. Например, запрос к REST API, возвращающему данные JSON:

SELECT * FROM
HTTP(
"uri" = "https://api.example.com/v1/data",
"format" = "json",
"http.header.Authorization" = "Bearer your_token",
"strip_outer_array" = "true"
);
подсказка

Для конечных точек HTTP API, которые не поддерживают диапазонные запросы (Range Requests), система автоматически перейдёт в режим без диапазонных запросов. Их можно отключить вручную с помощью параметра http.enable.range.request.