Como criar um índice no Redshift Amazon
create index on session_log(UserId);
UserId
é um campo inteiro.
3 answers
Se tentar criar um índice (com um nome) numa tabela Redshift:
create index IX1 on "SomeTable"("UserId");
Vais receber o erro
Ocorreu um erro ao executar o comando SQL: criar o índice IX1 em "SomeTable"("UserId") Erro: comando SQL "create index IX1 on "SomeTable" ("UserId") " not supported on Redshift tables.
Isto é porque, tal como outros armazéns de Dados , O Redshift usa armazenamento colunar, e como resultado, muitos dos índices as técnicas (como a adição de índices Não agrupados) utilizadas em outros RDBMS não são aplicáveis.
Você, no entanto, tem a opção de fornecer um único chave de ordenação por tabela, e você pode também influenciar o desempenho com um chave de distribuição para o sharding de dados, e a seleção adequada de compressão codificações para cada coluna para minimizar o armazenamento e e/S gerais.
Por exemplo, no seu caso, pode optar por usar UserId
como uma chave de ordenação:
create table if not exists "SomeTable"
(
"UserId" int,
"Name" text
)
sortkey("UserId");
Tu talvez queira ler alguns primers como Estes
Redshift permitir criar a chave primária
create table user (
id int ,
phone_number int,
primary key(id))
Mas como o Redshift não faz cumprir estas restrições, a chave primária aceita valores duplicados.
Anexo ao artigo sobre esta questão
Http://www.sqlhaven.com/amazon-redshift-what-you-need-to-think-before-defining-primary-key/
Você pode definir restrições mas será apenas informativo, como a Amazon diz: elas não são aplicadas pela Amazon Redshift. No entanto, chaves primárias e chaves estrangeiras são usadas como dicas de planejamento e elas devem ser declaradas se o seu processo ETL ou algum outro processo em sua aplicação reforça a sua integridade.
Alguns serviços como gasodutos com modo de inserção (substituição já existente) necessitarão de uma chave primária definida na sua tabela.
Para outros fins de desempenho, o A resposta do Stuart está correcta.