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.
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");
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/
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.