2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インライン外部表を試す(Oracle Database 18c)

Posted at

Oracle Database 18c の新機能であるインライン外部表機能を試してみました。

外部表オブジェクト

外部表(EXTERNAL TABLE)オブジェクトは、表領域に格納された通常のテーブルとは異なり、データベースの外部に保存されたファイル等をテーブルと同様のSELECT文で検索できるようにするオブジェクトです。通常はCSVファイル等を直接テーブルとして参照したい場合に使います。

これまでのバージョンの外部表はあらかじめ CREATE TABLE 文を使って作成する必要がありました。このため参照するファイル名やディレクトリ・オブジェクト名は固定されていました。

SQL> CREATE TABLE extern1 
   (
      c1 NUMBER, c2 
      VARCHAR2(10)
   ) 
   ORGANIZATION EXTERNAL 
   (
     TYPE ORACLE_LOADER     
     DEFAULT DIRECTORY dir1
     ACCESS PARAMETERS 
     (
       RECORDS DELIMITED BY NEWLINE
       FIELDS TERMINATED BY '|'     
     )
     LOCATION ('data1-1.csv')
   )
   REJECT LIMIT UNLIMITED;

表が作成されました。

SQL> SELECT * FROM extern1;

        C1 C2
---------- ----------
       100 data1
       200 data2

インライン外部表の作成

Oracle Database 18c では、あらかじめテーブルを作成せずに SELECT 文内に直接外部表のインターフェースを記述することができるようになりました。[こちら] (https://docs.oracle.com/cd/E96517_01/newft/new-features.html#GUID-7D707C76-4F3D-4AAE-B186-047217A36FB5) が新機能ガイドの記載です。
このためファイル名やディレクトリ名の指定を動的に記述することができます。下記は上記例と同じ処理を単一の文で実行しています。

SQL> SELECT * FROM EXTERNAL 
    (   
      (
        c1 NUMBER,
        c2 VARCHAR2(10)
      )     
      TYPE ORACLE_LOADER     
      DEFAULT DIRECTORY dir1
      ACCESS PARAMETERS 
      (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY '|'
      )     
      LOCATION ('data1-1.csv') 
      REJECT LIMIT UNLIMITED
    ) extern1;

        C1 C2
---------- ----------
       100 data1
       200 data2

制約

インライン外部表ではパーティション化を行うことができません。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?