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

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_idID узла 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По умолчанию false. При чтении PARQUET/ORC тип BYTE_ARRAY сопоставляется с STRING. При включении параметра он сопоставляется с типом VARBINARY.Поддерживается начиная с версии 4.0.3
enable_mapping_timestamp_tzНачиная с версии 4.1.5 принимается только для совместимости; значение игнорируется. Parquet Timestamp с isAdjustedToUTC=true и ORC TIMESTAMP_INSTANT всегда сопоставляются с TIMESTAMPTZ, даже если этот параметр равен false. Независимый параметр enable_mapping_varbinary по-прежнему можно настраивать; по умолчанию он равен 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 |
+-------+------+------+-------+---------+-------+