Tampilan adalah tabel virtual yang isinya didefinisikan oleh kueri SQL. Tampilan dapat mengenkapsulasi logika kueri yang kompleks, memungkinkan Anda menanyakan tampilan sederhana untuk mendapatkan set hasil yang kompleks. Di Hologres, Anda dapat membuat tampilan berdasarkan satu atau lebih tabel internal, tabel asing, atau tampilan lainnya. Topik ini menjelaskan cara membuat tampilan di Hologres.
Catatan penggunaan
Perhatikan hal-hal berikut saat membuat dan menanyakan tampilan:
Jika Anda mengaktifkan model izin tingkat skema (SLPM) untuk database dan membuat tampilan yang merujuk dua atau lebih tabel lintas skema dalam database tersebut, Anda tidak dapat menanyakan tampilan karena skema yang berbeda memerlukan izin yang berbeda. Oleh karena itu, disarankan untuk tidak membuat tampilan yang merujuk tabel lintas skema dalam database dengan SLPM aktif.
Jika Anda membuat tampilan berdasarkan satu tabel dan memodifikasi data dalam tampilan, data pada tabel sumber akan diperbarui secara otomatis. Sebaliknya, jika Anda memodifikasi data tabel sumber, data dalam tampilan juga diperbarui. Saat menggunakan tampilan satu tabel, modifikasi data dalam tampilan harus dilakukan dengan hati-hati untuk mencegah perubahan tak terduga pada tabel sumber dan memastikan kelangsungan bisnis Anda.
Jika Anda membuat tampilan berdasarkan beberapa tabel, data dalam tampilan tidak dapat dimodifikasi.
Hologres kompatibel dengan ekosistem PostgreSQL dan menggunakan mode definer keamanan untuk otorisasi tampilan. Agar User B dapat menanyakan tampilan yang dibuat oleh User A, kedua kondisi berikut harus dipenuhi:
User A harus memiliki izin SELECT pada tabel dasar dari tampilan.
User B harus memiliki izin SELECT pada tampilan.
Sintaksis
Gunakan sintaksis berikut untuk membuat tampilan:
CREATE VIEW <view_name> AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];view_name adalah nama tampilan. Pernyataan SELECT ... adalah kueri yang mendefinisikan tampilan.
Contoh
Buat tampilan berdasarkan tabel internal
Buat tabel internal. Contoh pernyataan:
CREATE TABLE holo_test ( amount decimal(10, 2), rate decimal(10, 2) ); INSERT INTO holo_test VALUES (12.12,13.13), (14.14,15.15), (16.16,17.17), (17.1,17), (18.01,19);Buat tampilan berdasarkan tabel internal dan tanyakan data tabel. Contoh pernyataan:
CREATE VIEW holo_view AS SELECT * FROM holo_test; SELECT * FROM holo_view; amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15 16.16 | 17.17 17.10 | 17.00 18.01 | 19.00 (5 rows)
Buat tampilan berdasarkan tabel asing
Buat tabel asing. Contoh pernyataan:
CREATE FOREIGN TABLE IF NOT EXISTS holo_foreign_test ( amount decimal(10, 2), rate decimal(10, 2)) SERVER odps_server OPTIONS(project_name '<projectname>', table_name '<odps_name>') ); SELECT * FROM holo_foreign_test LIMIT 2;Buat tampilan berdasarkan tabel asing dan tanyakan data tabel. Contoh pernyataan:
CREATE VIEW foreign_view AS SELECT * FROM holo_foreign_test; SELECT * FROM foreign_view LIMIT 2; amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15
Buat tampilan federasi berdasarkan tabel internal dan tabel asing
Buat tampilan federasi berdasarkan tabel internal dan tabel asing serta tanyakan data tabel. Contoh pernyataan:
CREATE VIEW view1 AS SELECT * FROM holo_view UNION ALL SELECT * FROM foreign_view;
SELECT * FROM view1;
amount | rate
--------+-------
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.10 | 17.00
18.01 | 19.00
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
(20 rows)Operasi lainnya
Modifikasi Tampilan
Hologres V2.1.18 dan versi lebih baru memungkinkan Anda memodifikasi nama tampilan. Gunakan sintaksis berikut:
ALTER VIEW <view_name_1> RENAME TO <view_name_2>;Hapus tampilan
Gunakan sintaksis berikut untuk menghapus tampilan:
DROP VIEW <view_name>;Tanyakan semua tampilan dan pernyataan DDL dari tampilan
Jalankan perintah berikut untuk melihat semua tampilan. Jika Anda menggunakan klien psql, Anda juga dapat menjalankan perintah
\dv.-- Perintah SQL SELECT n.nspname AS "Skema", c.relname AS "Nama", CASE c.relkind WHEN 'r' THEN 'tabel' WHEN 'v' THEN 'tampilan' WHEN 'm' THEN 'tampilan yang di-materialisasi' WHEN 'i' THEN 'indeks' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'tabel eksternal' WHEN 'p' THEN 'tabel' WHEN 'I' THEN 'indeks' END AS "Tipe", pg_catalog.pg_get_userbyid(c.relowner) AS "Pemilik" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('v','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2;Gunakan sintaksis berikut untuk menanyakan pernyataan DDL dari tampilan:
CREATE EXTENSION hg_toolkit; SELECT hg_dump_script('<viewname>');