BUAT TAMPILAN
Berlaku untuk: Databricks SQL Databricks Runtime
Membuat tabel virtual yang tidak memiliki data fisik berdasarkan kumpulan hasil kueri SQL.
ALTER VIEW
dan DROP VIEW
hanya mengubah metadata.
Sintaks
CREATE [ OR REPLACE ] [ TEMPORARY ] VIEW [ IF NOT EXISTS ] view_name
[ column_list ]
[ schema_binding ]
[ COMMENT view_comment ]
[ TBLPROPERTIES clause ]
AS query
schema_binding
WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION }
column_list
( { column_alias [ COMMENT column_comment ] } [, ...] )
Parameter
OR REPLACE
Jika tampilan dengan nama yang sama sudah ada, nama tampilan tersebut akan diganti. Untuk mengganti tampilan yang ada, Anda harus menjadi pemiliknya.
Mengganti tampilan yang ada tidak mempertahankan hak istimewa yang diberikan pada tampilan asli. Gunakan ALTER VIEW untuk mempertahankan hak istimewa.
SEMENTARA
Tampilan TEMPORARY hanya terlihat oleh sesi yang membuatnya dan dijatuhkan saat sesi berakhir.
GLOBAL SEMENTARA
Berlaku untuk: Databricks Runtime
Tampilan GLOBAL TEMPORARY terkait dengan sistem skema sementara yang dipertahankan
global_temp
.IF NOT EXISTS
Membuat tampilan hanya jika tidak ada. Jika tampilan dengan nama ini sudah ada, pernyataan
CREATE VIEW
diabaikan.Anda dapat menentukan paling banyak salah satu
IF NOT EXISTS
atauOR REPLACE
.-
Nama tampilan yang baru dibuat. Nama tampilan sementara tidak boleh memenuhi syarat. Nama tampilan yang sepenuhnya memenuhi syarat harus unik.
Tampilan yang dibuat
hive_metastore
hanya dapat berisi karakter dan garis bawah ASCII alfanumerik (INVALID_SCHEMA_OR_RELATION_NAME). schema_binding
Berlaku untuk: Databricks Runtime 15.3 ke atas
Secara opsional menentukan bagaimana tampilan beradaptasi dengan perubahan pada skema kueri karena perubahan dalam definisi objek yang mendasar.
Klausa ini tidak didukung untuk tampilan sementara atau tampilan materialisasi.
DENGAN PENGIKATAN SKEMA
Tampilan akan menjadi tidak valid jika daftar kolom kueri berubah kecuali untuk kondisi berikut:
- Daftar kolom menyertakan klausa bintang, dan ada kolom tambahan. Kolom tambahan ini diabaikan.
- Jenis satu atau beberapa kolom berubah dengan cara yang memungkinkan mereka untuk ditransmisika dengan aman ke jenis kolom asli menggunakan aturan transmisi implisit.
Ini adalah perilaku default.
DENGAN KOMPENSASI SKEMA
Tampilan akan menjadi tidak valid jika daftar kolom kueri berubah kecuali untuk kondisi berikut:
- Daftar kolom menyertakan klausa bintang, dan ada kolom tambahan. Kolom tambahan ini diabaikan.
- Jenis satu atau beberapa kolom berubah dengan cara yang memungkinkan mereka untuk ditransmisika ke jenis kolom asli menggunakan aturan cast ANSI eksplisit.
DENGAN EVOLUSI JENIS SKEMA
Tampilan akan mengadopsi perubahan apa pun pada jenis dalam daftar kolom kueri ke dalam definisinya sendiri ketika pengkompilasi SQL mendeteksi perubahan seperti itu sebagai respons terhadap referensi ke tampilan.
DENGAN EVOLUSI SKEMA
- Mode ini berprilaku seperti
WITH SCHEMA TYPE EVOLUTION
, dan juga mengadopsi perubahan dalam nama kolom atau kolom yang ditambahkan dan dihilangkan jika tampilan tidak menyertakan eksplisitcolumn_list
. - Tampilan hanya akan menjadi tidak valid jika kueri tidak lagi dapat diurai, atau tampilan
column_list
opsional tidak cocok dengan jumlah ekspresi dalam daftar pilihquery
lagi.
- Mode ini berprilaku seperti
column_list
Secara opsional, beri label pada kolom dalam hasil kueri tampilan. Jika Anda memberikan daftar kolom, jumlah alias kolom harus sesuai dengan jumlah ekspresi dalam kueri. Jika tidak ada daftar kolom yang ditentukan, alias berasal dari isi tampilan.
-
Alias kolom harus unik.
column_comment
Literal opsional
STRING
yang menjelaskan alias kolom.
-
view_comment
Literal opsional
STRING
yang memberikan komentar tingkat tampilan.-
Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.
AS kueri
Kueri yang membuat tampilan dari tabel dasar atau tampilan lainnya.
Contoh
-- Create or replace view for `experienced_employee` with comments.
> CREATE OR REPLACE VIEW experienced_employee
(id COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name
FROM all_employee
WHERE working_years > 5;
-- Create a temporary view `subscribed_movies`.
> CREATE TEMPORARY VIEW subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo
INNER JOIN members AS mb
ON mo.member_id = mb.id;
-- Create a view with schema binding (default)
> CREATE TABLE emp(name STRING, income INT);
> CREATE VIEW emp_v WITH SCHEMA BINDING AS SELECT * FROM emp;
– The view ignores adding a column to the base table
> ALTER TABLE emp ADD COLUMN bonus SMALLINT;
> SELECT * FROM emp_v;
name income
---- ------
-- The view tolerates narrowing the underlying type
> CREATE OR REPLACE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
INTEGER
– The view does not tolerate widening the underlying type
CREATE OR REPLACE TABLE emp(name STRING, income BIGINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
Error
– Create a view with SCHEMA COMPENSATION
> CREATE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA COMPENSATION AS SELECT * FROM emp;
-- The view tolerates widening the underlying type but keeps its own signature fixed
CREATE OR REPLACE TABLE emp(name STRING, income INTEGER, bonus INTEGER);
> SELECT typeof(income) FROM emp_v;
INTEGER
-- The view does not tolerate dropping a needed column
ALTER TABLE emp DROP COLUMN bonus;
> SELECT * FROM emp_v;
Error
– Create a view with SCHEMA EVOLUTION
> CREATE TABLE emp(name STRING, income SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA EVOLUTION AS SELECT * FROM emp;
-- The view picks up additional columns
> ALTER TABLE emp ADD COLUMN bonus SMALLINT
> SELECT * FROM emp_v;
name income bonus
---- ------ -----
-- The view picks up renamed columns as well
> ALTER TABLE emp RENAME COLUMN income TO salary SMALLINT;
> SELECT * FROM emp_v;
name salary bonus
---- ------ -----
-- The view picks up changes to column types and dropped columns
> CREATE OR REPLACE TABLE emp(name STRING, salary BIGINT);
> SELECT *, typeof(salary)AS salary_type FROM emp_v;
name salary
---- ------