外部テーブル作成時、システムは LOCATION で指定されたパス下にある PATTERN に一致するファイルリストをOceanBaseデータベースのシステムテーブルに保存します。外部テーブルのスキャン時にはこのリストに基づいて外部ファイルにアクセスします。外部テーブルがアクセス可能なファイルを確認および更新できます。
外部テーブルのファイルの確認
外部テーブル作成後、システムテナント(sysテナント)は CDB_OB_EXTERNAL_TABLE_FILES ビューを使用してクラスタ内のすべての外部テーブル情報を確認できます。ユーザーテナントは ALL_OB_EXTERNAL_TABLE_FILES ビューと DBA_OB_EXTERNAL_TABLE_FILES ビューを使用して外部テーブル情報を確認できます。ステートメントの例は以下のとおりです:
外部ディレクトリにファイルが1つしかない場合
SELECT * FROM oceanbase.DBA_OB_EXTERNAL_TABLE_FILES;クエリ結果は次のとおりです:
+------------+--------------+----------------+------------------------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+--------------+----------------+------------------------------+-----------+ | ext_t3 | test | P0 | xx.xx.xx.208:2882%data.csv | 34 | | ext_t2 | test | P0 | xx.xx.xx.208:2882%data.csv | 34 | | ext_t1 | test | P0 | xx.xx.xx.208:2882%data.csv | 34 | +------------+--------------+----------------+------------------------------+-----------+ 3 rows in set外部ディレクトリに複数のファイルがある場合
SELECT * FROM oceanbase.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'ext_t4';クエリ結果は次のとおりです:
+------------+--------------+----------------+-------------------------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+--------------+----------------+-------------------------------+-----------+ | ext_t4 | test | P0 | xx.xx.xx.208:2882%data1.csv | 33 | | ext_t4 | test | P0 | xx.xx.xx.208:2882%data2.csv | 34 | +------------+--------------+----------------+-------------------------------+-----------+ 2 rows in set
ここで:
TABLE_NAME:外部テーブルのテーブル名。TABLE_SCHEMA:外部テーブルが存在するデータベース名。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 oceanbase.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'ext_t4';クエリ結果は次のとおりです:
+------------+--------------+----------------+-------------------------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+--------------+----------------+-------------------------------+-----------+ | ext_t4 | test | P0 | xx.xx.xx.208:2882%data1.csv | 33 | | ext_t4 | test | P0 | xx.xx.xx.208:2882%data2.csv | 34 | +------------+--------------+----------------+-------------------------------+-----------+ 2 rows in set外部テーブルが存在するデータベースに接続し、外部テーブルファイルを更新します。
ALTER EXTERNAL TABLE test.ext_t4 REFRESH;再度、その外部テーブル内のすべてのファイルをクエリします。
SELECT * FROM oceanbase.DBA_OB_EXTERNAL_TABLE_FILES WHERE TABLE_NAME= 'ext_t4';クエリ結果は次のとおりです:
+------------+--------------+----------------+-------------------------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | PARTITION_NAME | FILE_URL | FILE_SIZE | +------------+--------------+----------------+-------------------------------+-----------+ | ext_t4 | test | P0 | xx.xx.xx.208:2882%data1.csv | 33 | | ext_t4 | test | P0 | xx.xx.xx.208:2882%data2.csv | 34 | | ext_t4 | test | P0 | xx.xx.xx.208:2882%data3.csv | 33 | +------------+--------------+----------------+-------------------------------+-----------+ 3 rows in set