テーブルにエイリアス(別名)を付与する方法
Verticaにはシノニム(synonym)はありません。
テーブルに対するエイリアス(別名)を付与したい場合は、ビューを使用します。
例えばpublic.table1テーブルに別名(kka1.v1)を付与したい場合は以下のようにCREATE VIEWを使用します。
dbadmin=> CREATE VIEW kka1.v1 AS SELECT * FROM public.table1;
CREATE VIEWこれにより、public.table1、kka1.v1 どちらを検索した場合でも同じ結果を得ることができます。
dbadmin=> SELECT * FROM public.table1;
日付 | 顧客ID | 店舗 | エリア | 売上高
------------+--------+--------+--------+--------
2013-07-01 | 10001 | 新宿 | 東京 | 100
2013-07-03 | 10004 | 梅田 | 大阪 | 2400
2014-07-01 | 10002 | 新宿 | 東京 | 1000
2014-07-03 | 10005 | 池袋 | 東京 | 1600
2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000
2015-07-03 | 10006 | 新宿 | 東京 | 6400
2014-07-06 | 10008 | 梅田 | 大阪 | 1100
2013-07-05 | 10007 | 品川 | 東京 | 1000
2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300
dbadmin=> SELECT * FROM kka1.v1;
日付 | 顧客ID | 店舗 | エリア | 売上高
------------+--------+--------+--------+--------
2013-07-05 | 10007 | 品川 | 東京 | 1000
2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300
2014-07-06 | 10008 | 梅田 | 大阪 | 1100
2013-07-01 | 10001 | 新宿 | 東京 | 100
2013-07-03 | 10004 | 梅田 | 大阪 | 2400
2014-07-01 | 10002 | 新宿 | 東京 | 1000
2014-07-03 | 10005 | 池袋 | 東京 | 1600
2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000
2015-07-03 | 10006 | 新宿 | 東京 | 6400また、ビューには権限を付与できるため、セキュリティ目的でも利用できます。
例)参照用ユーザ(kka1)にはpublic.table1テーブルは参照させず、kka1.v1ビューを参照させたい場合
現在public.table1、kka1.v1ともに所有者(Owner)はdbadminユーザのため、デフォルトではkka1ユーザはどちらも参照することができません。
dbadmin=> \d
List of tables
Schema | Name | Kind | Owner | Comment
--------+--------+-------+---------+---------
public | table1 | table | dbadmin |
dbadmin=> \dv
List of views
Schema | Name | Owner | Comment
--------+------+---------+---------
kka1 | v1 | dbadmin |
kka1=> SELECT * FROM public.table1;
ERROR 4367: Permission denied for relation table1
kka1=> SELECT * FROM kka1.v1;
ERROR 4367: Permission denied for relation v1kka1.v1のみ参照権限を与える場合は、以下のようにGRANT文を実行します。
v1ビューが存在するkka1スキーマに対するUSAGE権限を付与します。
dbadmin=> GRANT USAGE ON SCHEMA kka1 TO kka1;
GRANT PRIVILEGEv1ビューに対するSELECT(参照)権限を付与します。
dbadmin=> GRANT SELECT ON TABLE kka1.v1 TO kka1;
GRANT PRIVILEGE上記の権限を付与することで、kka1ユーザはkka1.v1ビューの参照が可能になります。
kka1=> SELECT * FROM public.table1;
ERROR 4367: Permission denied for relation table1
kka1=> SELECT * FROM kka1.v1;
日付 | 顧客ID | 店舗 | エリア | 売上高
------------+--------+--------+--------+--------
2013-07-05 | 10007 | 品川 | 東京 | 1000
2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300
2013-07-01 | 10001 | 新宿 | 東京 | 100
2013-07-03 | 10004 | 梅田 | 大阪 | 2400
2014-07-01 | 10002 | 新宿 | 東京 | 1000
2014-07-03 | 10005 | 池袋 | 東京 | 1600
2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000
2015-07-03 | 10006 | 新宿 | 東京 | 6400
2014-07-06 | 10008 | 梅田 | 大阪 | 1100参考情報
作成したビューの詳細情報を確認する方法
https://www.ashisuto.co.jp/cm/analytics-database/views.html
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。