Quando a lógica de negócio exige instruções aninhadas em múltiplas camadas dentro de uma instrução DML, identificar problemas torna-se difícil e a leitura do código fica comprometida. Uma visualização de dados permite encapsular uma instrução aninhada como uma unidade nomeada e reutilizável, mantendo as instruções DML concisas e mais fáceis de depurar.
Uma visualização de dados é uma tabela lógica que descreve a lógica de computação. Ela não armazena dados físicos.
Visualizações versus tabelas
Visualizações e tabelas podem ser referenciadas em consultas SQL, mas apresentam comportamentos distintos:
|
Dimensão |
Visualização |
Tabela |
|
Suporte a escrita |
Somente leitura. Não pode atuar como sink em instruções |
Permite leitura e escrita. |
|
Armazenamento físico |
Inexistente. O sistema computa os dados dinamicamente a cada referência. |
Persiste os dados. |
|
Sobrecarga de armazenamento |
Armazena apenas a expressão da consulta, não os dados retornados. |
Armazena o conjunto completo de dados. |
Sintaxe
CREATE TEMPORARY VIEW viewName
[( columnName [, columnName]* )]
AS queryStatement;
|
Parâmetro |
Descrição |
|
|
Nome da visualização. |
|
|
Nome de um campo na visualização. Opcional. |
|
|
Instrução aninhada que define a visualização. |
TEMPORARY: A visualização existe apenas durante a sessão e substitui qualquer visualização persistente com o mesmo nome.
Exemplo
O exemplo a seguir encapsula uma consulta a uma tabela source em uma visualização de dados. Em seguida, uma instrução DML lê diretamente da visualização, evitando a consulta direta à tabela source.
-- Create a source table using the DataGen connector.
CREATE TEMPORARY TABLE datagen_source (
name VARCHAR,
score BIGINT
) WITH (
'connector' = 'datagen',
'number-of-rows' = '10'
);
-- Create a result table using the BlackHole connector.
CREATE TEMPORARY TABLE rds_output (
name VARCHAR,
score BIGINT
) WITH (
'connector' = 'blackhole'
);
-- Define a data view over the source table.
-- Encapsulate the selection logic here to keep the DML statement simple.
CREATE TEMPORARY VIEW tmp_view AS
SELECT *
FROM datagen_source;
-- Read from the view instead of the source table directly.
INSERT INTO rds_output
SELECT name, score
FROM tmp_view;
Próximos passos
DROP VIEW
CREATE TEMPORARY TABLE
INSERT INTO