Табличные функции

Табличные функции создают объекты таблиц в ADQM на основе данных из внешних источников и позволяют выполнять операции чтения и записи данных с помощью следующих запросов:

  • SELECT …​ FROM <table_function> — создание временной таблицы, доступной только в текущем запросе (таблица удаляется после завершения выполнения запроса);

  • CREATE TABLE [<db_name>.]<table_name> AS <table_function> — создание таблицы с той же структурой и данными, как результат выполнения соответствующей табличной функции (созданная таблица будет работать так же, как указанная табличная функция);

  • INSERT INTO TABLE FUNCTION <table_function> …​ — вставка данных в таблицу, на которую ссылается табличная функция.

ВАЖНО

Чтобы использовать табличные функции, включите настройку allow_ddl.

Функции

ADQM поддерживает множество табличных функций для интеграции с различными внешними системами. Примеры приведены ниже.

Функция Возвращаемое значение

file

Таблица для чтения/записи данных локального файла

url

Таблица для чтения/записи данных на удаленном HTTP/HTTPS сервере по указанному адресу

hdfs, hdfsCluster

Таблица для чтения/записи данных файла в HDFS

mysql

Таблица для чтения/записи данных, хранящихся на удаленном сервере MySQL

postgresql

Таблица для чтения/записи данных таблицы удаленной базы данных PostgreSQL

mongodb

Таблица для чтения данных с удаленного сервера MongoDB

s3, s3Cluster

Таблица для чтения/записи данных файла в Amazon S3

jdbc

Таблица, подключенная к источнику данных через JDBC-драйвер

odbc

Таблица, подключенная к источнику данных через ODBC

cluster

Набор данных с кластера, сконфигурированного в секции remote_servers (config.xml)

remote

Набор данных с удаленных серверов ClickHouse

Полный список поддерживаемых табличных функций с описаниями можно найти в разделе Table Functions документации ClickHouse.

Примеры использования

Ниже приведены варианты использования табличной функции на примере функции file, с помощью которой можно считывать или записывать данные указанного файла. Перед выполнением тестовых запросов подготовьте файл-источник:

  1. В конфигурационном файле config.xml укажите каталог /var/lib/clickhouse/user_files в качестве значения параметра user_files_path. Выполните проверку:

    $ sudo grep user_files_path /etc/clickhouse-server/config.xml
        <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
  2. Создайте файл с данными в формате CSV в папке /var/lib/clickhouse/user_files:

    $ sudo cat > /var/lib/clickhouse/user_files/file_func_source.csv
    1,2,3
    4,5,6
    7,8,9

Выполните следующие запросы, чтобы посмотреть, как работает функция file:

  1. CREATE TABLE

    CREATE TABLE file_table AS file('file_func_source.csv', 'CSV', 'column_1 UInt32, column_2 UInt32, column_3 UInt32');

    В результате таблица с указанной структурой и данными из файла будет добавлена в текущую базу данных.

  2. SELECT …​ FROM

    Оба следующих запроса возвращают таблицу с данными из CSV-файла:

    SELECT * FROM file_table;
    SELECT * FROM file('file_func_source.csv', 'CSV', 'column_1 UInt32, column_2 UInt32, column_3 UInt32');

    Вывод на экран:

    ┌─column_1─┬─column_2─┬─column_3─┐
    │        1 │        2 │        3 │
    │        4 │        5 │        6 │
    │        7 │        8 │        9 │
    └──────────┴──────────┴──────────┘
  3. INSERT INTO TABLE FUNCTION

    Следующий запрос выполняет вставку данных в источник:

    INSERT INTO FUNCTION file('file_func_source.csv', 'CSV', 'column_1 UInt32, column_2 UInt32, column_3 UInt32')
        VALUES (10, 20, 30), (40, 50, 60);

    Убедитесь, что данные записались в файл:

    $ sudo cat /var/lib/clickhouse/user_files/file_func_source.csv
    1,2,3
    4,5,6
    7,8,9
    10,20,30
    40,50,60

    При вызове табличной функции file новые строки также попадут в выборку:

    SELECT * FROM file_table;
    ┌─column_1─┬─column_2─┬─column_3─┐
    │        1 │        2 │        3 │
    │        4 │        5 │        6 │
    │        7 │        8 │        9 │
    │       10 │       20 │       30 │
    │       40 │       50 │       60 │
    └──────────┴──────────┴──────────┘
ПРИМЕЧАНИЕ

Чтобы получить информацию по основным запросам для работы с таблицами данных в ADQM, можно обратиться к статье Основной синтаксис.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней