外部テーブル作成時、システムは LOCATION で指定されたパス下にある PATTERN に一致するファイルのリストをOceanBaseデータベースのシステムテーブルに保存します。外部テーブルのスキャン時には、このリストに基づいて外部ファイルにアクセスします。外部テーブルがアクセス可能なファイルを確認および更新できます。
外部テーブルのファイルを確認する
外部テーブル作成後、ALL_OB_EXTERNAL_TABLE_FILES ビューと DBA_OB_EXTERNAL_TABLE_FILES ビューを使用して外部テーブル情報を確認できます。ステートメント例は以下の通りです:
外部ディレクトリにファイルが1つしかない場合
SELECT * FROM SYS.DBA_OB_EXTERNAL_TABLE_FILES;クエリ結果は次のとおりです:
+------------+-------+----------------+------------------------------+-----------+ | TABLE_NAME | OWNER | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+-------+----------------+------------------------------+-----------+ | EXT_T3 | SYS | P0 | xx.xx.xx.208:2882%data.csv | 29 | +------------+-------+----------------+------------------------------+-----------+ 1 row in set外部ディレクトリに複数のファイルがある場合
SELECT * FROM SYS.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'EXT_T4';クエリ結果は次のとおりです:
+------------+-------+----------------+-------------------------------+-----------+ | TABLE_NAME | OWNER | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+-------+----------------+-------------------------------+-----------+ | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data2.csv | 34 | | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data1.csv | 33 | +------------+-------+----------------+-------------------------------+-----------+ 2 rows in set
ここで:
TABLE_NAME:外部テーブルのテーブル名。OWNER:外部テーブルが属するユーザー。PARTITION_NAME:外部テーブルのパーティション名。FILE_URL:外部テーブルがアクセスするファイルのURL。FILE_SIZE:外部テーブルがアクセスするファイルのサイズ。
外部テーブルのファイルを更新する
外部テーブル作成後、外部ディレクトリに新しいファイルが追加された場合(そのファイルが LOCATION で指定されたパスにあり、PATTERN と一致する場合)、外部テーブルにアクセスして新しく追加されたファイルを参照するには、外部テーブルのファイルを更新する操作を実行する必要があります。
外部テーブルのファイルを更新するSQLステートメントは以下のとおりです:
ALTER EXTERNAL TABLE table_name refresh;
以下、簡単な例を用いて説明します。外部テーブル ext_t4 があり、その外部ファイルには data1.csv と data2.csv の2つのファイルが含まれていると仮定します。同じディレクトリに data3.csv という新しいファイルを追加します。
外部テーブルのファイルを更新する前に、その外部テーブル内のすべてのファイルを照会します。
SELECT * FROM SYS.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'EXT_T4';クエリ結果は次のとおりです:
+------------+-------+----------------+-------------------------------+-----------+ | TABLE_NAME | OWNER | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+-------+----------------+-------------------------------+-----------+ | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data2.csv | 34 | | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data1.csv | 33 | +------------+-------+----------------+-------------------------------+-----------+ 2 rows in set外部テーブルが存在するデータベースに接続し、外部テーブルのファイルを更新します。
ALTER EXTERNAL TABLE EXT_T4 REFRESH;再度、その外部テーブル内のすべてのファイルを照会します。
SELECT * FROM SYS.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'EXT_T4';クエリ結果は次のとおりです:
+------------+-------+----------------+-------------------------------+-----------+ | TABLE_NAME | OWNER | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+-------+----------------+-------------------------------+-----------+ | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data3.csv | 33 | | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data2.csv | 34 | | EXT_T4 | SYS | P0 | xx.xx.xx.208:2882%data1.csv | 33 | +------------+-------+----------------+-------------------------------+-----------+ 3 rows in set