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