Hologres V0.10 より前では、列指向テーブルはレガシーの Segment 形式を使用していました。 V0.10 以降、新しい列指向テーブルでは、デフォルトで AliORC 形式 (orc) が使用されます。この形式により、データ圧縮率が向上し、ストレージコストが削減されます。 Hologres V1.3 以降では、Segment 形式のテーブルの作成はサポートされなくなりました。 このトピックでは、テーブルの現在のストレージ形式を確認し、既存のテーブルを ORC 形式に移行する方法について説明します。
ストレージフォーマット
Hologres は、データを 3 つのフォーマットで格納します。
|
フォーマット |
テーブルタイプ |
説明 |
|
|
列指向 |
レガシーな列ごとのファイルフォーマットです。V0.10 より前のバージョンにおける列指向テーブルのデフォルトです。V1.3 以降では、新しいテーブルでの使用はサポートされなくなりました。 |
|
|
列指向 |
AliORC は列指向フォーマットです。V0.10 以降、列指向テーブルのデフォルトとなっています。 |
|
|
行指向 |
行指向テーブルのデフォルトフォーマットです。 |
ストレージフォーマットを変更しても、列指向テーブルを行指向テーブルに変換することはできません。テーブルタイプを変更するには、必要なスキーマで新しいテーブルを作成してください。
前提条件
開始する前に、次の要件が満たされていることを確認してください。
-
Hologres V0.10 以降を実行している Hologres インスタンス。Hologres コンソールのインスタンス詳細ページでインスタンスのバージョンを確認してください。インスタンスのバージョンが V0.10 より前の場合は、まずアップグレードしてください。アップグレード中にエラーが発生した場合は、「アップグレード準備中の一般的なエラー」をご参照いただくか、オンラインサポートにお問い合わせください。
-
Hologres の Segment テーブル。
説明パーティションテーブルの場合、コマンドは親テーブルに対してのみ実行してください。
ストレージフォーマットの確認
次の SQL ステートメントを実行して、現在のデータベース内の各テーブルのストレージフォーマットを確認してください。
SELECT *
FROM hologres.hg_table_properties
WHERE property_key = 'storage_format';
出力例:
table_namespace | table_name | property_key | property_value
-----------------+--------------------+----------------+----------------
public | part | storage_format | segment
public | partsupp | storage_format | segment
public | customer | storage_format | segment
public | orders_row | storage_format | sst
public | sp_orders | storage_format | segment
public | sp_orders_20161231 | storage_format | segment
public | sp_orders_20171231 | storage_format | segment
public | sp_orders_20181231 | storage_format | segment
public | lineitem | storage_format | segment
public | nation | storage_format | orc
public | region | storage_format | orc
public | supplier | storage_format | orc
public | orders | storage_format | orc
(13 rows)
property_value が segment のテーブルは、ORC フォーマットに移行する必要があります。
単一テーブルの ORC フォーマットへの変換
コマンドの実行後、バックグラウンドプロセスが非同期にデータを ORC に変換します。このプロセスは CPU、I/O、ネットワーク帯域幅のリソースを消費し、オンラインサービスのパフォーマンスに影響を与える可能性があります。このコマンドはオフピーク時間に実行してください。
次のコマンドを実行して、1 つのテーブルのストレージフォーマットを変更してください。
call set_table_property ('table_name', 'storage_format', 'orc');
table_name をお使いのテーブル名に置き換えます。次の例では、part テーブルを変換します。
call set_table_property ('public.part', 'storage_format', 'orc');
Segment から ORC フォーマットへのテーブルのバッチ変換
Hologres V1.3.35 以降では、Segment から ORC フォーマットへのバッチ変換をサポートしています。移行する既存の Segment テーブルが多数ある場合は、この方法を使用してください。
バッチ変換コマンドは非同期に実行され、CPU とメモリリソースを消費するため、オンラインワークロードに影響を与える可能性があります。オフピーク時間に実行してください。
ステップ 1:現在のデータベース内の Segment テーブルを特定します。
select * from hologres.hg_table_properties
where property_key = 'storage_format' and property_value like '%segment%';
クエリが空の結果を返した場合、現在のデータベースに変換が必要なテーブルはありません。
ステップ 2:バッチ変換を開始します。
call hg_convert_segment_orc([<BATCH_SIZE>]);
BATCH_SIZE は任意です。同時に変換するテーブル数を指定します。デフォルトは 100 です。
このコマンドは次のように動作します。
-
成功メッセージをすぐに返し、バックグラウンドで変換を開始します。
-
1回の実行あたり、最大
BATCH_SIZE個のテーブルを並行して変換します。 -
変換中に CPU およびメモリリソースを消費します。これらのメトリックを監視してください — CPU とメモリ使用量の低下は、変換が完了したことを示します。変換には通常、データ量に応じて数分から数時間かかります。
-
コマンドが空の結果を返した場合、現在のデータベース内のすべてのテーブルが変換済みであるか、すでに変換中です。
-
コマンドから
continue to call hg_convert_segment_orc() if you want to convert all tables in current database.が返された場合は、さらにセグメントテーブルが残っていることを意味します。空の結果が返されるまで、コマンドの実行を続行してください。
インスタンス内の各データベースに対して、ステップ 1 とステップ 2 を繰り返してください。
Segment テーブル作成時の自動変換 (V1.3.29 以降)
Hologres V1.3.29 以降、Segment フォーマットで CREATE TABLE ステートメントを実行すると、システムはフォーマットを ORC に自動的に変換し、以下の通知を返します。
NOTICE:storage format 'segment' is no longer supported,converted to 'orc'