В DataGrip, как и в других наших IDE с поддержкой баз данных, есть механизм экспорта данных. Пользователь выбирает формат экспорта из предложенных или создает его сам.

image

Направления экспорта


Таблица, представление или результат могут быть экспортированы в файл или буфер обмена.

Экспорт в файл:
— Контекстное меню на таблице или представлении в дереве > Dump data to file.
— Контекстное меню на запросе в редакторе > Execute to file.
— В панели инструментов редактора данных или результата нажать кнопку Dump data > To File...

image

Экспорт в буфер обмена:
— Выбрать данные для экспорта в редакторе данных или результате и нажать Copy или Ctrl/Cmd+C.
— В панели инструментов результата или редактора данных нажать кнопку Dump data > To File...

Форматы по умолчанию


Некоторые форматы настроены по умолчанию. Сам механизм экспортирования мы зовём «экстрактором»: в IDE уже встроены несколько экстракторов для разных форматов. На примере рассмотрим экспорт данных в буфер обмена, но это работает и для экспорта в файл.

В меню слева от кнопки Dump Data выберите экстрактор.

image

Набор INSERT/UPDATE запросов или JSON, CSV, HTML — решать вам. Здесь описано, как работают встроенные экстракторы, не будем на этом заострять внимание.

Логично, что пользователи хотят расширить встроенные возможности.

image

Пользовательские экстракторы на основе CSV


Чтобы создать собственный экстрактор для формата на основе CSV (или, строго говоря, DSV), в этом же меню нажмите на Configure CSV formats…

image

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

image

Сохранённый новый экстрактор появится в меню:

image

Создание экстрактора в любой формат при помощи скриптов


Для более сложных случаев используйте скрипты. Несколько встроенных экстракторов — это скрипты на Groovy или JavaScript: CSV-Groovy.csv.groovy, HTML-JavaScript.html.js и другие. В наших примерах будем использовать Groovy.

Разберём имя файла CSV-Groovy.csv.groovy:
CSV-Groovy — имя скрипта.
csv — расширение файла с результатом.
groovy — расширение файла скрипта. Если редактируете его в IntelliJ IDEA, поможет иметь подсветку кода и автодополнение.

Скрипты обычно расположены в `Scratches and Consoles/Extensions/Database Tools and SQL/data/extractors`. Чтобы попасть в эту папку, нажмите Go to scripts directory в меню выбора экстракторов.

image

Изменяйте существующие экстракторы или добавляйте новые в эту папку. Например, создадим экстрактор для экспорта данных в одну строчку через запятую. Это удобно, если значения из одной столбцы вставят в оператор IN предложения WHERE.

На основе существующего экстрактора мы создали новый: CSV-ToOneRow-Groovy.csv.groovy.

image

Доступно в контексте:

OUT {append()} //объект для вывода данных
FORMATTER {format(row, col); formatValue(Object, col)} //конвертер данных в строку
TRANSPOSED Boolean //нажата ли кнопка Transpose (в меню по иконке с шестеренкой)
 
COLUMNS  List<DataColumn> //выбранные столбцы
ALL_COLUMNS List<DataColumn> //все столбцы
//Это равные объекты, если ничего не выделено.

ROWS Iterable<DataRow> //выбранные строчки, где:
DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
DataColumn { columnNumber(); name() } 

TABLE DasTable //текущая таблица

В DasTable два важных метода:

До версии 2017.3:
DasObject getDbParent()
JBIterable<DasObject> getDbChildren(Class, ObjectKind)

Начиная с 2017.3:
DasObject getDasParent()
JBIterable<DasObject> getDasChildren(ObjectKind) 

Ещё про API читайте здесь.

Если вы проделываете это в IntelliJ IDEA с установленным Groovy, будут работать подсветка и автодополнение:

image

Положите новый скрипт в папку и вперед: он готов к использованию и виден в меню.

image

Например, скопируйте эти значения и вставьте в запрос.

image

Ещё один пример: в MySQL и PostgreSQL допускается многострочный синтаксис для INSERT. Изменив текущий экстрактор для INSERT’ов, получим новый файл: SQL-Inserts-MultirowSynthax.sql.groovy.

image

Выбираем только что созданный экстрактор, копируем данные.

image
Готово:

image

Некоторые пользователи уже разобрались с этим и написали свои экстракторы:

Текстовая таблица. (Похожий).
Массив Php.
Markdown.
DBunit XML.

Будет круто, если этот текст вдохновит вас писать свои экстракторы и делиться ими с другими!

Команда DataGrip

Комментарии (8)


  1. Dreyk
    10.11.2017 12:41

    не могу понять до конца, клиент баз данных, встроенный, например, в RubyMine, — это тот же Datagrip? или в standalone что-то еще?


    1. moscas Автор
      10.11.2017 13:03

      Пока тот же. Не планируем в ближайшем будущем добавлять что-то специфическое в DataGrip.


      1. SamDark
        10.11.2017 19:47
        -1

        И придётся держать две IDE :(


  1. minamoto
    10.11.2017 13:59

    Для скрипта есть возможность указать, в чем открыть результат?
    Не хватает экспорта в Excel — сделать его должно быть несложно (тот же ExcelML), остается только открыть сразу в Excel.


    1. moscas Автор
      10.11.2017 19:13

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


      1. minamoto
        10.11.2017 21:44

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


  1. SamDark
    10.11.2017 19:49

    В дефолтном экспорте SQL ошибочка, кстати. Не экранируются называния столбцов с именами типа order или from. Это заставило познакомиться с скриптами экспорта более детально и они, могу сказать смело, чудесны.


  1. asmrnv777
    10.11.2017 21:55

    Ребят, а может подскажете, как в AS поменять расположение кнопок на панели Logcat?

    Вот вопрос на SO: stackoverflow.com/questions/47184609/rearrange-logcat-buttons-in-android-studio

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