Что нового в DataGrip 2021.1

Сегодня мы представляем DataGrip 2021.1 — первый крупный релиз продукта в этом году и, возможно, самый значимый за всю его историю. Надеемся, что версия 2021.1 решит проблемы, с которыми вы сталкивались раньше, или вы откроете для себя какую-нибудь очень полезную новую возможность. А может быть, и то, и другое. Давайте приступим!

Интерфейс для работы с правами доступа

Функциональность доступна для PostgreSQL, Redshift, Greenplum, MySQL, MariaDB, DB2, SQL Server и Sybase.

Мы добавили интерфейс для изменения прав доступа при редактировании объектов.

В окне Modify user (вы можете открыть его из проводника баз данных для любого пользователя при помощи команды Cmd/Ctrl+F6) появился интерфейс для назначения объектам прав доступа.

Контекстные шаблоны Live Templates

Выделение в редакторе

Это решение будет удобно для всех, кто предпочел бы генерировать простые операторы прямо из проводника баз данных. Обычные шаблоны Live Templates покрывают различные сценариев, где необходимо быстро составить простой запрос. Однако когда вы уже находитесь в контексте проводника баз данных и сконцентрировались на необходимом объекте, хотелось бы иметь более простой способ генерации запросов для этого объекта.

Многие инструменты также используют подобный механизм, сокращая таким образом пользователям количество рутины, а значит, для многих из них он окажется вполне привычным.

Вот короткое видео о том, как это работает:

Каждый из этих фрагментов кода является шаблоном Live Template, однако их особенность в том, что они могут быть сгенерированы в контексте выбранного объекта. К примеру, рассмотрим шаблон Select first N rows from a table.

Откройте настройки Live Templates и найдите нужный шаблон:

Select first N rows from a table выглядит как обычный шаблон (и может быть использован как таковой). Синтаксис шаблона подходит не для всех баз данных, потому к нему применяется соответсвующий диалект. Основное отличие, позволяющее применить этот шаблон в проводнике баз данных, — выражение dbObjectName, используемое для переменной $table$:

Вы можете добавить собственный шаблон или же выбрать из имеющихся:

Зайдите в Settings/Preferences | Database | General и выберите между генерацией скрипта в текущую консоль и в новую консоль.

Редактор данных

Редактируйте данные в MongoDB

Мы добавили важнейшую функциональность для работы с MongoDB: теперь вы можете редактировать данные в коллекциях MongoDB. Также доступен предпросмотр запросов.

 

Чтобы сделать редактирование более гибким, мы добавили возможность изменять тип полей прямо из интерфейса. Вы можете сделать это через контекстное меню поля либо в редакторе значений:

Улучшенная сортировка

Мы улучшили сортировку данных:

  • Новое поле ORDER BY работает аналогично полю WHERE (которое раньше называлось Filter): укажите грамматически верное предложение, и оно применится к запросу таблицы.
  • По умолчанию сортировки друг на друга не «накладываются»‎. При нажатии на название столбца, по которому вы хотите отсортировать данные, сортировка на основе других столбцов будет очищена. Если вы хотите сделать наложение нескольких сортировок, нажмите на название колонки, зажав клавишу Alt.

Если вы хотите использовать сортировку на стороне клиента (когда DataGrip не выполняет запросы заново, а вместо этого сортирует данные на текущей странице), уберите галочку для опции Sort via ORDER BY:

Также можно открывать таблицы с заранее заданной сортировкой на основе числового первичного ключа. Соответствующие настройки вы найдете в Settings/Preferences | Database | Data Views.

Новая панель инструментов

Мы обновили панель инструментов в редакторе данных. Кнопки Roll-back и Commit больше не отображаются в режиме автоматических транзакций. И мы добавили две новые кнопки — Revert changes и Find.

Транспонирование однострочных результатов

В Settings/Preferences | Database | Data Views теперь можно настроить транспонирование результатов, состоящих из одной строки.

Навигация

Упрощение действий

Мы упростили навигацию и избавились от следующих настроек:

Выделение в редакторе

Если вы никогда не меняли эти настройки и значения для всех флажков у вас проставлены по умолчанию, версия 2021.1 все равно найдет чем вас удивить: действие Go to declaration (Ctrl/Cmd+B), запущенное для объекта в SQL, теперь открывает DDL, а не проводник базы данных.

Также мы ввели сочетание клавиш для действия Select in database treeAlt+Shift+B для Windows/Linux и Opt+Shift+B для macOS.

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

