Импорт и экспорт в файлы
Импорт данных из файлов
ADQM поддерживает несколько способов импорта данных из файлов в таблицы.
FROM INFILE
Чтобы вставить в таблицу данные из локального файла или нескольких файлов сразу (поддерживаются в том числе сжатые файлы), можно использовать выражение FROM INFILE
при выполнении запроса INSERT INTO
в клиенте командной строки clickhouse-client. При этом файлы должны быть расположены в папке, из которой запущен clickhouse-client. Базовый синтаксис запроса:
INSERT INTO <table_name> [(<column_list>)] FROM INFILE '<file_name.ext>' [COMPRESSION '<compr_type>'] [FORMAT <input_format>];
В запросе с выражением FROM INFILE
используются следующие аргументы.
<file_name.ext> |
Имя файла с расширением, из которого будут загружаться данные в таблицу ADQM |
<compr_type> |
Метод сжатия файла. Возможные значения: |
<input_format> |
Формат импортируемых данных. Доступные для импорта данных форматы перечислены в статье Formats for Input and Output Data документации ClickHouse. По умолчанию формат автоматически определяется по расширению файла. Примеры использования различных форматов для импорта данных JSON в зависимости от структуры входящих данных приведены в статье Тип данных JSON |
Пример
-
Создайте два локальных тестовых файла input_1.csv и input_2.csv с данными для последующей вставки в таблицы ADQM:
1,"aaa",100 2,"bbb",200 3,"ccc",300
4,"ddd",400 5,"eee",500 6,"fff",600
Запустите консольный клиент clickhouse-client из папки, где находятся эти файлы.
-
Создайте таблицу с соответствующей структурой:
CREATE TABLE test_table (a Int32, b String, c Int32) ENGINE = MergeTree ORDER BY a;
-
Выполните запрос для импорта данных одного из файлов в созданную таблицу:
INSERT INTO test_table FROM INFILE 'input_1.csv';
-
Проверьте, что данные загрузились в таблицу:
SELECT * FROM test_table;
┌─a─┬─b───┬───c─┐ │ 1 │ aaa │ 100 │ │ 2 │ bbb │ 200 │ │ 3 │ ccc │ 300 │ └───┴─────┴─────┘
-
Вставьте в таблицу данные из двух файлов сразу, указав
input_*.csv
в качестве имени файла:INSERT INTO test_table FROM INFILE 'input_*.csv';
-
Проверьте результат импорта:
SELECT * FROM test_table;
┌─a─┬─b───┬───c─┐ │ 1 │ aaa │ 100 │ │ 2 │ bbb │ 200 │ │ 3 │ ccc │ 300 │ │ 4 │ ddd │ 400 │ │ 5 │ eee │ 500 │ │ 6 │ fff │ 600 │ └───┴─────┴─────┘ ┌─a─┬─b───┬───c─┐ │ 1 │ aaa │ 100 │ │ 2 │ bbb │ 200 │ │ 3 │ ccc │ 300 │ └───┴─────┴─────┘
Табличный движок File
Загружать данные в ADQM из файла можно используя табличный движок File, который хранит данные в файле. Данные, отредактированные непосредственно в файле на диске, автоматически обновляются в таблице типа File при выполнении запроса SELECT
. При создании таблицы на основе этого движка для импорта данных из файла в качестве аргумента должен быть указан формат, поддерживаемый для входных данных — см. форматы в колонке Input таблицы Formats for Input and Output Data. Особенностью этого движка также является то, что путь к файлу для хранения данных указать явно нельзя — используется каталог, установленный через параметр Data path на странице конфигурации сервиса ADQMDB (по умолчанию /var/lib/clickhouse/).
Пример
-
Создайте таблицу
file_table
с использованием движка File:CREATE TABLE file_table (name String, value UInt32) ENGINE=File(TabSeparated);
ADQM создаст каталог /var/lib/clickhouse/data/default/file_table.
-
Создайте вручную файл /var/lib/clickhouse/data/default/file_table/data.TabSeparated и заполните его тестовыми данными:
$ sudo cat > /var/lib/clickhouse/data/default/file_table/data.TabSeparated a 1 b 2
Чтобы в дальнейшем иметь возможность экспортировать данные из таблицы в этот файл, назначьте ему владельца
clickhouse
следующей командой:$ sudo chown clickhouse:clickhouse /var/lib/clickhouse/data/default/file_table/data.TabSeparated
-
Запросите данные из таблицы
file_table
:SELECT * FROM test_table;
┌─name─┬─value─┐ │ a │ 1 │ │ b │ 2 │ └──────┴───────┘
Табличная функция file
Для вставки данных из файла в таблицу можно также использовать табличную функцию file
— см. пример в статье Табличные функции.
Перенаправление данных в командой строке
Импортировать данные из файла в таблицу можно напрямую в командой строке clickhouse-client, например:
$ clickhouse-client -q "INSERT INTO test_table FORMAT CSV" < input_2.csv
Экспорт данных в файлы
Экспортировать данные из ADQM в файлы можно перечисленными ниже способами.
INTO OUTFILE
Чтобы сохранить результаты запроса SELECT
в файл, при выполнении этого запроса в клиенте командной строки clickhouse-client можно использовать выражение INTO OUTFILE
. Базовый синтаксис:
SELECT <expr_list>
[FROM <table_name>]
...
INTO OUTFILE '<file_name.ext>' [AND STDOUT] [COMPRESSION '<compr_type>' [LEVEL <compr_level>]]
[FORMAT <output_format>];
В запросе с выражением INTO OUTFILE
используются следующие аргументы.
<file_name.ext> |
Имя файла с расширением, в который будут сохраняться результаты запроса |
<compr_type> |
Метод сжатия. Возможные значения: |
<compr_level> |
Уровень сжатия для указанного метода. Возможные значения — положительные целые числа в следующих диапазонах:
|
<output_format> |
Формат экспортируемых данных. Доступные для экспорта данных форматы перечислены в статье Formats for Input and Output Data документации ClickHouse. По умолчанию формат определяется по расширению файла, или используется формат Примеры использования различных форматов для вывода данных JSON представлены в статье Тип данных JSON |
При использовании в запросе выражения AND STDOUT
сохраняемые в файл данные также будут выведены на экран. Если применяется сжатие, данные на экране отобразятся в виде простого текста.
Пример запроса SELECT … INTO OUTFILE
:
SELECT * FROM test_table INTO OUTFILE 'output.csv';
Табличный движок File
Еще один способ выгрузить данные из ADQM в файл — использовать табличный движок File. При создании таблицы с использованием этого движка для экспорта данных в файл (осуществляется при выполнении запросов INSERT
) в качестве аргумента должен быть указан формат, поддерживаемый для выходных данных — см. форматы в колонке Output таблицы в статье Formats for Input and Output Data.
Пример
-
Создайте таблицу
file_table_out
на движке File:CREATE TABLE file_table_out (name String, value UInt32) ENGINE=File(TabSeparated);
ADQM создаст каталог /var/lib/clickhouse/data/default/file_table_out, где /var/lib/clickhouse/ — каталог для хранения данных ADQM, который можно изменить через параметр Data path на странице конфигурации сервиса ADQMDB.
-
Заполните таблицу тестовыми данными:
INSERT INTO file_table_out VALUES('a', 1), ('b', 2), ('c', 3);
-
Убедитесь, что в каталоге /var/lib/clickhouse/data/default/file_table_out создан файл data.TabSeparated, который содержит данные из таблицы
file_table_out
:a 1 b 2 c 3
Табличная функция file
Для экспорта данных из ADQM в файл можно также использовать табличную функцию file
— см. пример в статье Табличные функции.
Перенаправление данных в командой строке
Следующий запрос создаст файл redirected_output.csv в папке, из которой запущен clickhouse-client, и запишет в него результаты выполнения указанного запроса SELECT
(если такой файл уже существует, данные будут перезаписаны):
$ clickhouse-client --query "SELECT * from test_table" --format CSV > redirected_output.csv