Eu tenho uma junção muito cara no data warehouse que não está alinhada à distribuição. Infelizmente, a chave de junção é anulável e apenas metade dos dados tem um valor, o que significa que não seria um bom candidato para a chave de distribuição.
Seria possível criar uma visão particionada onde a metade nula da tabela fosse distribuída em rodízio e a outra metade fosse distribuída nos valores de chave disponíveis?
Atualização de julho de 2019 - em julho de 2019, o Azure SQL Data Warehouse agora dá suporte a exibições materializadas .
O mecanismo é implementado de maneira um pouco diferente no SQL Data Warehouse, portanto, não oferece suporte ao recurso Partitioned Views como o SQL Server. Por exemplo
CHECK
, as restrições são necessárias para permitir que funcionem corretamente, masCHECK
as restrições não têm suporte no Azure SQL Data Warehouse.Você poderia falsificar algo assim, ou seja, basicamente uma visão sobre duas tabelas, cada uma distribuída como você descreveu, mas elas teriam que ser cópias das tabelas originais para alterar a distribuição. Isso adicionaria complexidade extra ao seu processo. Você poderia criar as cópias usando o CTAS que é poderoso no SQL DW, mas é impossível dizer se isso melhoraria seus tempos de processamento.
Certifique-se de ter criado todas as estatísticas relevantes. Por experiência, acho que
int\bigint
as colunas funcionam mais rapidamente com o columnstore em vez dovarchar
.Talvez você possa dar um exemplo de suas tabelas, DDL, distribuições, consulta e dados de amostra e eu posso dar uma olhada nisso.