company_banner

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

    В 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
    • +13
    • 4,4k
    • 8
    JetBrains 389,38
    Компания
    Поделиться публикацией
    Похожие публикации
    Комментарии 8
    • 0

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

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

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

      • 0
        Для скрипта есть возможность указать, в чем открыть результат?
        Не хватает экспорта в Excel — сделать его должно быть несложно (тот же ExcelML), остается только открыть сразу в Excel.
        • 0
          К сожалению, внутри скрипта файл открыть не получиться: к этому моменту он еще не создан.
          • 0
            Не обязательно внутри скрипта. Это скорее лучше в доп. настройки вынести — приложение, с помощью которого открыть результат выгрузки. Будет полезно, ибо удобно для каких-то быстрых обработок набора данных.
        • 0

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

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

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

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

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое