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_PRIV | global |
Примечания по использованию
-
Подробнее об использовании локальной 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 |
+-------+------+------+-------+---------+-------+