Если у вас есть курсор на объекте:

  • Ctrl/Cmd+B покажет DDL.
  • F4 покажет данные.
  • Alt/Opt+Shift+B подсветит объект в проводнике базы данных.

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

  • Используйте сочетания клавиш по полной. Если вам нравится пользоваться Ctrl/Cmd+B для открытия проводника баз данных, просто назначьте этому сочетанию клавиш действие Select in database tree.
  • Если вам нравилось, как раньше Ctrl/Cmd+B или Ctrl/Cmd+Click открывали CREATE definition при отсутствии объекта в SQL, после выполнения предыдущего шага не удаляйте привязку этих сочетаний клавиш к Go to declaration.
  • Если у вас не отмечена галочкой опция Prefer data editor over DDL editor и вы хотели бы, как раньше, открывать DDL двойным кликом, измените значение ключа реестра database.legacy.navigate.to.code.from.tree. По нашим данным этим пользуются немногие пользователи. Также советуем использовать для открытия DDL объектов горячие клавиши.

Если какие-либо сценарии использования не покрываются нашей новой моделью, пожалуйста, сообщите нам.

Соединение

Поддержка многофакторной аутентификации Azure

Мы поддерживаем интерактивную аутентификацию Azure Active Directory. Если она включена, браузер будет открываться автоматически и предлагать вам авторизоваться.

Драйвер Redshift 2.x

В новой версии DataGrip пользователям доступен JDBC-драйвер Redshift 2.x. Главным улучшением здесь является возможность отменять запросы.

Полная поддержка Google BigQuery

В прошлом релизе у нас появилась поддержка диалекта Google BigQuery. В этом релизе мы расширили ее: интроспекция баз данных и генерация кода стали работать лучше и теперь не зависят от функциональности JDBC-драйвера.

Поддержка диалекта CockroachDB

Если вы пользуетесь скриптами CockroachDB или пишите SQL-запросы к этой базе данных, теперь ваш код будет подсвечиваться по всем правилам, а ошибки будут показаны еще до запуска запроса. Это наш первый шаг в сторону полной поддержки CockroachDB, которая будет реализована в одном из будущих релизов.

Улучшения окна соединения

Пользоваться окном соединения стало удобнее.

  • Драйверы и источники данных теперь перечисляются в разных вкладках. Список драйверов не должен мешать опытным пользователям. В то же время он полезен для новых пользователей, так как помогает им не путать драйверы с источниками данных.
  • На странице любого драйвера теперь есть кнопка Create data source.
  • Кнопка Test Connection переехала в нижнее меню — теперь вы можете использовать ее, находясь в любой вкладке настроек источников данных (не только в General and SSH/SSL, как раньше).
  • На странице настроек источников данных DDL теперь есть раскрывающийся список, позволяющий выбрать диалект.

Поле для ссылки теперь можно расширить — это упрощает работу с длинными ссылками.

Проводник базы данных

Выделение в редакторе

Легко копируйте источники данных

Возможность копировать и вставлять источники данных появилась давно. Но начиная с 2021.1 вы можете копировать, вырезать и вставлять источники данных при помощи всем известных сочетаний клавиш Ctrl/Cmd+C/V/X.

  • Когда вы копируете источник данных, XML сохраняется в буфер обмена, и вы можете поделиться им в мессенджерах. Также вы можете использовать вставку (Paste), чтобы разместить фрагмент XML где-либо еще.
  • Если вы вырежете и вставите источник данных в рамках одного и того же проекта, фрагмент будет попросту перемещен, и вам не придется вводить пароль. В других случаях введение пароля обязательно.
  • Вырезку (Cut) можно отменить при помощи Ctrl/Cmd+Z.

Новый интерфейс

Мы изменили стандартный интерфейс проводника баз данных: вторичные объекты теперь можно просмотреть в отдельной папке. В основном люди работают с таблицами, представлениями и процедурами. Что касается пользователей, ролей, табличных пространств, оберток сторонних данных и многих других типов объектов — их пользователи просматривают довольно редко. Эти вторичные объекты теперь размещены в двух папках — Server Objects и Database Objects.

 

Если вы хотите вернуть старый интерфейс, нажмите на иконку шестеренки и выберите Group Database and Schemas.

Возможность скрыть автогенерированные объекты Oracle

Если вы используете Oracle, у вас есть возможность показывать автогенерируемые объекты в проводнике либо скрыть их. Это распространяется на следующие объекты:

  • Материализованные журналы просмотра
  • Таблицы, используемые для материализованных представлений
  • Вторичные таблицы

Новые типы объектов SQLite

Теперь DataGrip интроспектирует функции, модули и виртуальные колонки в SQLite.

