[Документация Yandex Cloud](../../../index.md) > [Yandex MetaData Hub](../../index.md) > Data Catalog > Пошаговые инструкции > Источники > Настройка бэкенда для источника

# Подготовка бэкенда для источников данных

Data Catalog использует подключения к [источнику](../../concepts/data-catalog-sources.md) для чтения технических метаданных — определений таблиц, представлений (VIEW), материализованных представлений, процедур, индексов и информации из системных таблиц источника. Чтобы получить расширенные статистические оценки данных, Data Catalog может выполнять запросы на чтение данных или срез данных.

Для корректного и полного чтения метаданных нужно настроить бэкенд источника Data Catalog, т. е. параметры и доступы на уровне БД или другого сервиса, из которого загружаются метаданные.

{% note info %}

Загрузка из источника не копирует пользовательские данные в каталог метаданных.

{% endnote %}


## Общие рекомендации по настройке {#common-recommendations}

Чтобы Data Catalog выгружал максимально полные метаданные, настройте дополнительные права, доступы и параметры БД:

1. Для подключения к источнику создайте отдельного технического пользователя с правами только на чтение. Права на изменение данных, DDL-операции, удаление объектов или управление пользователями назначать не нужно.

1. Выдайте созданному пользователю доступ ко всем объектам, которые нужно каталогизировать. Если у технического пользователя нет доступа к схеме, таблице, представлению или индексу, Data Catalog может не выгрузить метаданные этого объекта или выгрузить их не полностью.

   Рекомендуется:

   * Выдавать права на все схемы и базы, которые должны попасть в каталог.
   * Не выдавать права на временные, системные и служебные схемы, если их не нужно показывать пользователям.
   * Использовать фильтры в настройках загрузок, чтобы явно исключать технические объекты.

1. Для полной выгрузки метаданных выдайте доступы не только к таблицам, но и к другим объектам:

   * представлениям;
   * материализованным представлениям;
   * хранимым процедурам и функциям, если источник поддерживает их выгрузку;
   * комментариям и описаниям полей;
   * системным каталогам;
   * статистике и логам запросов.

1. Включайте профилирование отдельно после оценки нагрузки на источник и проверки работоспособности загрузки.

   Если включено профилирование, при загрузке собирается статистика по таблицам и столбцам, а также могут выполняться дополнительные запросы на чтение данных или срез данных, чтобы получить расширенные статистические оценки. Это приводит к повышенной нагрузке на источник.

   Для источников в продуктивной среде лучше начинать с облегченного режима. Это регулируется размером выборки и набором статистических оценок.


## Настройка бэкендов разных типов


### PostgreSQL

