外部テーブル作成時、システムは 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