Улучшения для неподдерживаемых баз данных

Шаблоны источников данных

В 2021.1 добавлять источники данных для не поддерживаемых нами баз данных стало проще. Теперь вам доступны JDBC-драйверы для AWS Athena, Informix, Presto, SAP HANA, Google Cloud Spanner и др. Их вы найдете в секции Other списка баз данных.

Дополнительные улучшения:

  • Вам больше не нужно самим загружать драйвер и вручную создавать на основе него источник данных.
  • DataGrip сам предложит вам новые версии драйвера.
  • Новые базы данных отмечаются специальной иконкой.

Обратите внимание, что поддержка этих баз данных — ограниченная. В основном это обусловлено возможностями JDBC-драйвера и поддержкой диалекта SQL:2016 в SQL-редакторе DataGrip.

Парсинг запросов

Для неподдерживаемых баз данных появился новый параметр настроек. При работе с такими базами данных в DataGrip вам нужно использовать либо диалект SQL:2016, либо Generic. Generic практически идентичен SQL:2016. Отличие лишь в том, что при использовании Generic DataGrip не подсвечивает найденные ошибки.

Эти настройки вы найдете в Settings/Preferences | Database | General | Split a script for execution in Generic and ANSI SQL dialects. Вы можете выбрать из следующих значений:

  • On valid ANSI SQL statements or by separator — это настройки по умолчанию, которые подойдут вам в большинстве случаев. Иначе говоря, здесь мы постараемся сами понять, что вы хотите запустить.
  • On ANSI SQL Statements — разделять запросы, как раньше. Логика основывается исключительно на соответствии грамматике SQL:2016.
  • By statement separator — извлекать и запускать запросы, разграниченные разделителями. Используйте эту опцию, если первая не справилась с вашей задачей. Для GenericSQL разделителем выступает точка с запятой. Имейте в виду, что возможности настроить произвольный разделитель больше нет.

Некоторые из проблем, которые мы решили:

  • Многие пользователи заявляли о проблеме с запуском запросов CTE. Она должна была частично решиться при обновлении грамматики Generic с SQL:92 на SQL:2016. Однако вы также можете включить опцию On valid ANSI SQL statements or by separator, чтобы работать со сложными CTE. Другой пример оператора, поддерживаемого этой опцией, — необычный запрос MERGE.
  • Опция On valid ANSI SQL statements or by separator также поможет при запуске выражений, которые не являются запросами в грамматике SQL:2016 (например, show databases).

Помощь при написании кода

Неоднозначные названия колонок при использовании CTE

Инспекция, которая указывает на неоднозначные названия колонок, стала еще умнее и теперь учитывает любые колонки внутри обычных табличных выражений:

Вы можете использовать неквалифицированные системные функции SQL Server

Неквалифицированные системные функции и процедуры теперь не подсвечиваются как ошибки. Также для них теперь работает навигация и автодополнение.

Поддержка JSON Lines

Thanks to the IntelliJ Platform, DataGrip now has support for the newline-delimited JSON Lines format used for working with structured data and logs. IDE распознает типы файлов .jsonl, .jslines, .ldjson и .ndjson.

Настройки толщины шрифта

Новые настройки типографики позволяют подобрать стили шрифтов. В версии 2021.1 можно настроить толщину обычных и жирных шрифтов в меню Settings/Preferences | Editor | Fonts.

Импорт и экспорт

Предупреждение о незагруженных данных

Копируя бинарные данные, которые не были полностью загружены, вы увидите такое предупреждение:

Если вы не хотите, чтобы ваши данные обрезались, увеличьте значение в Settings/Preferences | Database | Data Views | Maximum number of bytes loaded per value.

Запрос в файле Excel

При экспорте в Excel запрос будет включен в файл и размещен на отдельном листе.

First row is header в контекстном меню

Импортируя файл CSV, вы теперь можете указать, что первая строка содержит заголовки, при помощи контекстного меню:

Пользовательский интерфейс

Выделение в редакторе

Перетаскивайте папки в проект

Теперь вы можете включать папки в проект, просто перетаскивая их мышью.

Выделение в редакторе

Раскрытие вкладок в режиме разделенного редактора

Если редактор разделен вертикально на несколько вкладок, вы можете расширить окно редактора для любой из вкладок, кликнув по ней дважды. Чтобы вернуть окно в прежнее состояние, снова нажмите по нему дважды.

Длинные названия в заголовках вкладок

Некоторое время назад мы ввели сокращенные названия вкладок. Не всем пользователям это понравилось, поэтому теперь вы можете настроить этот аспект так, как вам нравится.