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