Я пытаюсь создать индексы в Amazon Redshift, но получил ошибку
create index on session_log(UserId);
UserId
- целое поле.
Я пытаюсь создать индексы в Amazon Redshift, но получил ошибку
create index on session_log(UserId);
UserId
- целое поле.
Если вы попытаетесь создать индекс (с именем) в таблице 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");
Возможно, вам захочется прочитать несколько праймеров как .
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/
Вы можете Определить ограничения, но будут только информационными, поскольку Amazon говорит: они не применяются Amazon Redshift. Тем не менее, первичные ключи и внешние ключи используются в качестве подсказок планирования, и они должны быть объявлены, если ваш процесс ETL или какой-либо другой процесс в вашем приложении обеспечивает их целостность.
Некоторым службам, таким как конвейеры с режимом вставки (REPLACE_EXISTING), потребуется первичный ключ, определенный в вашей таблице.
Для других целей производительности ответ Стюарта правильный.