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