web-dev-qa-db-fra.com

Comment créer un index dans Amazon Redshift

J'essaie de créer des index dans Amazon Redshift mais j'ai reçu une erreur

create index on session_log(UserId);

UserId est un champ entier.

22
user3600910

Si vous essayez de créer un index (avec un nom) sur une table Redshift:

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

Vous recevrez l'erreur

Une erreur s'est produite lors de l'exécution de la commande SQL: créer l'index IX1 sur "SomeTable" ("UserId") ERREUR: la commande SQL "créer l'index IX1 sur" SomeTable "(" UserId ")" n'est pas prise en charge sur les tables Redshift.

En effet, comme les autres entrepôts de données , Redshift utilise stockage en colonnes , et par conséquent, de nombreuses techniques d'indexation (comme l'ajout d'index non clusterisés) utilisées dans d'autres SGBDR ne sont pas applicables.

Vous avez cependant la possibilité de fournir un seul clé de tri par table, et vous pouvez également influencer les performances avec un clé de distribution pour partager vos données et sélectionner approprié encodages de compression pour chaque colonne afin de minimiser les frais généraux de stockage et d'E/S.

Par exemple, dans votre cas, vous pouvez choisir d'utiliser UserId comme clé de tri:

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

Vous voudrez peut-être lire quelques amorces commeces

50
StuartLC

Redshift permet de créer une clé primaire

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

mais comme Redshift n'applique pas ces contraintes, la clé primaire accepte les valeurs en double.

article joint sur cette question

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

3
user3600910

Vous pouvez Définir les contraintes mais sera uniquement informatif, comme Amazon le dit: elles ne sont pas appliquées par Amazon Redshift. Néanmoins, les clés primaires et les clés étrangères sont utilisées comme conseils de planification et doivent être déclarées si votre processus ETL ou tout autre processus dans votre application renforce leur intégrité.

Certains services comme les pipelines avec mode d'insertion (REPLACE_EXISTING) auront besoin d'une clé primaire définie dans votre table.

À d'autres fins de performance, la réponse du Stuart est correcte.

2
Ricardo Edo