Utilização dos comandos SQL para criar e gerenciar exibições semânticas¶
Este tópico explica como usar os seguintes comandos SQL para criar e gerenciar exibições semânticas:
Este tópico também explica como chamar o procedimento armazenado e a função a seguir para criar uma exibição semântica de uma especificação YAML e obter a especificação para uma exibição semântica:
Privilégios necessários para criar ou substituir uma exibição semântica¶
Para criar ou substituir uma exibição semântica, você deve usar uma função com os seguintes privilégios:
CREATE SEMANTIC VIEW no esquema em que você está criando a exibição semântica.
USAGE no banco de dados e no esquema em que você está criando a exibição semântica.
SELECT nas tabelas e exibições usadas na exibição semântica.
Para obter informações sobre os privilégios necessários para consultar uma exibição semântica, confira Privilégios necessários para consultar uma exibição semântica.
Criando uma exibição semântica com o comando CREATE SEMANTIC VIEW¶
Para criar uma exibição semântica, use o comando CREATE SEMANTIC VIEW.
Nota
Para criar uma exibição semântica de uma especificação YAML, chame o procedimento armazenado SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML.
A exibição semântica deve ser válida. Consulte Como o Snowflake valida as exibições semânticas.
O exemplo a seguir usa os dados de amostra TPC-H disponíveis no Snowflake. Esse conjunto de dados contém tabelas que representam um cenário de negócios simplificado com clientes, pedidos e itens de linha.
O exemplo cria uma exibição semântica chamada tpch_rev_analysis, usando as tabelas do conjunto de dados TPC-H. A exibição semântica define:
Três tabelas lógicas (
orders,customerseline_items).Uma relação entre as tabelas
ordersecustomers.Uma relação entre as tabelas
line_itemseorders.Fatos que serão usados para calcular as métricas.
Dimensões para o nome do cliente, a data do pedido e o ano em que o pedido foi feito.
Métricas para o valor médio de um pedido e o número médio de itens de linha em um pedido.
As próximas seções explicam esse exemplo em mais detalhes:
Nota
Para obter um exemplo completo, consulte Exemplo de uso do SQL para criar uma exibição semântica.
Definição das tabelas lógicas¶
No comando CREATE SEMANTIC VIEW, use a cláusula TABLES para definir as tabelas lógicas na visualização. Nessa cláusula, você pode:
Especificar o nome da tabela física e um alias opcional.
Identificar as seguintes colunas na tabela lógica:
Colunas que servem como chaves primárias.
Colunas que contêm valores exclusivos (que não sejam colunas de chave primária).
Você pode usar essas colunas para definir relações nessa exibição semântica.
Adicionar sinônimos para a tabela (para melhorar a capacidade de descoberta).
Incluir um comentário descritivo.
No exemplo apresentado anteriormente, a cláusula TABLES define três tabelas lógicas:
Uma tabela
orderscontendo as informações do pedido da tabela TPC-Horders.Uma tabela
customerscontendo as informações do cliente da tabela TPC-Hcustomers.Uma tabela
line_itemscontendo os itens de linha em pedidos da tabela TPC-Hlineitem.
O exemplo usa a cláusula PRIMARY KEY para identificar as colunas a serem usadas como chaves primárias para cada tabela lógica. As chaves primárias e os valores únicos ajudam a determinar os tipos de relacionamentos entre as tabelas (por exemplo, muitos para um ou um para um).
O exemplo também fornece sinônimos e comentários que descrevem as tabelas lógicas e facilitam a descoberta dos dados.
Identificar as relações entre as tabelas lógicas¶
No comando CREATE SEMANTIC VIEW, use a cláusula RELATIONSHIPS para identificar os relacionamentos entre as tabelas na visualização. Para cada relação, você especifica:
Um nome opcional para a relação.
O nome da tabela lógica que contém a chave estrangeira.
As colunas dessa tabela que definem a chave estrangeira.
O nome da tabela lógica que contém a chave primária ou as colunas com valores exclusivos.
As colunas dessa tabela que definem a chave primária ou que contêm valores exclusivos.
Se você já tiver especificado PRIMARY KEY para a tabela lógica na cláusula TABLES, não precisará especificar a coluna de chave primária na relação.
Se houver uma única palavra-chave UNIQUE para a tabela lógica na cláusula TABLES, você não precisará especificar as colunas correspondentes na relação.
Também é possível especificar uma data, hora, carimbo de data/hora ou coluna numérica, se quiser unir as colunas em um intervalo.
No exemplo apresentado anteriormente, a cláusula RELATIONSHIPS especifica duas relações:
Uma relação entre as tabelas
ordersecustomers. Na tabelaorders,o_custkeyé a chave estrangeira que se refere à chave primária na tabelacustomers(c_custkey).Uma relação entre as tabelas
line_itemseorders. Na tabelaline_items,l_orderkeyé a chave estrangeira que se refere à chave primária na tabelaorders(o_orderkey).
Como usar uma data, hora, carimbo de data/hora ou intervalo numérico para unir tabelas lógicas¶
Por padrão, quando você especifica uma relação entre duas tabelas lógicas, as tabelas são unidas em uma condição de igualdade.
Se você precisar unir duas tabelas lógicas em um intervalo de data, hora, carimbo de data/hora ou numérico (onde os valores em uma coluna de uma tabela precisam estar no mesmo intervalo que os valores em uma coluna de outra tabela), você pode especificar a palavra-chave ASOF com o nome da coluna na cláusula REFERENCES:
Uma consulta da exibição semântica definida acima produz um ASOF JOIN que utiliza o perador de comparação >= na cláusula MATCH_CONDITION. Isto une as duas tabelas para que os valores em col_table_1 fiquem maiores ou iguais aos valores em col_table_2:
Nota
Nenhum outro operador de comparação na cláusula MATCH_CONDITION é compatível.
Você pode usar a palavra-chave ASOF para colunas dos mesmos tipos que você pode usar com ASOF JOIN.
Nota
Você pode especificar no máximo uma palavra-chave ASOF na definição de um determinado relacionamento. É possível especificar esta palavra-chave antes de qualquer coluna da lista.
Por exemplo, suponha que você tenha tabelas contendo dados de cliente, endereço do cliente e pedido:
Neste exemplo, a tabela customer_address tem uma coluna ca_start_date, que indica quando o cliente começou a residir no endereço especificado. A tabela orders tem uma coluna o_ord_date, que é a data do pedido.
Suponha que você queira poder consultar informações sobre os pedidos dos clientes e recuperar os códigos postais correspondentes ao local onde o cliente residia quando os pedidos foram feitos.
É possível definir uma exibição semântica que especifique uma junção ASOF entre as colunas ca_start_date e o_ord_date:
Suponha que você consulte essa exibição semântica para retornar a soma dos valores dos pedidos por mês para cada código postal:
A consulta efetivamente usa ASOF JOIN para unir as tabelas nas colunas de datas, em que a data do pedido é maior ou igual à data de início do endereço:
Unindo tabelas lógicas que contêm intervalos de valores¶
Você pode usar uma junção de intervalo quando quiser unir uma tabela a outra tabela que define um intervalo de valores possíveis na primeira tabela. Por exemplo, suponha que uma tabela represente pedidos de vendas e tenha uma coluna com o carimbo de data/hora em que o pedido foi feito. Suponha que outra tabela represente trimestres fiscais e contenha os intervalos de tempo distintos que representam esses trimestres. Você pode criar uma exibição semântica para unir as duas tabelas de modo que a linha de um pedido inclua o trimestre fiscal em que o pedido foi feito.
Na tabela que contém os intervalos, cada intervalo deve ser distinto. Dois intervalos não podem se sobrepor.
Nos dados da tabela, se você quiser especificar o menor valor possível ou o maior valor possível para o intervalo, use NULL.
Por exemplo, a tabela a seguir define um conjunto de intervalos de horas que não se sobrepõem:
A primeira linha cobre o intervalo que inclui tudo até (mas sem incluir) 1º de janeiro de 2024.
A última linha cobre o intervalo que inclui tudo de 20 de março de 2024 em diante.
Nota
Duas linhas não podem conter NULL na coluna inicial e nem conter NULL na coluna final.
Para casos como esses, você pode configurar uma exibição semântica compatível com consultas de junção de intervalo. Ao criar a exibição semântica, você deve fazer o seguinte:
Para a tabela lógica contendo as horas de início e de término de um período, defina uma restrição que especifique que dois intervalos não podem se sobrepor.
Na cláusula TABLE do comando CREATE SEMANTIC VIEW, especifique a cláusula CONSTRAINT na definição da tabela lógica. Para saber a sintaxe, consulte a documentação de CONSTRAINT no tópico CREATE SEMANTIC VIEW.
Defina um relacionamento entre a coluna que contém o carimbo de data/hora em uma tabela e as colunas de horas de início e de término na outra tabela.
Na cláusula RELATIONSHIPS do comando CREATE SEMANTIC VIEW, use a cláusula BETWEEN para especificar as colunas que contêm as horas de início e de término. Para saber a sintaxe, consulte a documentação de RELATIONSHIP no tópico CREATE SEMANTIC VIEW.
Por exemplo, suponha que a tabela my_time_periods defina períodos de tempo distintos:
Suponha que a tabela my_events capture eventos que ocorreram dentro desses períodos de tempo:
Você pode definir uma exibição semântica que una as tabelas. As linhas em my_events são unidas às linhas em my_time_periods, em que o valor na coluna event_timestamp em my_events está dentro do intervalo especificado pelas colunas start_time e end_time em my_time_periods.
A consulta a seguir demonstra como as linhas são unidas:
Como mostrado nos exemplos, a dimensão dim_time_period_name para cada linha nos resultados é o nome do período no qual a dimensão dim_event_timestamp se enquadra.
Definição de fatos, dimensões e métricas¶
No comando CREATE SEMANTIC VIEW, use as cláusulas FACTS, DIMENSIONS e METRICS para definir os fatos, as dimensões e as métricas na exibição semântica.
Você deve definir pelo menos uma dimensão ou métrica na exibição semântica.
Para cada fato, dimensão ou métrica, você deve especificar:
A tabela lógica à qual pertence.
Nota
Se quiser definir uma métrica derivada (uma métrica que não seja específica de uma tabela lógica), é necessário omitir o nome da tabela lógica. Consulte Definição de métricas derivadas.
Um nome para o fato, a dimensão ou a métrica.
A expressão SQL para calculá-lo.
Nota
Para dimensões, você pode especificar um Cortex Search Service para usar na dimensão. Para obter mais informações, consulte Definição de uma dimensão que usa um Cortex Search Service.
Sinônimos e comentários opcionais.
Nota
Se uma métrica não deve ser agregada em dimensões específicas, você deve especificar que essas dimensões devem ser não aditivas.
Para obter mais informações, consulte Identificando as dimensões que devem ser não aditivas para uma métrica.
O exemplo apresentado anteriormente define vários fatos, dimensões e métricas:
Nota
Para ver mais diretrizes sobre a definição de métricas que usam funções de janela, consulte Definição e consulta de métricas de função de janela.
Definição de uma dimensão que usa um Cortex Search Service¶
Para definir uma dimensão que usa um Cortex Search Service, defina a cláusula WITH CORTEX SEARCH SERVICE com o nome do Cortex Search Service. Se o serviço estiver em um banco de dados ou esquema diferente, qualifique o nome do serviço. Por exemplo:
Definição de métricas derivadas¶
Ao definir uma métrica, você especifica o nome da tabela lógica à qual a métrica pertence. Essa é a tabela lógica na qual a métrica é agregada.
Se quiser definir uma métrica baseada em métricas de diferentes tabelas lógicas, você poderá definir uma métrica derivada. Uma métrica derivada é uma métrica com escopo definido para a exibição semântica (em vez de para uma tabela lógica específica). Uma métrica derivada pode combinar métricas de vários tabelas lógicas.
Na definição de uma métrica derivada, omita o nome da tabela lógica.
Por exemplo, suponha que você queira definir uma métrica my_derived_metric_1 que é a soma das métricas table_1.metric_1 e table_2.metric_2. Quando você definir my_derived_metric_1, não qualifique o nome com nenhum nome de tabela lógica:
Você pode usar outras métricas derivadas na expressão. Por exemplo:
Observe as seguintes restrições ao definir uma métrica derivada:
Você não pode usar o mesmo nome para uma métrica derivada e uma métrica regular.
A expressão para uma métrica derivada pode usar:
Agregações de dimensões e fatos definidos em qualquer tabela lógica na exibição semântica.
Expressões escalares de métricas definidas em qualquer tabela lógica na exibição semântica.
Outras métricas derivadas.
No seguinte exemplo:
derived_metric_1usa uma expressão escalar com duas métricas.derived_metric_2usa uma agregação de uma dimensão.derived_metric_3adiciona uma agregação de uma dimensão a outra métrica derivada.
Você não precisará qualificar o nome de uma métrica na dimensão nem o fato na expressão se o nome não for ambíguo. Por exemplo:
Observe que
metric_1precisa ser qualificado portable_1porque há duas métricas chamadasmetric_1, masmy_unique_metric_namenão precisa ser qualificado porque o nome é exclusivo.Na expressão para uma métrica derivada, você não pode usar o seguinte:
Agregações de métricas.
Funções de janela.
Referências a colunas físicas.
Referências a fatos ou dimensões que não são agregados.
Você não pode usar uma métrica derivada na expressão para uma métrica, dimensão ou fato regular. Somente outra métrica derivada pode usar uma métrica derivada em sua expressão.
Especificando o relacionamento de uma métrica quando há vários caminhos de relacionamento¶
Em alguns casos, vários caminhos de relacionamento podem existir entre duas tabelas lógicas específicas em uma exibição semântica. Nesses casos, ao definir uma métrica, você deve especificar o caminho de relacionamento a ser usado.
Problema com vários caminhos de relacionamento¶
Suponha que você tenha duas tabelas com informações sobre voos e aeroportos:
Suponha que você defina uma exibição semântica que forneça informações sobre o número total de voos que saem e chegam a uma cidade específica:
A exibição semântica especifica dois relacionamentos diferentes entre a tabela flights e a tabela airports (flight_departure_airport e flight_arrival_airport). Como há vários caminhos de relacionamento entre as tabelas, há uma falha na consulta para a métrica m_flight_count e a seleção da dimensão airports.city_name (ou qualquer dimensão na tabela airports):
Como há vários caminhos entre as tabelas flights e airports, há uma falha na consulta. Se a consulta não selecionou uma dimensão da tabela airports, ela é bem-sucedida.
Especificando o relacionamento que será usado¶
Na definição da métrica no comando CREATE SEMANTIC VIEW, é possível especificar qual relacionamento usar na cláusula USING:
Nota
Cada relacionamento especificado deve começar da tabela lógica que contém a métrica. Por exemplo, suponha que você queira especificar:
O relacionamento
table_a_to_table_bdeve começar detable_a:Não é possível especificar uma sequência de relacionamentos (por exemplo,
table_a_to_table_betable_b_to_table_c). Cada relacionamento deve começar da tabela lógica que contém a métrica.Se você precisa identificar os relacionamentos da tabela lógica que contém a métrica com outras tabelas, é possível especificar os relacionamentos na cláusula USING. Por exemplo, suponha que você queira que a métrica seja computada por relacionamentos específicos de
table_acomtable_be detable_acomtable_c. Nesse caso, você especifica ambos os relacionamentos na cláusula USING:Não é possível especificar a cláusula USING em uma métrica derivada.
Por exemplo, a instrução a seguir define duas métricas adicionais que usam relacionamentos específicos:
m_flight_departure_count, que usa o relacionamentoflight_departure_airport.m_flight_arrival_count, que usa o relacionamentoflight_arrival_airport.
Ao consultar essa exibição, você pode especificar as duas novas métricas que utilizam os relacionamentos específicos:
Adicionar dimensões que dependem dos mesmos relacionamentos¶
A consulta no exemplo anterior usou a dimensão airports.city_name, que está na tabela lógica airports em que os relacionamentos são baseados.
Se você adicionar uma dimensão para outra tabela lógica à exibição, as consultas dessa dimensão se beneficiarão dos relacionamentos que você já especificou.
Por exemplo, suponha que você crie uma tabela chamada regions com informações adicionais sobre as regiões de aeroportos especificadas na coluna airport_region_code da tabela airports:
Você pode estender a exibição semântica que já definiu para retornar o nome da região:
Adicione uma nova tabela lógica para a tabela
regions.Adicione um relacionamento entre as tabelas
regionseairports.Adicione uma dimensão para o nome da região.
Você não precisa fazer mais alterações na cláusula USING para as métricas porque há um único relacionamento entre as tabelas regions e airports.
Se você consultar a exibição, especificando a dimensão region_name, e houver uma ambiguidade sobre qual relacionamento usar, a cláusula USING determinará os relacionamentos que serão usados:
Especificar relacionamentos com tabelas diferentes¶
Se a exibição semântica usa dimensões de várias tabelas, e você precisa especificar os relacionamentos que serão usados para as dimensões, pode especificar vários relacionamentos na cláusula USING.
Por exemplo, suponha que você crie uma tabela chamada weather com informações meteorológicas para os aeroportos na tabela airports:
Você pode estender a exibição semântica que já definiu para retornar as condições climáticas:
Adicione uma nova tabela lógica para a tabela
weather.Adicione dois relacionamentos entre as tabelas
weathereflights(um para partidas e outro para chegadas de voos).Adicione uma dimensão para as informações meteorológicas.
Especifique que as métricas também devem usar os dois novos relacionamentos entre as tabelas
weathereflights.
Quando você consulta a exibição e especifica a dimensão weather_condition, a cláusula USING determina os relacionamentos que são usados:
Definir métricas derivadas com base em métricas que usam relacionamentos específicos¶
Não é possível especificar a cláusula USING em uma métrica derivada, mas você pode definir uma métrica derivada que usa métricas que especificam a cláusula USING.
Por exemplo, a seguinte exibição semântica define duas métricas derivadas:
global_m_departure_arrival_ratioglobal_m_departure_arrival_sum
As definições dessas métricas derivadas usam as métricas flights.m_flight_departure_count e flights.m_flight_arrival_count, que especificam a cláusula USING:
Identificando as dimensões que devem ser não aditivas para uma métrica¶
Em alguns casos, uma métrica não deve ser agregada em dimensões específicas. Nesses casos, você pode marcar as dimensões como não aditivas.
Explicando o problema com a agregação de métricas em algumas dimensões¶
Suponha que você tenha uma tabela com os saldos das contas corrente e poupança de cada cliente em um dia específico.
Suponha que você queira definir uma exibição semântica que inclua:
As seguintes dimensões:
ID de cliente
Tipo de conta
Ano
Month
Dia
Uma métrica para a soma do saldo.
A seguinte instrução cria uma exibição semântica que inclui as dimensões e métricas listadas acima:
Se quiser recuperar o saldo total das contas corrente e poupança de cada cliente no fim de cada ano, você pode consultar a exibição semântica para a métrica m_account_balance e especificar as dimensões customer_id_dim e year_dim.
No entanto, a métrica m_account_balance será a soma dos saldos de cada dia para cada cliente, porque a métrica é agregada pelas dimensões de data.
No exemplo acima, para cust-001 em 2024, 910 é a soma dos saldos de cada dia (100 + 110 + 140 + 150 + 200 + 210).
Impedindo que uma métrica seja agregada em dimensões específicas¶
Para impedir que a métrica seja agregada pelas dimensões de data, especifique as dimensões de data na cláusula NON ADDITIVE BY ao criar a exibição semântica:
Nota
Se você especificar a cláusula NON ADDITIVE BY em uma métrica, não poderá se referir a essa métrica nas definições de métricas que não são derivadas. Somente métricas derivadas podem se referir a métricas que especificam dimensões não aditivas.
A especificação da cláusula NON ADDITIVE BY torna a métrica semiaditiva.
Ao consultar essa exibição semântica, a métrica m_account_balance não é mais agregada pelas dimensões de data. A consulta agrega os saldos das contas no fim do período em cada grupo de dimensões consultadas.
No exemplo acima, para cust-001 em 2024, 210 é a soma dos saldos das contas corrente e poupança referente ao último dia do ano que contém dados:
O último dia de 2024 que contém dados é
2024-03-30.Não há linha com essa data para a conta corrente, portanto a métrica resultante é o saldo da conta poupança (
210).
Como outro exemplo, se você quiser apenas o saldo total da conta de todos os clientes no fim do ano, poderá especificar a dimensão year_dim.
Como as dimensões de data são marcadas como não aditivas, a consulta soma os valores no final do período (por data) referentes aos saldos das contas corrente e poupança de cada cliente.
Durante o processamento da consulta, as linhas são classificadas pelas dimensões não aditivas, e os valores das últimas linhas (os últimos instantâneos de valores) são agregados para computar a métrica.
Nota
Como as linhas são classificadas pelas dimensões não aditivas, a ordem na qual você especifica as dimensões é importante. Isso é semelhante à ordem na qual você especifica as colunas na cláusula ORDER BY.
Especificando a ordem de classificação para dimensões não aditivas¶
Conforme demonstrado no exemplo, a métrica agrega os valores dos saldos das contas corrente e poupança de cada cliente no fim de um período. Se você quiser mudar a ordem de classificação, poderá especificar a palavra-chave ASC ou DESC ao lado do nome da dimensão. Por exemplo:
Neste exemplo, a métrica é avaliada para a data mais antiga especificada por year_dim, month_dim e day_dim.
Se a dimensão incluir valores NULL, você poderá usar as palavras-chave NULLS FIRST ou NULLS LAST para especificar se os valores NULL são classificados primeiro ou por último nos resultados:
Marcação de fato ou métrica como privado¶
Se você estiver definindo um fato ou métrica apenas para uso em cálculos na exibição semântica e não quiser que o fato ou métrica seja retornado em uma consulta, poderá especificar a palavra-chave PRIVATE para marcar o fato ou métrica como privado. Por exemplo:
Nota
Você não pode marcar uma dimensão como privada. As dimensões são sempre públicas.
Ao consultar uma exibição semântica com fatos ou métricas privados, você não pode especificar um fato ou uma métrica privada nas seguintes cláusulas:
A lista SELECT
FACTS na cláusula SEMANTIC_VIEW
METRICS na cláusula SEMANTIC_VIEW
METRICS
WHERE na instrução SELECT ou na cláusula SEMANTIC_VIEW
Alguns comandos e funções incluem fatos e métricas privados:
Os fatos e as métricas privados aparecem na saída do comando DESCRIBE SEMANTIC VIEW. As linhas de fatos e métricas privados têm
PRIVATEna colunaaccess_modifier.Os fatos e as métricas privados são listados no valor de retorno de uma chamada de função GET_DDL, como indicado em Obtenção da instrução SQL para uma exibição semântica.
Alguns comandos e funções incluem fatos e métricas privados somente em condições específicas:
Os fatos e métricas privados serão listados nas exibições INFORMATION_SCHEMA SEMANTIC_FACTS e SEMANTIC_METRICS somente se você usar uma função que tenha recebido o privilégio REFERENCES ou OWNERSHIP na exibição semântica.
Caso contrário, essas exibições listarão apenas os fatos e métricas públicos.
Outros comandos e funções não incluem fatos e métricas privados:
Os fatos privados não aparecem na saída do comando SHOW SEMANTIC FACTS.
As métricas privadas não aparecem na saída do comando SHOW SEMANTIC METRICS.
Fornecendo instruções personalizadas para o Cortex Analyst¶
Em uma exibição semântica, você pode fornecer instruções para o Cortex Analyst que explicam como:
Gerar a instrução SQL
Classificar perguntas e enviar prompt de informações adicionais
Para fornecer as instruções personalizadas, use as seguintes cláusulas:
Para obter instruções sobre como gerar a instrução SQL, use a cláusula AI_SQL_GENERATION no comando CREATE SEMANTIC VIEW.
Por exemplo, para solicitar que o Cortex Analyst gere a instrução SQL para que todas as colunas numéricas sejam arredondadas para duas casas decimais, especifique o seguinte:
Para obter instruções sobre como classificar perguntas, use a cláusula AI_QUESTION_CATEGORIZATION.
Por exemplo, para solicitar que o Cortex Analyst rejeite perguntas sobre usuários, especifique o seguinte:
Você também pode fornecer instruções para solicitar mais detalhes, se a pergunta não for clara. Por exemplo:
Criação de exibição semântica de uma especificação YAML¶
Para criar uma exibição semântica de uma especificação YAML, você pode chamar o procedimento armazenado SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML.
Primeiro, passe TRUE como terceiro argumento para verificar se você pode criar a exibição semântica da especificação YAML.
O seguinte exemplo verifica se você pode usar uma determinada especificação de modelo semântico em YAML para criar uma exibição semântica chamada tpch_analysis no banco de dados my_db e no esquema my_schema:
Se a especificação for válida, o procedimento armazenado retornará a seguinte mensagem:
Se a sintaxe YAML é inválida, o procedimento armazenado gera uma exceção. Por exemplo, se faltar dois pontos:
o procedimento armazenado gera uma exceção, indicando que a sintaxe YAML é inválida:
Se a especificação se referir a uma tabela física que não existe, o procedimento armazenado vai gerar uma exceção:
Da mesma forma, se a especificação se referir a uma coluna de chave primária que não existe, o procedimento armazenado vai gerar uma exceção:
Em seguida, você pode chamar o procedimento armazenado sem passar o terceiro argumento para criar a exibição semântica.
O seguinte exemplo cria uma exibição semântica chamada tpch_analysis no banco de dados my_db e no esquema my_schema:
Modificação do comentário para uma exibição semântica existente¶
Para modificar o comentário de uma exibição semântica existente, execute o comando ALTER SEMANTIC VIEW. Por exemplo:
Nota
Não é possível usar o comando ALTER SEMANTIC VIEW para alterar propriedades diferentes do que o comentário. Para alterar outras propriedades da exibição semântica, substitua a exibição semântica. Consulte Substituição de uma exibição semântica existente.
Você também pode usar o comando COMMENT para definir um comentário para uma exibição semântica:
Substituição de uma exibição semântica existente¶
Para substituir uma exibição semântica existente (por exemplo, para alterar a definição da exibição), especifique OR REPLACE ao executar CREATE SEMANTIC VIEW. Se você quiser preservar os privilégios concedidos na exibição semântica existente, especifique COPY GRANTS. Por exemplo:
Listagem de exibições semânticas¶
Para listar exibições semânticas no esquema atual ou em um esquema especificado, execute o comando SHOW SEMANTIC VIEWS. Por exemplo:
A saída do comando SHOW OBJECTS inclui exibições semânticas. Na coluna kind, o tipo de objeto é listado como VIEW. Por exemplo:
Você também pode consultar as exibições de exibições semânticas nos esquemas ACCOUNT_USAGE e INFORMATION_SCHEMA.
Listagem de dimensões, fatos e métricas¶
Para listar as dimensões, os fatos e as métricas disponíveis em uma exibição, um esquema, um banco de dados ou uma conta, você pode executar os seguintes comandos:
Por padrão, os comandos listam as dimensões, os fatos e as métricas disponíveis nas exibições semânticas definidas no esquema atual:
Os exemplos a seguir demonstram como listar as dimensões, os fatos e as métricas para exibições semânticas em diferentes escopos:
Listar as dimensões, os fatos e as métricas em exibições semânticas no banco de dados atual:
Listar as dimensões, os fatos e as métricas em exibições semânticas em um esquema ou banco de dados específico:
Listar as dimensões, os fatos e as métricas em exibições semânticas na conta:
Listar as dimensões, os fatos e as métricas em uma exibição semântica específica:
Se você estiver consultando uma exibição semântica, poderá usar o comando SHOW SEMANTIC DIMENSIONS FOR METRIC para determinar quais dimensões você pode retornar ao especificar uma determinada métrica. Para obter mais detalhes, consulte Escolha das dimensões que você pode retornar para uma determinada métrica.
Quando você executa o comando SHOW COLUMNS para uma exibição semântica, a saída inclui as dimensões, os fatos e as métricas na exibição semântica. A coluna kind indica se a linha representa uma dimensão, um fato ou uma métrica.
Por exemplo:
Exibição dos detalhes sobre uma exibição semântica¶
Para visualizar os detalhes de uma exibição semântica, execute o comando DESCRIBE SEMANTIC VIEW. Por exemplo:
Obtenção da instrução SQL para uma exibição semântica¶
Você pode chamar a função GET_DDL para recuperar a instrução DDL que criou uma exibição semântica.
Nota
Para chamar essa função para uma exibição semântica, você deve usar uma função que tenha recebido o privilégio REFERENCES ou OWNERSHIP na exibição semântica.
Ao chamar GET_DDL, passe 'SEMANTIC_VIEW' como o tipo de objeto. Por exemplo:
O valor de retorno inclui fatos e métricas privados (fatos e métricas marcados com a palavra-chave PRIVATE).
Como obter a especificação YAML para uma exibição semântica¶
Para obter a especificação YAML para uma exibição semântica, chame a função SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW.
O seguinte exemplo retorna a especificação YAML para a exibição semântica chamada tpch_analysis no banco de dados my_db e no esquema my_schema:
Exportando uma exibição semântica para um arquivo de fonte de dados do Tableau (TDS)¶
Para exportar uma exibição semântica para um arquivo de fonte de dados do Tableau (Tableau Data Source, TDS), chame a função SYSTEM$EXPORT_TDS_FROM_SEMANTIC_VIEW.
O exemplo a seguir retorna o conteúdo do arquivo TDS para a exibição semântica my_sv_for_export:
Copie o XML para um arquivo .tds e abra o arquivo no Tableau Desktop.
O Tableau Desktop exibe uma pasta para cada tabela lógica na lista de pastas à esquerda. Os nomes das pastas usam espaços em vez de sublinhados, e cada palavra começa com uma letra maiúscula. Por exemplo, o nome da pasta para a tabela lógica date_dim é Date Dim.
Cada pasta contém dimensões e medidas do Tableau que correspondem às dimensões, aos fatos e às métricas na exibição semântica.
As seções a seguir apresentam mais detalhes e as limitações do processo de conversão:
Sobre a conversão¶
A função converte dimensões, fatos e métricas na exibição semântica nos seguintes equivalentes no arquivo TDS do Tableau:
Elemento na exibição semântica |
Equivalente do Tableau (dimensão ou medida) |
Como os dados são agregados |
|---|---|---|
Dimensão |
|
|
Fato numérico |
Medida |
SUM |
Fato não numérico |
Dimensão |
|
Métrica numérica |
Medida |
O arquivo TDS usa um campo calculado no lugar da métrica. O campo calculado passa o valor da métrica para a função AGG do Snowflake. |
Métrica não numérica |
Dimensão |
|
Métrica derivada numérica |
Medida |
O arquivo TDS usa um campo calculado no lugar da métrica. O campo calculado passa o valor da métrica para a função AGG do Snowflake. |
Métrica derivada não numérica |
Dimensão |
|
Os seguintes tipos de dados do Snowflake são mapeados para os tipos de dados TDS correspondentes do Tableau:
Tipo de dados do Snowflake |
Tipo de dados equivalente do Tableau |
|---|---|
NUMBER/FIXED (se a escala for maior que 0) |
real |
NUMBER/FIXED (se a escala for 0 ou nula) |
inteiro |
FLOAT ou DECFLOAT |
real |
STRING ou BINARY |
string |
BOOLEAN |
booleano |
TIME |
hora |
DATE |
data |
DATETIME ou TIMESTAMP |
datetime |
GEOGRAPHY |
spatial |
Semiestruturado (VARIANT, OBJECT, ARRAY), estruturado (ARRAY, OBJECT, MAP), não estruturado (FILE), GEOMETRY, UUID, VECTOR |
string |
O arquivo TDS tem os seguintes recursos personalizados para conexão com o Snowflake:
Nome da personalização |
Valor |
Efeito da personalização |
|---|---|---|
|
|
Impede o Tableau de executar uma consulta como |
|
|
Impede o Tableau de «preparar» uma instrução (enviando-a ao Snowflake para análise sem executá-la) para aprender sobre tipos. |
|
|
Impede o Tableau de usar uma consulta |
|
|
Força o Tableau a habilitar e usar a função ODBC |
|
|
Impede o Tableau de usar sublinhados de escape ao pesquisar o nome do banco de dados. |
Limitações ao usar uma exibição semântica no Tableau Desktop¶
As seguintes limitações se aplicam às exibições semânticas no Tableau Desktop:
Não é possível criar uma extração de uma exibição semântica.
Se você alterar a conexão de Live para Extract, o Tableau Desktop falhará com o seguinte erro:
Não é possível usar o campo Measure Values em uma exibição semântica.
Se você selecionar o campo Measure Values em uma exibição semântica, o Tableau Desktop relatará o seguinte erro:
Não é possível selecionar o campo Count em uma exibição semântica.
Se você selecionar SemanticViewName(Count), o Tableau Desktop relatará o seguinte erro:
O Tableau Desktop não pode relatar o número de linhas na exibição semântica porque esse número pode variar, dependendo das dimensões, dos fatos e das métricas especificados na consulta.
Não é possível arrastar uma medida sozinha.
Se você arrastar uma medida, o Tableau Desktop relatará o seguinte erro:
Não é possível usar diretamente uma métrica não numérica.
SYSTEM$EXPORT_TDS_FROM_SEMANTIC_VIEW converte métricas não numéricas em dimensões no Tableau. Se você tentar usar uma dessas dimensões, o Tableau Desktop relatará o seguinte erro:
Para contornar isso, converta a dimensão em uma medida:
Clique com o botão direito do mouse na dimensão e selecione Convert to Measure.
Isso converte a dimensão em uma medida, usando a agregação padrão Count (Distinct).
Para usar uma agregação diferente, clique com o botão direito do mouse na medida convertida, selecione Default Properties » Aggregations e selecione a agregação que você deseja usar.
Renomeação de uma exibição semântica¶
Para renomear uma exibição semântica, execute ALTER SEMANTIC VIEW … RENAME TO …. Por exemplo:
Remoção de uma exibição semântica¶
Para remover uma exibição semântica, execute o comando DROP SEMANTIC VIEW. Por exemplo:
Concessão de privilégios em exibições semânticas¶
Privilégios de exibição semântica lista os privilégios que você pode conceder em uma exibição semântica.
Os seguintes privilégios em uma exibição semântica são necessários para trabalhar com a exibição:
Qualquer privilégio (por exemplo, MONITOR, REFERENCES ou SELECT) em uma exibição é necessário para executar o comando DESCRIBE SEMANTIC VIEW nessa exibição.
Qualquer privilégio em uma exibição é necessário para exibi-la na saída do comando SHOW SEMANTIC VIEWS.
SELECT é necessário para consultar a exibição semântica.
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 usar uma exibição semântica que não é de sua propriedade no Cortex Analyst, você deve usar uma função que tenha os privilégios REFERENCES e SELECT nessa exibição.
Para conceder os privilégios REFERENCES eSELECT em uma exibição semântica, use comando GRANT <privilégios> … TO ROLE. Por exemplo, para conceder os privilégios REFERENCES eSELECT na exibição semântica chamada my_semantic_view à função my_analyst_role, você pode executar a seguinte instrução:
Se tiver um esquema contendo exibições semânticas que deseja compartilhar com usuários Cortex Analyst, você pode usar concessões futuras para conceder os privilégios para qualquer exibição semântica criada nesse esquema. Por exemplo: