В DataGrip, как и в других наших IDE с поддержкой баз данных, есть механизм экспорта данных. Пользователь выбирает формат экспорта из предложенных или создает его сам.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/0d3/7d7/35f/0d37d735f7338f42a23da1a5218682c6.png)
Таблица, представление или результат могут быть экспортированы в файл или буфер обмена.
Экспорт в файл:
— Контекстное меню на таблице или представлении в дереве → Dump data to file.
— Контекстное меню на запросе в редакторе → Execute to file.
— В панели инструментов редактора данных или результата нажать кнопку Dump data → To File...
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/b40/3f8/327/b403f8327e4b9ff1b9e7c84e7c4ba016.png)
Экспорт в буфер обмена:
— Выбрать данные для экспорта в редакторе данных или результате и нажать Copy или Ctrl/Cmd+C.
— В панели инструментов результата или редактора данных нажать кнопку Dump data → To File...
Некоторые форматы настроены по умолчанию. Сам механизм экспортирования мы зовём «экстрактором»: в IDE уже встроены несколько экстракторов для разных форматов. На примере рассмотрим экспорт данных в буфер обмена, но это работает и для экспорта в файл.
В меню слева от кнопки Dump Data выберите экстрактор.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/521/225/429/5212254295cac9cff264d7fb2448cec2.png)
Набор INSERT/UPDATE запросов или JSON, CSV, HTML — решать вам. Здесь описано, как работают встроенные экстракторы, не будем на этом заострять внимание.
Логично, что пользователи хотят расширить встроенные возможности.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/fa6/266/4ca/fa62664cab166a24f445d986935551cf.png)
Чтобы создать собственный экстрактор для формата на основе CSV (или, строго говоря, DSV), в этом же меню нажмите на Configure CSV formats…
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/90f/006/dcf/90f006dcf3b0edb11627b35012745bb0.png)
Здесь можно внести изменения в уже существующие экстракторы или создать свой. Например, Confluence Wiki Markup.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/ab0/a67/48d/ab0a6748daba17eca6ac481ed3bc47a6.png)
Сохранённый новый экстрактор появится в меню:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/c18/746/95f/c1874695ffb035507d76c19428ddc59c.png)
Для более сложных случаев используйте скрипты. Несколько встроенных экстракторов — это скрипты на 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](https://habrastorage.org/r/w1560/getpro/habr/post_images/145/1ef/c92/1451efc922b0e493f20cdd3de7adc7e8.png)
Изменяйте существующие экстракторы или добавляйте новые в эту папку. Например, создадим экстрактор для экспорта данных в одну строчку через запятую. Это удобно, если значения из одного столбца вставят в оператор IN предложения WHERE.
На основе существующего экстрактора мы создали новый: CSV-ToOneRow-Groovy.csv.groovy.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/105/4d5/93e/1054d593e5981bdd10c4beea90412325.png)
Доступно в контексте:
В DasTable два важных метода:
До версии 2017.3:
Начиная с 2017.3:
Ещё про API читайте здесь.
Если вы проделываете это в IntelliJ IDEA с установленным Groovy, будут работать подсветка и автодополнение:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/2d9/0f4/25c/2d90f425cb1082df95b5d80ab28d89d3.png)
Положите новый скрипт в папку и вперед: он готов к использованию и виден в меню.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/e4c/c79/c20/e4cc79c208356b49ee994af466c26b45.png)
Например, скопируйте эти значения и вставьте в запрос.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/f21/b88/180/f21b88180e00ac076e87c44b470f4447.png)
Ещё один пример: в MySQL и PostgreSQL допускается многострочный синтаксис для INSERT. Изменив текущий экстрактор для INSERT’ов, получим новый файл: SQL-Inserts-MultirowSynthax.sql.groovy.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/c9b/718/0ee/c9b7180eef7976c752c46e71f4be3fa9.png)
Выбираем только что созданный экстрактор, копируем данные.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/2fa/619/5da/2fa6195dadc00557471a4a21f1f7c2dc.png)
Готово:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/7d3/ebf/2b3/7d3ebf2b392611b55c8e2be6dc75e37c.png)
Некоторые пользователи уже разобрались с этим и написали свои экстракторы:
— Текстовая таблица. (Похожий).
— Массив Php.
— Markdown.
— DBunit XML.
Будет круто, если этот текст вдохновит вас писать свои экстракторы и делиться ими с другими!
Команда DataGrip
![image](https://habrastorage.org/getpro/habr/post_images/0d3/7d7/35f/0d37d735f7338f42a23da1a5218682c6.png)
Направления экспорта
Таблица, представление или результат могут быть экспортированы в файл или буфер обмена.
Экспорт в файл:
— Контекстное меню на таблице или представлении в дереве → Dump data to file.
— Контекстное меню на запросе в редакторе → Execute to file.
— В панели инструментов редактора данных или результата нажать кнопку Dump data → To File...
![image](https://habrastorage.org/getpro/habr/post_images/b40/3f8/327/b403f8327e4b9ff1b9e7c84e7c4ba016.png)
Экспорт в буфер обмена:
— Выбрать данные для экспорта в редакторе данных или результате и нажать Copy или Ctrl/Cmd+C.
— В панели инструментов результата или редактора данных нажать кнопку Dump data → To File...
Форматы по умолчанию
Некоторые форматы настроены по умолчанию. Сам механизм экспортирования мы зовём «экстрактором»: в IDE уже встроены несколько экстракторов для разных форматов. На примере рассмотрим экспорт данных в буфер обмена, но это работает и для экспорта в файл.
В меню слева от кнопки Dump Data выберите экстрактор.
![image](https://habrastorage.org/getpro/habr/post_images/521/225/429/5212254295cac9cff264d7fb2448cec2.png)
Набор INSERT/UPDATE запросов или JSON, CSV, HTML — решать вам. Здесь описано, как работают встроенные экстракторы, не будем на этом заострять внимание.
Логично, что пользователи хотят расширить встроенные возможности.
![image](https://habrastorage.org/getpro/habr/post_images/fa6/266/4ca/fa62664cab166a24f445d986935551cf.png)
Пользовательские экстракторы на основе CSV
Чтобы создать собственный экстрактор для формата на основе CSV (или, строго говоря, DSV), в этом же меню нажмите на Configure CSV formats…
![image](https://habrastorage.org/getpro/habr/post_images/90f/006/dcf/90f006dcf3b0edb11627b35012745bb0.png)
Здесь можно внести изменения в уже существующие экстракторы или создать свой. Например, Confluence Wiki Markup.
![image](https://habrastorage.org/getpro/habr/post_images/ab0/a67/48d/ab0a6748daba17eca6ac481ed3bc47a6.png)
Сохранённый новый экстрактор появится в меню:
![image](https://habrastorage.org/getpro/habr/post_images/c18/746/95f/c1874695ffb035507d76c19428ddc59c.png)
Создание экстрактора в любой формат при помощи скриптов
Для более сложных случаев используйте скрипты. Несколько встроенных экстракторов — это скрипты на 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](https://habrastorage.org/getpro/habr/post_images/145/1ef/c92/1451efc922b0e493f20cdd3de7adc7e8.png)
Изменяйте существующие экстракторы или добавляйте новые в эту папку. Например, создадим экстрактор для экспорта данных в одну строчку через запятую. Это удобно, если значения из одного столбца вставят в оператор IN предложения WHERE.
На основе существующего экстрактора мы создали новый: CSV-ToOneRow-Groovy.csv.groovy.
![image](https://habrastorage.org/getpro/habr/post_images/105/4d5/93e/1054d593e5981bdd10c4beea90412325.png)
Доступно в контексте:
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](https://habrastorage.org/getpro/habr/post_images/2d9/0f4/25c/2d90f425cb1082df95b5d80ab28d89d3.png)
Положите новый скрипт в папку и вперед: он готов к использованию и виден в меню.
![image](https://habrastorage.org/getpro/habr/post_images/e4c/c79/c20/e4cc79c208356b49ee994af466c26b45.png)
Например, скопируйте эти значения и вставьте в запрос.
![image](https://habrastorage.org/getpro/habr/post_images/f21/b88/180/f21b88180e00ac076e87c44b470f4447.png)
Ещё один пример: в MySQL и PostgreSQL допускается многострочный синтаксис для INSERT. Изменив текущий экстрактор для INSERT’ов, получим новый файл: SQL-Inserts-MultirowSynthax.sql.groovy.
![image](https://habrastorage.org/getpro/habr/post_images/c9b/718/0ee/c9b7180eef7976c752c46e71f4be3fa9.png)
Выбираем только что созданный экстрактор, копируем данные.
![image](https://habrastorage.org/getpro/habr/post_images/2fa/619/5da/2fa6195dadc00557471a4a21f1f7c2dc.png)
Готово:
![image](https://habrastorage.org/getpro/habr/post_images/7d3/ebf/2b3/7d3ebf2b392611b55c8e2be6dc75e37c.png)
Некоторые пользователи уже разобрались с этим и написали свои экстракторы:
— Текстовая таблица. (Похожий).
— Массив Php.
— Markdown.
— DBunit XML.
Будет круто, если этот текст вдохновит вас писать свои экстракторы и делиться ими с другими!
Команда DataGrip