Commands
Trino

trino --execute: Выполнить SQL из командной строки: форматы вывода, выбор кат

Выполнить SQL из командной строки: форматы вывода, выбор каталога

Вот шпаргалка по trino --execute. Команда — мой основной инструмент для быстрых проверок, отладки и автоматизации. Использую её десятки раз в день.

Базовый синтаксис

Самая простая форма команды выполняет SQL-запрос на указанном сервере.

trino --server http://trino.prod:8080 --execute "SELECT 1"

Разберём по частям:

  • trino — клиент Trino.
  • --server — обязательный флаг. Указывает адрес координатора Trino.
  • --execute — ключевой флаг. Всё, что в кавычках после него, передаётся на сервер как SQL-запрос.
  • "SELECT 1" — сам запрос. Кавычки обязательны, особенно если в запросе есть пробелы.

Полезные флаги

--catalog и --schema Позволяют сразу задать контекст, не прописывая его в SQL. Экономят время и делают команду чище.

trino --server http://trino.prod:8080 --catalog hive --schema prod_logs \
      --execute "SELECT COUNT(*) FROM nginx_access WHERE dt = CURRENT_DATE"

Без флагов пришлось бы писать FROM hive.prod_logs.nginx_access.

--output-format Критически важен для автоматизации. По умолчанию вывод — псевдографика (ALIGNED). Для скриптов нужен машинно-читаемый формат.

# Для чтения человеком (таблица)
trino ... --output-format ALIGNED --execute "SHOW TABLES"

# Для передачи в jq, awk или другой скрипт (CSV без заголовков)
trino ... --output-format CSV_HEADER_UNQUOTED --execute "SELECT pod, restarts FROM k8s.pods"

# Для отладки JSON-структур (один JSON на строку)
trino ... --output-format JSON --execute "SELECT * FROM events LIMIT 5"

Типичные сценарии

1. Проверка состояния системы перед деплоем Запускаю из CI/CD пайплайна, чтобы убедиться, что все таблицы-витрины актуальны.

trino --server $TRINO_SERVER --catalog hive --schema monitoring \
      --output-format CSV_HEADER_UNQUOTED \
      --execute "
        SELECT table_name, max(event_time) as last_update
        FROM datasource_metrics
        WHERE dt = CURRENT_DATE
        GROUP BY 1
        HAVING max(event_time) < CURRENT_TIMESTAMP - INTERVAL '1' HOUR
      "

Если вывод не пустой — значит, есть отстающие таблицы, деплой нужно остановить.

2. Быстрый поиск проблемного пода в Kubernetes Когда нужно найти под, который постоянно падает, не заходя в kubectl.

trino --server http://trino.prod:8080 --catalog k8s --schema default \
      --execute "
        SELECT namespace, pod, restarts
        FROM pods
        WHERE restarts > 5
        ORDER BY restarts DESC
      "

Частые ошибки

Забытый --server. Клиент попытается подключиться к localhost:8080 и упадёт с ошибкой соединения. Всегда проверяйте этот флаг первым.

Неправильный формат вывода для скриптов. Если вы парсите вывод через awk или cut, а используете формат по умолчанию (ALIGNED), скрипт сломается на первом же пробеле в данных. Всегда явно указывайте --output-format CSV_HEADER_UNQUOTED или подобный для автоматизации.