Выполнение запросов

С помощью данной команды можно исполнить произвольный запрос в клике. Смотрите также статью Как попробовать, в которой перечислены альтернативные способы задать запрос в клику CHYT.

CLI

Команда yt clickhouse execute имеет следующие параметры (в скобках указаны значения по умолчанию):

  • query — запрос.

  • --proxy — кластер, на котором будет запущена клика, например. Данную опцию также можно задать через переменную окружения YT_PROXY (например, export YT_PROXY=<cluster_name>).

  • --alias — алиас, под которым будет доступна клика; должен представлять из себя строку, начинающуюся со звёздочки. Данную опцию также можно задать через переменную окружения CHYT_ALIAS (export CHYT_ALIAS=*example).

  • --format [TabSeparated] — формат ClickHouse, в котором следует выдать результат.

  • --setting — позволяет передать произвольную настройку в запрос в формате <key>=<value>, может быть указана несколько раз.

Про использование параметра --alias

В CHYT CLI, в зависимости от команды, название клики передаётся по-разному — либо с использованием звёздочки *, либо без неё.

  1. Команду execute нужно всегда вызывать со звёздочкой и ключом --alias. Пример:

    yt clickhouse execute --proxy <cluster_name> --alias *<clique_name>
    

    Это связано с тем, что команда достаточно старая — в ней зашита логика, опирающаяся на алиасы YTsaurus операций, где они имеют звёздочку в самом начале.

  2. В командах семейства yt clickhouse ctl звёздочку * можно опустить. Пример:

    yt clickhouse ctl start <clique_name>
    

    Однако для обратной совместимости включена поддержка старого формата записи. Пример:

    yt clickhouse ctl start *<clique_name>
    

Python API

Внимание

Для использования данной функции нужно обязательно настроить логирование на уровне Debug. Без debug logs ответить на какой-либо вопрос про исполнение запроса (включая "почему бежит так долго", "почему упал", "почему выдал такие ответ") невозможно.

В модуле yt.clickhouse доступен следующий метод (часть параметров намеренно не упомянута, т.к. не предназначена для использования в обычной ситуации):

def execute(
    query,
    alias=None,
    format=None,
    settings=None,
    raw=None,
    client=None):
    pass

Часть параметров пересекается с опциями командной строки, для них верно всё то же, что сказано в предыдущем разделе. Функция возвращает генератор строк из результата, причём в качестве строк могут выступать как python-объекты (списки, словари, числа, строки), так и строки в заказанном формате.

Опишем отдельные параметры и отличия от запуска через CLI:

  • format (None) и raw (False) — эти опции контролируют тип возвращаемых значений. Если raw = False, то функция будет самостоятельно превращать значения в python-объекты аналогично тому, как это делает метод YTsaurus Python API read_table. Если же raw = True, то нужно дополнительно указать формат ClickHouse, тогда возвращаемым значением будет итератор по строкам (str) в заказанном формате.

  • settings ({}) — словарь с дополнительными настройками ClickHouse для запроса.

  • client — клиент от YTsaurus кластера, в котором следует запустить запрос к клике. По умолчанию берётся глобальный клиент; можно, например, передать качестве клиента yt.wrapper.YtClient("<cluster_name>") и указать, таким образом, нужный кластер. Подробнее можно прочитать в соответствующем разделе документации Python API.

Предыдущая
В этой статье: