Почему этот Redshift создает запрос таблицы с DISTKEY и DISTSTYLE не работает? - PullRequest
0 голосов
/ 23 октября 2019

Я выполняю этот запрос в Redshift:

CREATE TABLE my_table(
    auto_increment              BIGINT          IDENTITY(0, 1),
    id                          INTEGER         NOT NULL,
    col_1                       INTEGER         NOT NULL DISTKEY SORTKEY,
    foreign key(col_1) references foreign_table(id),
    col_2                       INTEGER,
    col_3                       VARCHAR(255),
    col_4                       TIMESTAMP       DEFAULT CURRENT_TIMESTAMP,
    col_5                       TIMESTAMP,
    PRIMARY KEY (id)
) DISTSTYLE ALL;

Но я получаю сообщение об ошибке: Cannot specify DISTKEY for column "col_1" of table "my_table" when DISTSTYLE is NONE or EVEN;

Почему я получаю эту ошибку? Как мне это исправить? Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Вы не можете указать столбец как DISTKEY, если ваш DISTSTYLE равен ALL.

Что означает DISTSTYLE ALL, так это то, что ваша таблица будет скопирована как единое целое и сохранена на всех узлах, поэтому вы не распределяете данные по любым KEY.

Так что, если вы хотите распределить данные на основе DISTKEY, вам нужно установить DISTSTYLE KEY.

1 голос
/ 23 октября 2019

Стиль распространения может быть одним из нескольких вариантов. Из Стили распространения - Amazon Redshift :

  • Авто: Amazon Redshift назначает оптимальный стиль распространения в зависимости от размера данных таблицы.
  • Событие: Узел-лидер распределяет строки по срезам в циклическом порядке.
  • Ключ: Строки распределены по значениям в одномстолбец.
  • Все: Копия всей таблицы распространяется на каждый узел.

Эта спецификация:

col_1                       INTEGER         NOT NULL DISTKEY SORTKEY,

являетсяуказав Redshift использовать стиль распространения Key , поскольку он назначает столбец для использования в качестве DISTKEY.

Тем не менее, DISTSTYLE ALL внизу указывает Redshift на использованиеAll стиль распространения.

Таким образом, Redshift выдает ошибку, поскольку запрошены два различных стиля распространения . Вам нужно будет выбрать один, а не оба.

Учитывая, что вы выбрали столбец как DISTKEY, вам, вероятно, следует удалить DISTSTYLE ALL.

Краткое руководство по DISTKEY иSORTKEY is:

  • Для DISTKEY используйте столбец, который наиболее часто используется в JOIN
  • Для SORTKEY, используйте столбец, который наиболее часто используется в WHERE

Я заметил, что вы выбрали один столбец для DISTKEY и SORTKEY. Вы можете подтвердить, что это подходит для ваших данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...