このトピックでは、Object Storage Service (OSS) 外部テーブルで操作を実行する方法について説明します。
実行計画の表示
AnalyticDB for PostgreSQLでは、EXPLAINステートメントを実行することで、OSS外部テーブルを含むクエリステートメントの実行計画を表示できます。 例:
EXPLAIN SELECT COUNT(*) FROM oss_lineitem_orc WHERE l_orderkey > 14062498;
統計を収集する
デフォルトでは、AnalyticDB for PostgreSQLはOSS外部テーブルの統計を自動的に収集しません。これらのテーブルはOSSに保存されているためです。 統計が利用できないか古い場合、クエリオプティマイザは、結合されたテーブルのクエリなどの複雑なクエリに対して非効率的なクエリプランを生成する可能性があります。 この問題を解決するために、AnalyticDB for PostgreSQLでは、ANALYZEステートメントを実行してOSS外部テーブルの統計を更新できます。
次のEXPLAINステートメントを実行して、現在の実行計画を表示します。
EXPLAIN <table_name>;
次のANALYZEステートメントを実行して統計を収集します。
ANALYZE <table_name>;
次のEXPLAINステートメントを実行して、新しい実行計画を表示します。
EXPLAIN <table_name>;
大きなオブジェクトを分割する
OSS外部テーブルを使用すると、異なるノードに保存されているソースオブジェクトを並行してスキャンできます。 ソースオブジェクトの数が少ない場合は、これらのオブジェクトを小さなオブジェクトに分割して、異なるノードでの並列スキャンを容易にすることを推奨します。
次の例は、ラージオブジェクトを分割する方法を示しています。 この例では、Linuxオペレーティングシステムが使用されています。
現在のラージオブジェクトの行数を照会します。
wc -l <csv_file>
Nパラメーターの値に基づいて、オブジェクトを小さなオブジェクトに分割します。
N
は、各小オブジェクトの行数を指定します。split -l N <csv_file>
説明オブジェクト内の行を異なる小さなオブジェクトに分割することはできません。 前述の分割方法は、各行の整合性を保証します。
OSS外部テーブルのオブジェクト情報の表示
次のステートメントを実行して、OSS外部テーブルのオブジェクト情報を照会できます。
SELECT * FROM get_oss_table_meta('<OSS FOREIGN TABLE>');