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

LOCAL

Описание​

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

Синтаксис​

LOCAL(
"file_path" = "<file_path>",
"backend_id" = "<backend_id>",
"format" = "<format>"
[, "<optional_property_key>" = "<optional_property_value>" [, ...] ]
);

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

ПараметрОписаниеПримечания
file_pathПуть к читаемому файлу относительно каталога user_files_secure_path. Параметр user_files_secure_path относится к параметрам конфигурации BE.
Путь не может содержать ..; для сопоставления по шаблону можно использовать синтаксис glob, например logs/*.log.
backend_idИдентификатор узла BE, на котором находится файл. Его можно получить с помощью команды show backends.В версиях до 2.1.1 для чтения локальных файлов данных Doris требует указать узел BE, на котором они находятся.
formatФормат файла. Обязательный параметр. Поддерживаемые форматы: csv/csv_with_names/csv_with_names_and_types/json/parquet/orc.

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

ПараметрОписаниеПримечания
shared_storageПо умолчанию false. Если задано true, указанный файл находится в общем хранилище (например, NAS). Общее хранилище должно поддерживать файловые интерфейсы POSIX и быть смонтировано на всех узлах BE.
Если shared_storage имеет значение true, backend_id можно не указывать. Doris может использовать все узлы BE для доступа к данным. Если задан backend_id, доступ к данным будет выполняться только на указанном узле BE.
Поддерживается начиная с версии 2.1.2
column_separatorРазделитель столбцов. Необязательный параметр, по умолчанию \t.
line_delimiterРазделитель строк. Необязательный параметр, по умолчанию \n.
compress_typeТип сжатия. Необязательный параметр. Поддерживаемые типы: UNKNOWN/PLAIN/GZ/LZO/BZ2/LZ4FRAME/DEFLATE/SNAPPYBLOCK. По умолчанию используется UNKNOWN, тип автоматически определяется по суффиксу uri.
read_json_by_lineДля загрузки в формате JSON. Необязательный параметр, по умолчанию true.См.: Загрузка JSON
strip_outer_arrayДля загрузки в формате JSON. Необязательный параметр, по умолчанию false.См.: Загрузка JSON
json_rootДля загрузки в формате JSON. Необязательный параметр, по умолчанию пустое значение.См.: Загрузка JSON
json_pathsДля загрузки в формате JSON. Необязательный параметр, по умолчанию пустое значение.См.: Загрузка JSON
num_as_stringДля загрузки в формате JSON. Необязательный параметр, по умолчанию false.См.: Загрузка JSON
fuzzy_parseДля загрузки в формате JSON. Необязательный параметр, по умолчанию false.См.: Загрузка JSON
trim_double_quotesДля загрузки в формате CSV. Необязательный параметр, по умолчанию false. Если задано true, удаляет внешние двойные кавычки вокруг каждого поля в файле CSV.Для формата CSV
skip_linesДля загрузки в формате CSV. Необязательный параметр, по умолчанию 0; задаёт количество первых строк файла CSV, которые нужно пропустить. Если формат равен csv_with_names или csv_with_names_and_types, этот параметр игнорируется.Для формата CSV
path_partition_keysНеобязательный параметр, задаёт имена столбцов партиционирования, содержащиеся в пути к файлу. Например, для пути /path/to/city=beijing/date="2023-07-09" укажите path_partition_keys="city,date". Соответствующие имена столбцов и их значения будут автоматически прочитаны из пути при загрузке.
enable_mapping_varbinaryВ версии dev принимается только для совместимости и игнорируется: внешние двоичные данные всегда сопоставляются с типом VARBINARY. В Doris 4.1.5 этот параметр TVF остаётся настраиваемым; значение по умолчанию false.Поддерживается с версии 4.0.3
enable_mapping_timestamp_tzНачиная с версии 4.1.5 принимается только для совместимости; значение игнорируется. Parquet Timestamp с isAdjustedToUTC=true и ORC TIMESTAMP_INSTANT всегда сопоставляются с типом TIMESTAMPTZ, даже если этот параметр имеет значение false.Поддерживается с версии 4.0.3
hive.parquet.time-zoneНеобязательная строка, по умолчанию пустая. Поддерживается с версии 4.1.5. Задаёт часовой пояс, использованный при записи Parquet INT96: часовой пояс IANA или смещение от -12:00 до +14:00; короткие псевдонимы, такие как CST и PRC, не допускаются. См. Parquet.С версии 4.1.5

Требования к управлению доступом​

ПривилегияОбъектПримечания
ADMIN_PRIVglobal

Примечания по использованию​

  • Подробнее об использовании локальной tvf см. в описании tvf S3. Единственное различие между ними заключается в способе доступа к системе хранения.

  • Доступ к данным на NAS через локальную tvf

    Общее хранилище NAS можно одновременно монтировать на нескольких узлах. Каждый узел может обращаться к файлам в общем хранилище так же, как к локальным файлам. Поэтому NAS можно рассматривать как локальную файловую систему и обращаться к нему через локальную tvf.

    При установке "shared_storage" = "true" Doris считает, что указанный файл доступен с любого узла BE. Если набор файлов задан с помощью подстановочных знаков, Doris распределяет запросы на доступ к файлам между несколькими узлами BE. Это позволяет выполнять распределённое сканирование файлов на нескольких узлах и повышать производительность запросов.

Примеры​

Анализ файла журнала на указанном узле BE:

select * from local(
"file_path" = "log/be.out",
"backend_id" = "10006",
"format" = "csv")
where c1 like "%start_time%" limit 10;
+--------------------------------------------------------+
| c1 |
+--------------------------------------------------------+
| start time: 2023 年 08 月 07 日 星期一 23:20:32 CST |
| start time: 2023 年 08 月 07 日 星期一 23:32:10 CST |
| start time: 2023 年 08 月 08 日 星期二 00:20:50 CST |
| start time: 2023 年 08 月 08 日 星期二 00:29:15 CST |
+--------------------------------------------------------+

Чтение файлов в формате CSV по пути ${DORIS_HOME}/student.csv и доступ к их содержимому:

select * from local(
"file_path" = "student.csv",
"backend_id" = "10003",
"format" = "csv");
+------+---------+--------+
| c1 | c2 | c3 |
+------+---------+--------+
| 1 | alice | 18 |
| 2 | bob | 20 |
| 3 | jack | 24 |
| 4 | jackson | 19 |
| 5 | liming | d18 |
+------+---------+--------+
```--+---------+--------+

Запрос к файлам на NAS:

select * from local(
"file_path" = "/mnt/doris/prefix_*.txt",
"format" = "csv",
"column_separator" =",",
"shared_storage" = "true");
+------+------+------+
| c1 | c2 | c3 |
+------+------+------+
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |
+------+------+------+

Можно использовать с desc function:

desc function local(
"file_path" = "student.csv",
"backend_id" = "10003",
"format" = "csv");
+-------+------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-------+---------+-------+
| c1 | TEXT | Yes | false | NULL | NONE |
| c2 | TEXT | Yes | false | NULL | NONE |
| c3 | TEXT | Yes | false | NULL | NONE |
+-------+------+------+-------+---------+-------+