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 | 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 | По умолчанию 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_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 |
+-------+------+------+-------+---------+-------+