# SQL фрагменты ![Выделите и сохраните как фрагмент](../images/highlight_and_save_as_snippet.gif) **SQL-фрагменты** — это повторно используемые фрагменты SQL или собственные запросы. Любой, у кого есть разрешения на [редактор SQL](./writing-sql.md), может создавать и редактировать фрагменты, которые затем становятся доступными для всех авторов SQL. Например, если вы часто выполняете запросы, включающие несколько таблиц, вы можете сохранить код SQL, соединяющий эти таблицы, в виде фрагмента, чтобы вы (и другие сотрудники вашей организации) могли повторно использовать этот код в нескольких вопросах. ## Как создрать фрагмент Вот простой запрос с соединением с использованием **образца базы данных**, входящего в состав GlarusBI. ``` SELECT * FROM orders AS o LEFT JOIN products AS p ON o.product_id = p.id ``` Давайте сохраним все после FROM как фрагмент для повторного использования в других запросах. В **SQL редакторе**: 1. **Выделите раздел SQL**, который вы хотите сохранить. В этом случае мы выберем следующий код SQL: ``` orders AS o LEFT JOIN products AS p ON o.product_id = p.id ``` 2. **Щелкните правой кнопкой мыши выделенный раздел.** 3. **Выберите Сохранить как фрагмент** чтобы создать Фрагмент. Появится модальное окно с выделенным оператором SQL. 4. **Редактируйте, назовите и опишите свой фрагмент**. Имена фрагментов должны быть уникальными. Нажмите кнопку «Сохранить», чтобы создать фрагмент. В данном случае мы назвали фрагмент «Заказы и товары». Фрагмент теперь будет доступен для всех. Вот как выглядит фрагмент в редакторе SQL: ``` SELECT * FROM {% raw %}{{snippet: Orders and Products}}{% endraw %} ``` При написании в редакторе SQL теперь вы можете начать вводить `{% raw %}{{snippet:}}{% endraw %}`, и GlarusBI предложит варианты автозаполнения для доступных фрагментов. Примечание. Если вы используете псевдонимы во фрагменте, вам также необходимо соблюдать эти псевдонимы за пределами фрагмента. Например, если псевдоним `products AS p` для фрагмента кода, код вне фрагмента должен будет использовать псевдоним `p` для ссылки на столбцы в этой таблице (как в `p.column_name`). ## Меню фрагментов ![Боковая панель фрагмента и вставка](../images/snippet_sidebar_and_insertion.gif) **Боковая панель** редактора SQL имеет меню **Фрагменты SQL**, в котором перечислены доступные и заархивированные фрагменты. Щелкните значок фрагмента в правой части редактора SQL под значком справочника данных и значком переменных χ. GlarusBI выдвинет боковое меню со списком доступных фрагментов. В меню фрагментов SQL вы можете: - **Создать фрагмент.** Нажмите «+» в правом верхнем углу боковой панели «Фрагменты SQL», чтобы создать новый фрагмент. - **Предварительно просмотреть фрагменты.** Нажмите на стрелку вниз справа от фрагмента, чтобы увидеть его описание и предварительный просмотр кода SQL. Также есть возможность редактировать фрагмент. - **Вставить фрагмент.** Нажмите на название фрагмента, чтобы вставить его в ваш запрос в текущем местоположении курсора. - **Осуществить поиск фрагментов**. Если вы сохранили более 15 фрагментов, слева от кнопки «+» появится значок **Поиск** (классическое увеличительное стекло). Обратите внимание, что результаты поиска включают только фрагменты, на которые у пользователя есть разрешения. Папки фрагментов SQL не заполняют результаты поиска. - [**Редактировать фрагмент**](#editing-snippets) Вы можете изменить имя, описание и код фрагмента. - [**Архивировать и разархивировать фрагмент**](#archiving-snippets) В модальном окне «Правка» можно заархивировать фрагмент, который удаляет фрагмент из меню фрагмента и параметров автозаполнения в редакторе SQL. ## Редактирование фрагментов Вы можете **редактировать** фрагмент кода в любое время, выбрав его в боковом меню SQL фрагменты в редакторе SQL. Нажмите стрелку вниз справа от фрагмента, затем нажмите **Изменить**. Вы можете изменить код SQL, имя фрагмента и описание фрагмента. Редактирование фрагментов — отличный способ внести изменения сразу во многие вопросы. Если, например, вы сохранили код SQL для извлечения пользовательских данных из таблиц X, Y и Z как фрагмент «Данные пользователя», но вам нужно изменить способ извлечения этих данных (например, добавив данные из другого столбца или таблицы), вы можете обновить код SQL во фрагменте, и все вопросы, в которых используется фрагмент «Данные пользователя», будут иметь обновленный код. **Редактирование названия фрагмента**. Изменение имени фрагмента приведет к обновлению имени фрагмента в каждом вопросе, в котором используется этот фрагмент. Это не нарушит существующие вопросы (базовый SQL остается неизменным), но имейте в виду, что другие пользователи могут быть застигнуты врасплох, обнаружив, что вы переименовали фрагмент, который они часто используют, с «Заказы и продукты» на «Все вещи» или что-то другое. **Редактирование SQL фрагмента.** Здесь мы должны напомнить вам, что с большой силой приходит большая ответственность. Есть одно важное предостережение при редактировании фрагментов, достойное выноски: > **Внимание: если вы отредактируете фрагмент и включите неработающий код, вы нарушите все вопросы, в которых используется этот фрагмент.** Обязательно протестируйте свой код, прежде чем сохранять его в существующем фрагменте. ## Архивирование фрагментов **Архивация** фрагментов поможет убрать устаревшие или менее релевантные фрагменты. Когда вы архивируете фрагмент, он больше не отображается в раскрывающемся списке автозаполнения фрагмента, и больше не отображается в основном списке фрагментов на боковой панели **редактора SQL**. Архивация фрагмента не влияет на существующие запросы, использующие этот фрагмент, поэтому вы можете безопасно архивировать фрагмент, не затрагивая вопросы. Вы можете получить доступ к заархивированному фрагменту из меню боковой панели фрагментов, нажав кнопку «Архив» в левом нижнем углу боковой панели. Хотя фрагмент нельзя удалить, его можно заархивировать и разархивировать в любое время. Примечание: два фрагмента не могут иметь одно и то же имя, так как даже если фрагмент заархивирован, он может быть активен в вопросах. ## Разрешения фрагментов Любой пользователь, у которого есть права редактора SQL хотя бы для одной из ваших подключенных баз данных, сможет просматривать боковую панель фрагментов, а также сможет создавать, редактировать, архивировать или разархивировать любые фрагменты — даже фрагменты, предназначенные для использования с базами данных. У пользователя нет прав на редактирование SQL. Некоторые планы содержат дополнительные функции для организации фрагментов в папки и настройки разрешений для этих папок. См. нашу [документацию по папкам и разрешениям фрагментов SQL](../../permissions/snippets.md). ## Узнайте больше - [SQL фрагменты. Документация Metabase](https://www.metabase.com/learn/building-analytics/sql-templates/sql-snippets.html) - [SQL фрагменты vs Сохраненные вопросы vs Просмотры. Документация Metabase](https://www.metabase.com/learn/building-analytics/sql-templates/organizing-sql.html). - Если у вас возникли проблемы с SQL-запросом, перейдите к [руководству по устранению неполадок с SQL](../../troubleshooting-guide/sql.md).