Eu tenho um conjunto de dados distorcido, onde a maioria das linhas se enquadra nos 10 maiores valores da minha melhor chave de distribuição candidata. Meus dados são compostos de duas tabelas grandes, que compartilham apenas duas chaves - minha melhor chave candidata, mais uma outra, mas essa é nula 80% das vezes, então eu a descontei como uma opção.
A sabedoria convencional diz que, se os dados estiverem distorcidos, devo usar uma distribuição round robin. Olhando para os planos de explicação produzidos por junções nas mesas, vejo que minha coluna candidata é a tecla de embaralhar para o movimento de embaralhar. Isso me faz questionar se devo alterar a distribuição de round robin para hash distribuído, economizando o tempo necessário para mover dados em cada execução.
Minha lógica está correta? Eu sinto que isso é contra a sabedoria convencional ao trabalhar com sql distribuído. Não espero nenhuma consulta em que essa junção não seja necessária, portanto, pode ser que outros vejam o benefício.
O round robin sempre envolve movimentação de dados devido à sua natureza, mas não precisa ser catastrófico para seu desempenho. O motivo pelo qual você o usa para dados distorcidos é porque, quando você distribui por hash, um hash exclusivo é gerado para cada valor e as linhas são distribuídas nas 60 distribuições de acordo. No seu exemplo, a maioria dos seus dados acabaria em uma (ou apenas algumas) distribuições e, portanto, você não está aproveitando a computação disponível para você. Digamos que você só tenha a oportunidade de aproveitar 20% dos recursos de computação disponíveis e o restante esteja ocioso.
Os requisitos para boas colunas de hash são: não devem ser atualizáveis, não podem ser NULL, devem ter grande número de valores distintos e distribuição uniforme.
Você tem a opção de criar uma chave concatenada das outras? Isso poderia ajudar a criar uma distribuição mais uniforme e seria útil desde que você a usasse em junções entre as duas tabelas.
Apenas alguns outros conselhos, projete suas principais consultas, use alguns dos outros recursos disponíveis no SQL DW, como o DWU correto, classes de recursos, índices não clusterizados, estatísticas automáticas. Observe também que a geração 2 do SQL DW já está disponível.
HTH