Pull to refresh
0
JetBrains
Делаем эффективные инструменты для разработчиков

Экспорт данных в любом формате: что умеют IDE на платформе IntelliJ

Reading time3 min
Views19K
В 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
Tags:
Hubs:
Total votes 15: ↑14 and ↓1+13
Comments8

Articles

Information

Website
jetbrains.com
Registered
Founded
Employees
1,001–5,000 employees
Location
Чехия