2015-08-19 21 views

risposta

31

Se si tenta di creare un indice (con un nome) su un tavolo Redshift:

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

Riceverai l'errore

An error occurred when executing the SQL command: create index IX1 on "SomeTable"("UserId") ERROR: SQL command "create index IX1 on "SomeTable"("UserId")" not supported on Redshift tables.

Questo è perché, come altri data warehouses, Redshift utilizza columnar storage e, di conseguenza, molte delle tecniche di indicizzazione (come l'aggiunta di indici non in cluster) utilizzate in altri RDBMS non sono applicabili.

Dovete comunque la possibilità di fornire un unico sort key per tavolo, e si può anche influenzare le prestazioni con un distribution key per sharding i vostri dati, e la selezione appropriata compression encodings per ogni colonna per ridurre al minimo lo stoccaggio e I/O le spese generali.

Per esempio, nel tuo caso, si può scegliere di utilizzare UserId come chiave di ordinamento:

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

si potrebbe desiderare di leggere qualche primer likethese

+0

rotto: "come questi" – Faiz

+0

@Faiz Grazie - Ho aggiornato, anche se non posso davvero trovare un buon riferimento 'MindShift' su AWS per coloro che sono utilizzato per i database Sql più tradizionali. – StuartLC

1

È possibile Define Constraints ma sarà informativo solo, come dice Amazon, non vengono applicati da Amazon Redshift. Tuttavia, le chiavi primarie e le chiavi esterne vengono utilizzate come suggerimenti per la pianificazione e dovrebbero essere dichiarate se il processo ETL o altri processi nella propria applicazione ne rafforzano l'integrità.

Alcuni servizi come pipeline con modalità di inserimento (REPLACE_EXISTING) avranno bisogno di una chiave primaria definita nella tabella.

Per altre prestazioni, la risposta dello Stuart è corretta.

Problemi correlati