Настройте бэкенд для загрузки [метаданных источника PostgreSQL](../../concepts/data-catalog-sources.md#source-pg):

1. Создайте отдельного технического пользователя для загрузки:

    ```sql
    CREATE USER data_catalog_reader WITH PASSWORD '<пароль>';
    ```

   Укажите его в настройках подключения к источнику.

1. Выдайте пользователю доступ к нужным базам:

   ```sql
   GRANT CONNECT ON DATABASE <имя_БД> TO data_catalog_reader;
   ```

1. Выдайте пользователю доступ к схемам:

   ```sql
   GRANT USAGE ON SCHEMA <имя_схемы> TO data_catalog_reader;
   ```

1. Выдайте пользователю доступ к таблицам и представлениям:

   ```sql
   GRANT SELECT ON ALL TABLES IN SCHEMA <имя_схемы> TO data_catalog_reader;
   ```

1. Чтобы вновь созданные таблицы тоже были доступны для загрузки, выдайте права на чтение:

   ```sql
   ALTER DEFAULT PRIVILEGES IN SCHEMA <имя_схемы>
   GRANT SELECT ON TABLES TO data_catalog_reader;
   ```

1. В каждой базе, для которой выполняется профилирование данных:

   1. Установите расширение для сбора статистики:

       ```sql
       CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
       ```

   1. Выдайте пользователю права на чтение статистики:

       ```sql
       GRANT pg_read_all_stats TO data_catalog_reader;
       ```

   1. Проверьте, что для истории запросов установлен срок хранения (retention) не менее недели.
   1. Примените настройки PostgreSQL:

      * `shared_preload_libraries = 'pg_stat_statements'` — после изменения перезапустите PostgreSQL.
      * `pg_stat_statements.max = 10000` — позволяет увеличить число сохраняемых уникальных запросов для сбора статистики по редко исполняемым запросам.
      * `pg_stat_statements.track = all` — позволяет отслеживать nested statements в функциях и процедурах.


### MySQL®

Настройте бэкенд для загрузки [метаданных источника MySQL®](../../concepts/data-catalog-sources.md#source-my):

1. Создайте отдельного технического пользователя для загрузки:

   ```sql
   CREATE USER 'data_catalog_reader'@'%' IDENTIFIED BY '<пароль>';
   ```

   Укажите его в настройках подключения к источнику.

1. Выдайте пользователю доступ к нужным базам данных:

   ```sql
   GRANT SELECT ON <имя_БД>.* TO 'data_catalog_reader'@'%';
   GRANT SHOW VIEW ON <имя_БД>.* TO 'data_catalog_reader'@'%';
   ```

Привилегия `SELECT` нужна для сбора метаданных и профилирования, `SHOW VIEW` — для чтения определений представлений. Без привилегии `SHOW VIEW` загрузка увидит представление как объект, но не сможет полноценно прочитать его определение и построить связи с другими объектами.

Для отображения информации о хранимых процедурах в каталоге пользователь должен иметь доступ к метаданным процедур. Обычно достаточно доступа к базе, но в Yandex Managed Service for MySQL® права могут быть ограничены политиками сервиса. Проверьте, что пользователю видны процедуры:

```sql
SHOW PROCEDURE STATUS WHERE Db = '<имя_БД>';
```


### ClickHouse®

Настройте бэкенд для загрузки [метаданных источника ClickHouse®](../../concepts/data-catalog-sources.md#source-ch):

1. Создайте отдельного технического пользователя для загрузки:

   ```sql
   CREATE USER data_catalog_reader IDENTIFIED BY '<пароль>';
   ```

   Укажите его в настройках подключения к источнику.

1. Выдайте пользователю доступ к нужным базам данных:

   ```sql
   GRANT SELECT ON <имя_БД>.* TO data_catalog_reader;
   ```

1. Для чтения метаданных выдайте доступ к системным таблицам:

   ```sql
   GRANT SELECT ON system.databases TO data_catalog_reader;
   GRANT SELECT ON system.tables TO data_catalog_reader;
   GRANT SELECT ON system.columns TO data_catalog_reader;
   ```

1. Если используются системные словари ClickHouse®, также выдайте к ним доступ:

   ```sql
   GRANT SELECT ON system.dictionaries TO data_catalog_reader;
   ```

Если используется RBAC и профили ClickHouse®, можно дополнительно ограничить пользователя режимом «только чтение». При этом будут разрешены запросы на чтение, включая `SELECT`, `SHOW`, `DESCRIBE`, `EXISTS`. Такие команды считаются эквивалентными чтению из системных таблиц.


### OpenSearch

Настройте бэкенд для загрузки [метаданных источника OpenSearch](../../concepts/data-catalog-sources.md#source-os):

1. Создайте роль с правами доступа на чтение метаданных. Рекомендуемый набор прав на уровне индексов:

   ```json
   PUT /_plugins/_security/api/roles/read_indices_data_catalog

   {
      "index_permissions": [
         {
           "index_patterns": ["*"],
           "allowed_actions": ["read", "view_index_metadata"]
         }
      ]
   }
   ```

   Для более строгой настройки рекомендуем ограничить `names` нужными шаблонами индексов, например:

   ```json
   PUT /_plugins/_security/api/roles/read_indices_data_catalog

   {
      "index_permissions": [
         {
           "index_patterns": ["prod-*", "analytics-*"],
           "allowed_actions": ["read", "view_index_metadata"]
         }
      ]
   }
   ```

1. Создайте отдельного технического пользователя для загрузки и назначьте ему созданную роль:

   ```json
   PUT /_plugins/_security/api/internalusers/data_catalog_reader

   {
     "password": "<пароль>",
     "opendistro_security_roles": ["read_indices_data_catalog"]
   }
   ```

   Укажите его в настройках подключения к источнику.


### Greenplum®

Настройте бэкенд для загрузки [метаданных источника Greenplum®](../../concepts/data-catalog-sources.md#source-gp):

1. Создайте отдельного технического пользователя:

   ```sql
   CREATE USER datacatalog_ingest WITH PASSWORD '<пароль>';
   ```

   Укажите его в настройках подключения к источнику.

1. Выдайте доступ к базе:

   ```sql
   GRANT CONNECT ON DATABASE <имя_БД> TO datacatalog_ingest;
   ```

1. Выдайте доступ к нужным схемам:

   ```sql
   GRANT USAGE ON SCHEMA <имя_схемы> TO datacatalog_ingest;
   ```

1. Выдайте доступ на чтение таблиц:

   ```sql
   GRANT SELECT ON ALL TABLES IN SCHEMA <имя_схемы> TO datacatalog_ingest;
   ```

   Если нужно выгружать только структуру без профилирования и проверки доступности объектов, привилегия `SELECT` на все таблицы необязательна.

1. Чтобы вновь созданные таблицы тоже были доступны для загрузки, выдайте права на чтение:

   ```sql
   ALTER DEFAULT PRIVILEGES IN SCHEMA <имя_схемы>
   GRANT SELECT ON TABLES TO datacatalog_ingest;
   ```

1. Для анализа наиболее частых запросов могут потребоваться дополнительные права. Например:

   ```sql
   GRANT pg_read_all_stats TO datacatalog_ingest;
   ```

   Также может потребоваться включенное расширение `pg_stat_statements`:

   ```sql
   CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
   ```

   {% note warning %}

   Доступность `pg_stat_statements` и роли `pg_read_all_stats` зависит от версии Greenplum® и настроек кластера.

   {% endnote %}

1. Чтобы Data Catalog автоматически отображал бизнес-описания, добавьте комментарии к таблицам и столбцам. Например:

   ```sql
   COMMENT ON TABLE mart.orders_daily IS 'Daily aggregated order metrics';
   COMMENT ON COLUMN mart.orders_daily.orders_count IS 'Number of orders per day';
   ```


### Yandex StoreDoc/MongoDB

Настройте бэкенд для загрузки [метаданных источников Yandex StoreDoc/MongoDB](../../concepts/data-catalog-sources.md#source-mg):

1. Создайте отдельного технического пользователя:

   ```text
   db.createUser({ user:"datacatalog_ingest", pwd:"<пароль>", roles:[]});
   ```

   Укажите его в настройках подключения к источнику.

1. Для стандартной выгрузки выдайте техническому пользователю минимально необходимые права:

   * Доступ на чтение ограниченного списка баз, если нужно выгрузить только их метаданные:

      ```text
      db.grantRolesToUser("datacatalog_ingest", [
      { role: "read", db: "<имя_БД>" }
      ]);
      ```

   * Роль `readAnyDatabase`, если нужно выгрузить метаданные всех доступных баз:

      ```text
      db.grantRolesToUser("datacatalog_ingest", [
      { role: "readAnyDatabase", db: "admin" }
      ]);
      ```


## Обзор необходимых требований для загрузки {#summary-user-privileges}

#|
|| **Источник** | **Минимальные права** | **Для представлений / связей объектов** | **Для статистики выполнения запросов** | **Для профилирования** ||
|| PostgreSQL, Greenplum® | `CONNECT`, `USAGE`, `SELECT` на схемы и таблицы | Доступ к определениям представлений
|
* Расширение `pg_stat_statements`.
* Роль `pg_read_all_stats`.
* Версия PostgreSQL 13 и выше | `SELECT` на таблицы ||
|| MySQL® | `SELECT` на БД | `SHOW VIEW` | Не поддерживается | `SELECT` на таблицы ||
|| ClickHouse® | `SELECT` на БД и системные таблицы
|
* Доступ к `system.tables`.
* Доступ к определениям таблиц, представлений и материализованных представлений
| Не поддерживается | `SELECT` на таблицы ||
|| OpenSearch | Чтение индексов и метаданных | Не применимо | Не поддерживается | Доступ на чтение индексов ||
|| Yandex StoreDoc/MongoDB | Чтение БД | Настройка не требуется | Не поддерживается | Не поддерживается ||
|| Yandex Data Transfer, WebSQL | Настройка не требуется | Не поддерживается | Не поддерживается | Не поддерживается ||
|| DataLens | Для сервисного аккаунта источника данных необходим доступ к нужным дашбордам, датасетам, чартам и отчетам | Не поддерживается | Не поддерживается | Не поддерживается ||
|#

_ClickHouse® является зарегистрированным товарным знаком [ClickHouse, Inc](https://clickhouse.com)._

_Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками Broadcom Inc в США и/или других странах._