DataObject オプション

ソース・データ・ファイル (または、ファイルとして処理可能なメディア) に至るオペレーティング・システム・パスを指定します。

データ・オブジェクトのパス名の値を指定するのは必須です。 外部表のデータ・オブジェクトのためのデフォルト値はありません。 RemoteSource オプションを設定しない場合、または空のストリングに設定する場合、このパスには、相対パスではなく絶対パスを指定する必要があります。 ファイル名は有効な UTF-8 ストリングでなければなりません。

ロードの場合、ファイルは存在していなければならず、かつロードを開始するオペレーティング・システム・ユーザーにそのファイルに対する読み取り許可がなければなりません。 アンロードの場合、アンロードを開始するオペレーティング・システム・ユーザーに、ファイルの親ディレクトリーに対する読み取りと書き込みの許可がなければなりません。 また、データ・ファイルが存在する場合、そのファイルは上書きされます。 通常、アンロードは nz ユーザーが実行するため、nz ユーザーにターゲット・パスのファイルに対する読み取りと書き込みの許可がなければなりません。

ベスト・プラクティスとして、外部テーブルのロケーションを「/nzディレクトリやそのサブディレクトリに置くべきではない。データ・オブジェクト・ファイルが誤って「Netezza Performance Server操作に干渉する可能性があるからだ。 また、データ・オブジェクト・ファイルは、Netezza Performance Serverデータベースとソフトウェアの動作に必要なディスク領域を使用する場合があります。

外部表の場所の管理

デフォルトでは、データ・オブジェクトは nz ユーザー・アカウントがアクセスできるNetezza Performance Server・ホスト上のパスに作成できます。

リリース7.1.0.1以降、管理者ユーザーは、ユーザーが外部テーブル・データ・オブジェクト・ファイルを保存できるNetezza Performance Server・ホスト上の場所を指定および管理できます。 Manage System 特権を付与されたユーザーも、外部表のデータ・オブジェクト・ファイルの場所を管理できます。 外部表の場所を変更したり制限したりした場合、その変更や制限は、そのシステム上に作成される新しい外部表にのみ適用されます。 既存の外部表は、引き続きデータ・オブジェクトの現在の場所を使用します。

現在のテーブルの位置を表示するには、「SHOW EXTERNAL TABLE LOCATIONコマンドを使用する。 以下に例を示します。

TESTDB.ADMIN(ADMIN)=> SHOW EXTERNAL TABLE LOCATION;
 ALLOWDIRECTORY 
----------------
 *
(1 row)

アスタリスクは、外部表オブジェクト・ファイルの場所に制限がないことを示します。

外部表データ・オブジェクトの場所を制限するには、以下の手順を使用します。

  1. admin ユーザーまたは Manage System 特権を持つデータベース・ユーザーとしてNetezza Performance Serverデータベースに接続します。
  2. SHOW EXTERNAL TABLE LOCATIONコマンドを発行して、現在のテーブル・ロケーションのパス名を確認する。
  3. 以下のいずれかのステップを実行します。
    • nz ユーザーからアクセス可能なすべてのパスへのアクセスを取り消すには、'*' ワイルドカード・ロケーションを削除します。 以下に例を示します。
      TESTDB.ADMIN(ADMIN)=> REMOVE EXTERNAL TABLE LOCATION '*';
      REMOVE EXTERNAL TABLE LOCATION
    • ADD EXTERNAL TABLE LOCATIONコマンドを発行して、外部テーブル・オブジェクトを許可する場所を追加する。 システム上に作成される新しい外部表は、許可されたディレクトリーに保管する必要があります。 以下にコマンドの例を示します。
      TESTDB.ADMIN(ADMIN)=> ADD EXTERNAL TABLE LOCATION '/export/home/nz/ext_tbl';
      ADD EXTERNAL TABLE LOCATION
      TESTDB.ADMIN(ADMIN)=> ADD EXTERNAL TABLE LOCATION '/tmp/ext_tbl';
      ADD EXTERNAL TABLE LOCATION

      外部表に挿入したり外部表を読み取ったりするには、その前に、指定の場所およびオブジェクト・ファイルがシステム上に存在していなければならず、また、nz ユーザー・アカウントからアクセス可能でなければなりません。

  4. オプション:SHOW EXTERNAL TABLE LOCATIONコマンドを発行して、サポートされているテーブル・ロケーションのリストを確認する。

ユーザーが、許可された場所のリストに含まれていないデータ・オブジェクト・パスを指定して外部表を作成しようとすると、次の例に示すように、コマンドはエラーを出して失敗します。

TESTDB.ADMIN(ADMIN)=> CREATE EXTERNAL TABLE my_ext_tbl SAMEAS tbl_retail 
USING (DATAOBJECT ('/mydir'));
ERROR:  Invalid path specified in DATAOBJECT, path not allowed '/mydir'

許可された場所のリストに含まれているデータ・オブジェクト・パスを指定して外部表を作成しようとしても、nz ユーザーにそのファイルに対する読み取りと書き込みの許可がない場合、CREATE EXTERNAL TABLE コマンドは成功しますが、データを表に挿入するためのコマンドは、許可エラーのために失敗します。 以下に例を示します。

TESTDB.ADMIN(ADMIN)=> CREATE EXTERNAL TABLE my_ext_tbl SAMEAS tbl_retail 
USING (DATAOBJECT ('/tmp/ext_tbl'));
CREATE EXTERNAL TABLE
TESTDB.ADMIN(ADMIN)=> INSERT INTO my_ext_tbl VALUES (1,2,3,4);
ERROR:  /tmp/ext_tbl : Permission denied