[Документация Yandex Cloud](../../index.md) > [Yandex MPP Analytics for PostgreSQL](../index.md) > [Пошаговые инструкции](index.md) > Базы данных > Работа с политиками распределения данных

# Работа с политиками распределения данных в Yandex MPP Analytics for PostgreSQL

В Yandex MPP Analytics for PostgreSQL все таблицы в базе данных построчно распределены по [хостам-сегментам](../concepts/index.md#architecture-segment) кластера. Для каждой таблицы задается политика распределения данных, которая определяет правило, по которому строки распределяются между сегментами. Подробнее о политиках распределения в разделе [Распределение данных в Yandex MPP Analytics for PostgreSQL](../concepts/sharding.md).

При работе с политиками распределения данных вы можете:

* [задать политику распределения](#set-distribution-policy) для новой таблицы;
* [изменить политику и ключ распределения](#change-distribution-policy) для существующей таблицы;
* [перераспределить данные вручную](#redistribute-data) между сегментами.


## Задать политику распределения {#set-distribution-policy}

{% list tabs group=instructions %}

- SQL {#sql}

  Чтобы задать политику распределения, выполните команду:

  * Для хеш-распределения:

    ```sql
    CREATE TABLE <имя_таблицы> (
      <описание_столбцов>
    ) DISTRIBUTED BY (<ключ_распределения>);
    ```

    Где `<ключ_распределения>` — один или несколько столбцов через запятую.

  * Для случайного распределения:

    ```sql
    CREATE TABLE <имя_таблицы> (
      <описание_столбцов>
    ) DISTRIBUTED RANDOMLY;
    ```

  * Для реплицированного распределения:

    ```sql
    CREATE TABLE <имя_таблицы> (
      <описание_столбцов>
    ) DISTRIBUTED REPLICATED;
    ```

{% endlist %}


## Изменить политику распределения {#change-distribution-policy}

{% note warning %}

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

{% endnote %}

{% list tabs group=instructions %}

- SQL {#sql}

  Чтобы изменить политику распределения или ключ распределения, выполните команду:

  * Изменить на хеш-распределение или выбрать новый ключ распределения:

    ```sql
    ALTER TABLE <имя_таблицы>
    SET DISTRIBUTED BY (<ключ_распределения>);
    ```

    Где `<ключ_распределения>` — один или несколько столбцов через запятую.

  * Изменить на случайное распределение:

    ```sql
    ALTER TABLE <имя_таблицы>
    SET DISTRIBUTED RANDOMLY;
    ```

  * Изменить на реплицированное распределение:

    ```sql
    ALTER TABLE <имя_таблицы>
    SET DISTRIBUTED REPLICATED;
    ```

  При изменении политики данные автоматически перераспределяются между сегментами, кроме следующих случаев:

  * когда политика меняется с хеш-распределения на случайное распределение;
  * когда в предложении `DISTRIBUTED` указаны текущие настройки политики распределения.

  При необходимости вы можете [перераспределить данные вручную](#redistribute-data).

{% endlist %}


## Перераспределить данные вручную {#redistribute-data}

{% list tabs group=instructions %}

- SQL {#sql}

  Чтобы перераспределить данные, например при изменении политики с хеш-распределения на случайное распределение, выполните команду:

  ```sql
  ALTER TABLE <имя_таблицы>
  SET WITH (REORGANIZE=TRUE);
  ```

  При [расширении кластера](../concepts/expand.md) Yandex MPP Analytics for PostgreSQL данные перераспределяются автоматически, и запускать эту команду вручную не нужно.

{% endlist %}