Consulta de exibições semânticas¶
Para consultar uma exibição semântica, é possível usar uma instrução SELECT padrão. Nessa instrução, você pode usar uma das seguintes abordagens:
Especificar a cláusula SEMANTIC_VIEW na cláusula FROM. Por exemplo:
Para obter mais informações, consulte Especificando a cláusula SEMANTIC_VIEW na cláusula FROM.
Especificar o nome da exibição semântica na cláusula FROM. Por exemplo:
Para obter mais informações, consulte Especificando o nome da exibição semântica na cláusula FROM.
Privilégios necessários para consultar uma exibição semântica¶
Se você estiver usando uma função que não seja proprietária da exibição semântica, deverá receber o privilégio SELECT nessa exibição semântica para consultá-la.
Nota
Para consultar uma exibição semântica, você não precisa do privilégio SELECT nas tabelas usadas na exibição semântica. Você só precisa do privilégio SELECT na própria exibição semântica.
Esse comportamento é consistente com os privilégios necessários para consultar exibições padrão.
Para obter informações sobre a concessão de privilégios em exibições semânticas, consulte Concessão de privilégios em exibições semânticas.
Especificando a cláusula SEMANTIC_VIEW na cláusula FROM¶
Para consultar uma exibição semântica, você pode especificar a cláusula SEMANTIC_VIEW na cláusula FROM.
O exemplo a seguir seleciona a dimensão customer_market_segment e a métrica order_average_value da exibição semântica tpch_analysis, que você já definiu:
Observe que você pode definir um alias para uma dimensão ou métrica especificando o alias após o nome da dimensão ou métrica. Você também pode especificar a palavra-chave opcional AS antes do alias. O exemplo a seguir executa a mesma consulta, mas usa os aliases segment e average para a dimensão e a métrica retornadas nos resultados.
O exemplo a seguir seleciona a dimensão customer_name e o fato c_customer_order_count da exibição semântica tpch_analysis:
Diretrizes para especificar a cláusula SEMANTIC_VIEW¶
Ao especificar a cláusula SEMANTIC_VIEW, siga estas diretrizes:
Na cláusula SEMANTIC_VIEW, você deve especificar pelo menos uma das seguintes cláusulas:
METRICS
DIMENSIONS
FACTS
Não é possível omitir todas essas cláusulas da cláusula SEMANTIC_VIEW.
Ao especificar uma combinação dessas cláusulas, observe o seguinte:
Não é possível especificar FACTS e METRICS na mesma cláusula SEMANTIC_VIEW.
Embora você possa especificar FACTS e DIMENSIONS em uma consulta, você deve fazê-lo somente se as dimensões puderem determinar os fatos de forma única.
A consulta agrupa os resultados por dimensões. Se os fatos não dependem das dimensões, os resultados podem ser não determinísticos.
Se você especificar FACTS e DIMENSIONS, todos os fatos e as dimensões usados na consulta (incluindo aqueles especificados na cláusula WHERE) deverão ser definidos na mesma tabela lógica.
Se você especificar uma dimensão e uma métrica, a tabela lógica para a dimensão deverá estar relacionada à tabela lógica para a métrica.
Além disso, a tabela lógica para a dimensão deve ter um nível igual ou inferior de granularidade do que a tabela lógica para a métrica.
Para determinar quais dimensões atendem a esses critérios, você pode executar o comando SHOW SEMANTIC DIMENSIONS FOR METRIC.
Para obter mais detalhes, consulte Escolha das dimensões que você pode retornar para uma determinada métrica.
Na cláusula DIMENSIONS, você pode especificar uma expressão que se refere a um fato. Da mesma forma, na cláusula FACTS, você pode especificar uma expressão que se refere a uma dimensão. Por exemplo:
Uma das principais diferenças entre o uso de DIMENSIONS e FACTS é que a consulta agrupa os resultados pelas dimensões e expressões especificadas na cláusula DIMENSIONS.
Na cláusula METRICS, você pode especificar uma expressão que inclui:
Uma expressão escalar que se refere a métricas;
Uma agregação de dimensões ou fatos.
Especifique as cláusulas METRICS, DIMENSIONS e FACTS na ordem em que você deseja que apareçam nos resultados.
Se você quiser que as dimensões apareçam primeiro nos resultados, especifique DIMENSIONS antes de METRICS. Caso contrário, especifique primeiro METRICS.
Por exemplo, suponha que você especifique primeiro a cláusula METRICS:
Na saída, a primeira coluna é a coluna de métrica (
customer_order_count) e a segunda coluna é a coluna de dimensão (customer_name):Se, em vez disso, você especificar primeiro a cláusula DIMENSIONS:
Na saída, a primeira coluna é a coluna de dimensão (
customer_name) e a segunda coluna é a coluna de métrica (customer_order_count):Você pode usar a relação definida por uma cláusula SEMANTIC_VIEW em outras construções SQL, incluindo JOIN, PIVOT, UNPIVOT, GROUP BY e expressões de tabela comuns (CTEs).
Os cabeçalhos das colunas de saída usam os nomes não qualificados das métricas e dimensões.
Se você tiver várias métricas e dimensões com os mesmos nomes, use um alias de tabela para atribuir nomes diferentes aos cabeçalhos das colunas. Consulte Tratamento de nomes de colunas duplicados na saída.
Para retornar todas as métricas ou dimensões em uma determinada tabela lógica, use um asterisco como curinga, qualificado pelo nome da tabela lógica. Por exemplo, para retornar todas as métricas e dimensões definidas na tabela lógica customer:
Exemplos de especificação da cláusula SEMANTIC_VIEW¶
Os exemplos a seguir usam a visualização tpch_analysis definida em Exemplo de uso do SQL para criar uma exibição semântica:
Recuperação de métrica¶
A instrução a seguir recupera a contagem total de clientes consultando uma métrica:
Agrupamento de dados métricos por uma dimensão¶
A instrução a seguir agrupa dados métricos (order_average_value) por uma dimensão (customer_market_segment):
Usando a subcláusula SEMANTIC_VIEW com outras construções¶
O exemplo a seguir demonstra como você pode usar dimensões e métricas na subcláusula SEMANTIC_VIEW com outras construções SQL para filtrar, classificar e limitar os resultados:
Especificar expressões escalares que usam dimensões¶
O exemplo a seguir usa uma expressão escalar que se refere a uma dimensão na cláusula DIMENSIONS:
Especificar a cláusula WHERE¶
O exemplo a seguir especifica uma cláusula WHERE que se refere a uma dimensão na cláusula DIMENSIONS:
Especificação de fatos na cláusula WHERE¶
O seguinte exemplo usa o fato region.r_name em uma condição na cláusula WHERE:
Especificando o nome da exibição semântica na cláusula FROM¶
Você pode especificar o nome da exibição semântica na cláusula FROM de uma instrução SELECT, como faria para consultar uma exibição SQL padrão:
Internamente, essa instrução é reescrita como uma instrução SELECT que usa a cláusula SEMANTIC_VIEW:
As expressões que você especifica na cláusula GROUP BY são reescritas na cláusula DIMENSIONS, na cláusula SEMANTIC_VIEW.
Na instrução SELECT, se você usar uma expressão que não esteja na cláusula GROUP BY (por exemplo, uma expressão de dimensão na lista SELECT), a reescrita usará essa expressão na cláusula FACTS, na cláusula SEMANTIC_VIEW.
When you refer to a metric that is defined in a semantic view, you must pass the metric to the AGG function.
Você pode selecionar métricas especiais passando uma dimensão ou um fato para qualquer função de agregação.
Quaisquer outros valores calculados que não se encaixem nas duas primeiras categorias são considerados referências de fatos.
As próximas seções explicam esses requisitos em mais detalhes:
Requisitos para dimensões e métricas em uma instrução SELECT¶
Na instrução SELECT, você só pode se referir a dimensões e métricas que tenham nomes distintos e que não sejam distinguidas pelo próprio nome da tabela lógica. Por exemplo, suponha que uma exibição semântica tenha duas dimensões com o nome não qualificado name:
Na instrução SELECT, quando você especifica o nome qualificado de uma dimensão ou métrica, o qualificador é interpretado como o nome da exibição semântica, não o nome de uma tabela lógica:
Selecionando métricas¶
If you want to select a metric that is defined in a semantic view, you must pass the metric to the AGG function, which is a special aggregate function for metrics in semantic views.
Por exemplo:
Nota
The AGG function has no effect on the metric because the function evaluates one value of the metric.
Na lista SELECT, é possível especificar uma expressão que usa uma métrica. Por exemplo:
Você também pode definir e selecionar métricas especiais passando uma dimensão ou um fato para qualquer função de agregação. Por exemplo:
Selecionando dimensões¶
Se a lista SELECT inclui dimensões, você deve especificá-las na cláusula GROUP BY. Por exemplo:
Na lista SELECT e na cláusula GROUP BY, você pode especificar uma dimensão ou uma expressão escalar que usa uma dimensão ou um fato. Por exemplo:
Especificar a cláusula WHERE¶
Na cláusula WHERE, você só pode usar expressões condicionais que se refiram a dimensões ou fatos. Por exemplo:
As dimensões devem ser acessíveis por cada métrica usada na consulta.
Especificando a cláusula HAVING¶
Na cláusula HAVING, você só pode especificar métricas e deve passá-las para uma das funções de agregação listadas em Selecionando métricas. Por exemplo:
Limitações com a especificação do nome da exibição semântica na cláusula FROM¶
Não é possível especificar o seguinte na instrução SELECT:
Extensões da cláusula FROM, incluindo:
PIVOT
UNPIVOT
MATCH_RECOGNIZE
LATERAL
Junções
Chamadas de função de janela
QUALIFY
Subconsultas
Escolha das dimensões que você pode retornar para uma determinada métrica¶
Ao especificar uma dimensão e uma métrica para retornar, a tabela base da dimensão deve estar relacionada à tabela base da métrica. Além disso, a tabela base da dimensão deve ter um nível de granularidade igual ou inferior à tabela base da métrica.
Por exemplo, suponha que você consulte a exibição semântica tpch_analysis que você criou em Exemplo de uso do SQL para criar uma exibição semântica, e você deseja retornar a dimensão orders.order_date e a métrica customer.customer_order_count:
Há falha na consulta porque a tabela orders para a dimensão order_date tem um nível de granularidade mais alto do que a tabela customer para a métrica customer_order_count:
Para listar as dimensões que você pode retornar com uma métrica específica, execute o comando SHOW SEMANTIC DIMENSIONS FOR METRIC. Por exemplo:
Tratamento de nomes de colunas duplicados na saída¶
As colunas de saída usam os nomes não qualificados das métricas e dimensões. Se você tiver várias métricas e dimensões com os mesmos nomes, várias colunas usarão o mesmo nome.
Para contornar isso, use um alias de tabela para atribuir nomes diferentes às colunas.
Por exemplo, suponha que você defina a seguinte exibição semântica, que define as dimensões nation.name e region.name:
Se você consultar essa visualização e selecionar essas duas dimensões, a saída incluirá duas colunas denominadas name sem nenhum qualificador:
Para não ambiguidade das colunas, use um alias de tabela para atribuir nomes de coluna diferentes (por exemplo, nation_name e region_name):
Definição e consulta de métricas de função de janela¶
É possível definir métricas que chamam funções de janela e passam valores agregados. Elas são chamadas de métricas de função de janela.
Os seguintes exemplos ilustram a diferença entre a métrica de função de janela e a métrica que passa uma expressão no nível da linha para uma função de janela:
Veja abaixo uma métrica de função de janela:
Neste exemplo, a função de janela SUM usa outra métrica (
table_1.metric_3) como argumento.A métrica abaixo também é de função de janela:
Neste exemplo, a função de janela SUM usa uma expressão de métrica válida (
SUM(table_1.column_1)) como argumento.A métrica abaixo não é de função de janela:
Neste exemplo, a função de janela SUM usa uma coluna (
table_1.column_1) como argumento, e o resultado dessa chamada de função de janela é passado para uma chamada de função de agregação SUM separada.
As seguintes seções explicam como definir e consultar as métricas de função de janela:
Definição de métricas de função de janela¶
Ao especificar uma chamada de função de janela, use esta sintaxe, que está descrita em Parâmetros para métricas de função de janela.
O exemplo a seguir cria uma exibição semântica que inclui as definições de várias métricas de função de janela. O exemplo usa tabelas do banco de dados de amostra TPC-DS. Para obter informações sobre como acessar esse banco de dados, consulte Adicionar o conjunto de dados TPC-DS à sua conta.
Você também pode usar outras métricas da mesma tabela lógica na definição da métrica. Por exemplo:
Nota
Não é possível usar métricas de função de janela em cálculos no nível da linha (fatos e dimensões) ou nas definições de outras métricas.
Consulta de métricas de função de janela¶
Quando você consulta uma exibição semântica e a consulta retorna uma métrica de função de janela, você também deve retornar as dimensões especificadas em PARTITION BY dimension, PARTITION BY EXCLUDING dimension e ORDER BY dimension na instrução CREATE SEMANTIC VIEW para a exibição semântica.
Por exemplo, suponha que você especifique as dimensões date.date e date.year nas cláusulas PARTITION BY EXCLUDING e ORDER BY na definição da métrica store_sales.avg_7_days_sales_quantity:
Se você retornar a métrica store_sales.avg_7_days_sales_quantity em uma consulta, também deverá retornar as dimensões date.date e date.year:
Se você omitir as dimensões date.date e date.year, ocorrerá um erro.
Para determinar quais dimensões você deve especificar na consulta, execute o comando SHOW SEMANTIC DIMENSIONS FOR METRIC. Por exemplo, para determinar as dimensões que você deve especificar ao recuperar a métrica store_sales.avg_7_days_sales_quantity, execute este comando:
Na saída do comando, a coluna required contém true para as dimensões que você deve especificar na consulta.
Os outros exemplos a seguir consultam as métricas de função de janela definidas em Definição de métricas de função de janela. Observe que a cláusula DIMENSIONS inclui as dimensões especificadas nas cláusulas PARTITION BY EXCLUDING e ORDER BY das definições das métricas.
O seguinte exemplo retorna a quantidade de vendas dos 30 dias anteriores:
O seguinte exemplo retorna a média por período consecutivo de 7 dias da quantidade total de vendas dos 30 dias anteriores: