CREATE SEMANTIC VIEW¶
Cria uma nova visualização semântica no esquema atual/especificado.
A exibição semântica deve estar em conformidade com essas regras de validação.
- Consulte também:
ALTER SEMANTIC VIEW , DESCRIBE SEMANTIC VIEW , DROP SEMANTIC VIEW , SHOW SEMANTIC VIEWS , SHOW SEMANTIC DIMENSIONS , SHOW SEMANTIC METRICS , SHOW SEMANTIC DIMENSIONS FOR METRIC , SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML
Sintaxe¶
CREATE [ OR REPLACE ] SEMANTIC VIEW [ IF NOT EXISTS ] <name>
TABLES ( logicalTable [ , ... ] )
[ RELATIONSHIPS ( relationshipDef [ , ... ] ) ]
[ FACTS ( semanticExpression [ , ... ] ) ]
[ DIMENSIONS ( semanticExpression [ , ... ] ) ]
[ METRICS ( semanticExpression [ , ... ] ) ]
[ COMMENT = '<comment_about_semantic_view>' ]
[ COPY GRANTS ]
onde:
Os parâmetros para tabelas lógicas são:
logicalTable ::= [ <table_alias> AS ] <table_name> [ PRIMARY KEY ( <primary_key_column_name> [ , ... ] ) ] [ UNIQUE ( <unique_column_name> [ , ... ] ) [ ... ] ] [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_table>' ]
Os parâmetros para relacionamentos são:
relationshipDef ::= [ <relationship_identifier> AS ] <table_alias> ( <column_name> [ , ... ] ) REFERENCES <ref_table_alias> [ ( <ref_column_name> [ , ... ] ) ]
Os parâmetros para expressões nas definições de dimensões são:
semanticExpression ::= [ PUBLIC ] <table_alias>.<dimension> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_dimension>' ]
Os parâmetros para expressões nas definições de fatos e métricas são:
semanticExpression ::= [ { PRIVATE | PUBLIC } ] <table_alias>.<fact_or_metric> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_fact_or_metric>' ]
É possível definir uma métrica que usa uma função de janela (uma métrica de função de janela) usando a seguinte sintaxe:
windowFunctionMetricDefinition ::= <window_function>( <metric> ) OVER ( [ PARTITION BY { <exprs_using_dimensions_or_metrics> | EXCLUDING <dimensions> } ] [ ORDER BY <exprs_using_dimensions_or_metrics> [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ] [ <windowFrameClause> ] )
Para obter informações sobre esta sintaxe, consulte Parâmetros para métricas de função de janela.
Nota
A ordem das cláusulas é importante. Por exemplo, você deve especificar a cláusula FACTS antes da cláusula DIMENSIONS.
Você pode fazer referência a expressões semânticas que são definidas em cláusulas posteriores. Por exemplo, mesmo que fact_2
seja definido após fact_1
, você ainda pode usar fact_2
na definição de fact_1
.
Parâmetros obrigatórios¶
name
Especifica o nome da exibição semântica; o nome deve ser exclusivo para o esquema no qual a tabela é criada.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo,
"My object"
). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais informações, consulte Requisitos para identificadores.
Parâmetros opcionais¶
COMMENT = 'comment_about_semantic_view'
Especifica um comentário sobre a exibição semântica.
COPY GRANTS
Quando você especifica OR REPLACE para substituir uma exibição semântica existente por uma nova exibição semântica, pode definir esse parâmetro para copiar quaisquer privilégios concedidos na exibição semântica existente para a nova exibição semântica.
O comando copia todas as concessões de privilégio, exceto OWNERSHIP, da exibição semântica existente para a nova exibição semântica. A função que executa a instrução CREATE SEMANTIC VIEW é proprietária da exibição.
A nova exibição semântica não herda nenhuma concessão futura definida para o tipo de objeto no esquema.
A operação de cópia de concessões ocorre atomicamente com a instrução CREATE SEMANTIC VIEW (em outras palavras, dentro da mesma transação).
Se você omitir COPY GRANTS, a nova exibição semântica não herdará nenhum privilégio de acesso explícito concedido na exibição semântica existente, mas herdará quaisquer concessões futuras definidas para o tipo de objeto no esquema.
Parâmetros das tabelas lógicas¶
Estes parâmetros fazem parte da sintaxe para tabelas lógicas:
table_alias AS
Especifica um alias opcional para a tabela lógica.
Se você especificar um alias, deverá usá-lo ao se referir à tabela lógica em relações, fatos, dimensões e métricas.
Se você não especificar um alias, usará o nome da tabela lógica não qualificado para se referir à tabela.
table_name
Especifica o nome da tabela lógica.
PRIMARY KEY ( primary_key_column_name [ , ... ] )
Especifica os nomes de uma ou mais colunas na tabela lógica que servem como chave primária da tabela.
UNIQUE ( unique_column_name [ , ... ] )
Especifica o nome de uma coluna que contém um valor exclusivo ou os nomes de colunas que contêm combinações exclusivas de valores.
Por exemplo, se a coluna
service_id
contiver valores exclusivos, especifique:TABLES( ... product_table UNIQUE (service_id)
Se a combinação de valores nas colunas
product_area_id
eproduct_id
for exclusiva, especifique:TABLES( ... product_table UNIQUE (product_area_id, product_id) ...
Você pode identificar várias colunas e várias combinações de colunas como exclusivas em uma determinada tabela lógica:
TABLES( ... product_table UNIQUE (product_area_id, product_id) UNIQUE (service_id) ...
Nota
Se você já identificou uma coluna como uma coluna de chave primária (usando PRIMARY KEY), não adicione a cláusula UNIQUE para essa coluna.
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
Especifica um ou mais sinônimos para a tabela lógica. Ao contrário dos aliases, os sinônimos são usados apenas para fins informativos. Você não usa sinônimos para se referir à tabela lógica em relações, dimensões, métricas e fatos.
COMMENT = 'comment_about_table'
Especifica um comentário sobre a tabela lógica.
Parâmetros para relacionamentos¶
Esses parâmetros fazem parte da sintaxe para relacionamentos:
relationship_identifier AS
Especifica um identificador opcional para a relação.
table_alias ( column_name [ , ... ] )
Especifica uma das tabelas lógicas e uma ou mais de suas colunas que se referem a colunas em outra tabela lógica.
ref_table_alias [ ( ref_column_name [ , ... ] ) ]
Especifica a outra tabela lógica e uma ou mais de suas colunas que são referenciadas pela primeira tabela lógica.
As colunas devem ser identificadas como PRIMARY KEY ou UNIQUE na definição da tabela lógica.
Parâmetros para fatos, dimensões e métricas¶
Em uma exibição semântica, você deve definir pelo menos uma dimensão ou métrica, o que significa que deve especificar pelo menos uma cláusula DIMENSIONS ou METRICS.
Estes parâmetros fazem parte da sintaxe para definir um fato, dimensão ou métrica:
{ PRIVATE | PUBLIC }
Especifica se um fato ou métrica é privado ou público. Fatos e métricas marcados como privados não podem ser consultados ou usados em uma condição de consulta.
Nota
Você não pode marcar uma dimensão como privada. As dimensões são sempre públicas. Para uma dimensão, o efeito é o mesmo, quer você especifique ou omita PUBLIC.
Se você omitir PRIVATE e PUBLIC, a dimensão, o fato ou a métrica é pública por padrão.
table_alias.semantic_expression_name AS sql_expr
Especifica um nome para uma dimensão, fato ou métrica e a expressão SQL para calcular essa dimensão, fato ou métrica.
Consulte as regras para definir uma exibição semântica válida e, Como o Snowflake valida as exibições semânticas.
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
Especifica um ou mais sinônimos opcionais para a dimensão, o fato ou a métrica. Observe que os sinônimos são usados apenas para fins informativos. Não é possível usar um sinônimo para se referir a uma dimensão, fato ou métrica em outra dimensão, fato ou métrica.
COMMENT = 'comment_about_dim_fact_or_metric'
Especifica um comentário opcional sobre a dimensão, o fato ou a métrica.
Parâmetros para métricas de função de janela¶
Esses parâmetros fazem parte da sintaxe para definição de métricas de função de janela:
metric
Especifica uma expressão métrica para essa função de janela. É possível especificar uma métrica ou qualquer expressão métrica válida que possa ser usada para definir uma métrica nessa entidade.
PARTITION BY ...
Agrupa linhas em partições. Você pode particionar por um conjunto especificado de expressões ou por todas as dimensões (exceto dimensões selecionadas) especificadas na consulta:
PARTITION BY exprs_using_dimensions_or_metrics
Agrupa linhas em partições por expressões SQL. Na expressão SQL:
Qualquer dimensão na expressão deve ser acessível da mesma entidade que define a métrica de função de janela.
Qualquer métrica deve pertencer à mesma tabela onde esta métrica está sendo definida.
Você não pode especificar agregados, funções de janela ou subconsultas.
PARTITION BY EXCLUDING dimensions
Agrupa linhas em partições por todas as dimensões especificadas na cláusula SEMANTIC_VIEW da consulta, exceto para as dimensões especificadas por
dimensions
.dimensions
deve se referir apenas às dimensões acessíveis pela entidade que define a métrica de função de janela.Por exemplo, suponha que você exclua a dimensão
table_1.dimension_1
do particionamento:CREATE SEMANTIC VIEW sv ... METRICS ( table_1.metric_2 AS SUM(table_1.metric_1) OVER (PARTITION BY EXCLUDING table_l.dimension_1 ORDER BY table_1.dimension_2) ) ...
Suponha que você execute uma consulta que especifique a dimensão
table_1.dimension_1
:SELECT * FROM SEMANTIC VIEW( sv METRICS ( table_1.metric_2 ) DIMENSIONS ( table_1.dimension_1, table_1.dimension_2, table_1.dimension_3 );
Na consulta, a métrica
table_1.metric_2
é avaliada como:SUM(table_1.metric_1) OVER ( PARTITION BY table_1.dimension_2, table_1.dimension_3 ORDER BY table_1.dimension_2 )
Observe como
table_1.dimension_1
está excluído da cláusula PARTITION BY.Nota
Não é possível usar EXCLUDING fora das definições de métricas em exibições semânticas. EXCLUDING não é compatível com chamadas de função de janela em nenhum outro contexto.
ORDER BY exprs_using_dimensions_or_metrics [ ASC | DESC ] [ NULLS FIRST | LAST ] [, ... ]
Ordena linhas dentro de cada partição. Na expressão SQL:
Qualquer dimensão na expressão deve ser acessível da mesma entidade que define a métrica de função de janela.
Qualquer métrica deve pertencer à mesma tabela onde esta métrica está sendo definida.
Você não pode especificar agregados, funções de janela ou subconsultas.
windowFrameClause
Consulte Sintaxe e uso da função de janela.
Para obter informações adicionais sobre os parâmetros para funções de janela e exemplos, consulte Definição e consulta de métricas de função de janela.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
---|---|---|
CREATE SEMANTIC VIEW |
Esquema |
Necessário para criar uma nova exibição semântica. |
SELECT |
Tabela, exibição |
Necessário em todas as tabelas e/ou exibições usadas na definição da exibição semântica. |
O privilégio USAGE no banco de dados e no esquema pai é necessário para executar operações em qualquer objeto de um esquema.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
A exibição semântica deve ser válida e seguir as regras descritas em Como o Snowflake valida as exibições semânticas.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.
Exemplos¶
Consulte Criação de uma exibição semântica.