Подтвердить что ты не робот

Как создать индекс в Amazon Redshift

Я пытаюсь создать индексы в Amazon Redshift, но получил ошибку

create index on session_log(UserId);

UserId - целое поле.

4b9b3361

Ответ 1

Если вы попытаетесь создать индекс (с именем) в таблице Redshift:

create index IX1 on "SomeTable"("UserId");

Вы получите сообщение об ошибке

При выполнении команды SQL произошла ошибка: создайте индекс IX1 в "SomeTable" ( "UserId" ) ERROR: команда SQL "создать индекс IX1 в" SomeTable "(" UserId ")" не поддерживается в таблицах Redshift.

Это потому, что, как и другие хранилища данных , Redshift использует хранилище столбцов , и, как результат, многие из методов индексирования (например, добавление некластеризованных индексов), используемых в других СУБД, неприменимы.

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

Например, в вашем случае вы можете выбрать UserId в качестве ключа сортировки:

create table if not exists "SomeTable"
(
    "UserId" int,
    "Name" text
)
sortkey("UserId");

Возможно, вам захочется прочитать несколько праймеров как .

Ответ 2

Redshift позволяет создать первичный ключ

create table user (
id int ,
phone_number int,
primary key(id))

но поскольку Redshift не применяет эти ограничения, первичный ключ принимает повторяющиеся значения.

прилагаемая статья по этому вопросу

http://www.sqlhaven.com/amazon-redshift-what-you-need-to-think-before-defining-primary-key/

Ответ 3

Вы можете Определить ограничения, но будут только информационными, поскольку Amazon говорит: они не применяются Amazon Redshift. Тем не менее, первичные ключи и внешние ключи используются в качестве подсказок планирования, и они должны быть объявлены, если ваш процесс ETL или какой-либо другой процесс в вашем приложении обеспечивает их целостность.

Некоторым службам, таким как конвейеры с режимом вставки (REPLACE_EXISTING), потребуется первичный ключ, определенный в вашей таблице.

Для других целей производительности ответ Стюарта правильный.