はじめに
Verticaでデータロードを実施する際、一般的にCOPYコマンドを利用します。COPYコマンドはスーパーユーザ(dbadmin)であれば事前準備なく実行できますが、データロード用ユーザ等、一般ユーザでデータロードを行いたい場合は、COPYコマンドを実行するために必要な権限を与える必要があります。
本記事では、一般ユーザへCOPYコマンドに必要な権限を与え、COPYコマンドによるデータロードが実行できるようになるまでの手順をご紹介します。
COPYコマンドを実行するのに必要な権限
一般ユーザがCOPYコマンドを実行するには、以下の権限が必要です。
・ファイルの読み込み権限
・スキーマに対するUSAGE権限
・表に対するINSERT権限
ファイルの読み込み権限の付与
一般ユーザ(データベースユーザ)でCOPYコマンドを実行する場合、Verticaサーバ上のファイルを参照する権限が必要になります。ユーザを作成しただけでは、データロード用のCSVファイルを読み込むことができません。そのため、以下の作業を実施する必要があります。
LOCATIONオブジェクトの作成
まずは、Verticaサーバ上でCSVファイルを配置するディレクトリを「USER」タイプ(※)のLOCATIONオブジェクトとして定義します。
SQL=> CREATE LOCATION 'CSVファイル配置ディレクトリ' USAGE 'USER';
例)'/data/csv'ディレクトリを「USER」タイプのLOCATIONオブジェクトとして作成
dbadmin=> CREATE LOCATION '/data/csv' USAGE 'USER';
CREATE LOCATION※LOCATIONには複数のタイプがあります。
| LOCATIONのタイプ | 内容 |
|---|---|
| DATA | 永続データと一時テーブルの作成先 |
| TEMP | 一時ファイルの作成先(ソート、結合、グループ化に使用) |
| DATA、TEMP | DATAとTEMPの作成先 |
| USER | スーパーユーザ以外がファイルの読み書きに利用 |
LOCATIONオブジェクトに対する参照権限の付与
上記で作成したLOCATIONオブジェクトへの参照権限をCOPYコマンドを利用するユーザに付与します。
SQL=> GRANT READ ON LOCATION 'CSVファイル配置ディレクトリ' TO ユーザ名;
例)load_userユーザに'/data/csv'LOCATIONの参照権限を付与
dbadmin=> GRANT READ ON LOCATION '/data/csv' TO load_user;
GRANT PRIVILEGEスキーマに対するUSAGE権限の付与
SQL=> GRANT USAGE ON SCHEMA スキーマ名 TO ユーザ名;
例)load_userユーザにssbmスキーマのUSAGE権限を付与
dbadmin=> GRANT USAGE ON SCHEMA ssbm TO load_user;
GRANT PRIVILEGEテーブルのINSERT権限の付与
SQL=> GRANT INSERT ON スキーマ名.テーブル名 TO ユーザ名;
例)load_userユーザにssbmスキーマのlineorderテーブルへのINSERT権限を付与
dbadmin=> GRANT INSERT ON ssbm.lineorder TO load_user;
GRANT PRIVILEGECOPYコマンドによるデータロードを実施
各権限が付与できたら、一般ユーザにてCOPYコマンドによるデータロードが可能になります。
例)load_userユーザにてssbmスキーマのlineorder表へデータロードを実施する
load_user=> COPY ssbm.lineorder FROM '/data/csv/lineorder.csv' DELIMITER ',' ENCLOSED BY '"' ENFORCELENGTH DIRECT;
Rows Loaded
-------------
10
(1 row)参考情報
CREATE LOCATION
https://my.vertica.com/docs/9.0.x/HTML/index.htm#Authoring/SQLReferenceManual/Statements/CreateLocation.htm
GRANT (Storage Location)
https://my.vertica.com/docs/9.0.x/HTML/index.htm#Authoring/SQLReferenceManual/Statements/GRANT/GRANTStorageLocation.htm
検証バージョン
この記事の内容はVertica 9.0で確認しています。