OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

一般ユーザでCOPYコマンドを利用する方法

公開日:
更新日:
データロード
#COPY
#権限

はじめに

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、TEMPDATAと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 PRIVILEGE

COPYコマンドによるデータロードを実施

各権限が付与できたら、一般ユーザにて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)

参考情報

COPY
https://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

検証バージョン

この記事の内容はVertica 9.0で確認しています。