Implementar mecanismo de consulta que escolhe as views necessárias e gera uma consulta SQL sobre elas.
No BlenDB, cada view é representada por um conjunto de metadados que guardam informações de quais dimensões e métricas cada view contém. Com base nisso, criar um algoritmo para o seguinte:
O número de dimensões de uma view ou query x é denotado por D(x). A distância entre uma query q e uma view v é denotado por d(q, v) e é definida da seguinte maneira:
d(q, v) = D(q) - D(v)
Criar um algoritmo que dada uma query q, escolhe o menor conjunto de views V que cubra q e minimize d(q, v) para toda view v pertencente a V.
Gerar também uma consulta SQL que retorne os dados das views selecionadas de acordo com a query do usuário. Veja o exemplo:
SELECT a.dim_state, SUM(a.met_point_count), AVG(b.met_average_download_rate)
FROM view_a3ecb59d v1, view_8c23bb4a v2
WHERE v1.dim_state = v2.dim_state, ...
GROUP BY a.dim_state;
A projeção (SELECT), basicamente reflete os parâmetros da query. Só tem que cuidar de qual função de agregação usar (SUM, AVG, etc.) para as métricas, essa informação vem dos metadados das views. Na seleção (WHERE), tem que juntar as dimensões que são iguais nas views (se duas views a e b tem a dimensão dim_state, garantir que a.dim_state = b.dim_state). E no agrupamento (GROUP BY), colocar todas as dimensões da query.