Hologres V0.10 以降では、列指向テーブルのデータストレージフォーマットが AliORC にアップグレードされています。このフォーマットにより、データ圧縮が向上し、ストレージコストが削減されます。本トピックでは、Hologres における列指向テーブルのデータストレージフォーマットの変更方法について説明します。
制限事項
Hologres で列指向テーブルのデータストレージフォーマットを変更する際には、以下の制限事項が適用されます。
-
この機能は Hologres V0.10 以降でのみサポートされています。ご利用のインスタンスバージョンは、Hologres コンソールのインスタンス詳細ページでご確認ください。インスタンスバージョンが V0.10 より古い場合は、スペックアップが必要です。スペックアップ中にエラーが発生した場合は、「スペックアップ準備中の一般的なエラー」をご参照いただくか、Hologres DingTalk グループにご参加のうえフィードバックをお送りください。詳細については、「オンラインサポートをさらに利用する方法」をご参照ください。
-
V0.10 へのスペックアップ前は、列指向テーブルのデフォルトストレージフォーマットは segment でした。スペックアップ後は、新規作成される列指向テーブルのデフォルトフォーマットが AliORC(パラメーター値は orc)となります。行指向テーブルのデフォルトフォーマットは sst です。スペックアップ前の既存データも変換可能ですが、以下の制限事項が適用されます。
-
一度に変換できるのは 1 つのテーブルのみです。バッチ変換はサポートされていません。
-
パーティションテーブルの場合、親テーブルのデータストレージフォーマットのみを変換してください。
-
ストレージフォーマットを変更すると、バックグラウンドスレッドが非同期でデータを新しいフォーマットに変換します。この非同期バックグラウンドプロセスは CPU、I/O、ネットワーク帯域幅などのシステムリソースを消費します。変換処理により、オンラインタスクのパフォーマンスに影響を与える可能性があります。変換に要する時間は、既存データ量およびリアルタイム書き込みボリュームによって異なります。この操作はオフピーク時間帯に実行してください。
-
-
ストレージフォーマットの変更により、列指向テーブルを行指向テーブルに変換することはできません。変換が必要な場合は、新しいテーブルスキーマで新規テーブルを作成してください。
データストレージフォーマットの確認
次の 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)-
メトリックの説明
パラメーター
説明
segment
Hologres の旧バージョンにおける列指向テーブルのデフォルトフォーマットです。
sst
行指向テーブルのデフォルトフォーマットです。
orc
Hologres V0.10 以降における列指向テーブルのデフォルトフォーマットです。`property_value` が `orc` であるテーブルは、AliORC フォーマットでデータストレージを行います。
テーブルのデータストレージフォーマットの更新
Hologres インスタンスを V0.10 にスペックアップ後、新規作成されるテーブルはデフォルトで AliORC フォーマットを使用します。既存のテーブルについては、手動でストレージクラスを変更する必要があります。次のコマンド構文を使用してください。
call set_table_property ('table_name', 'storage_format', 'orc');
`table_name` はご利用のテーブル名に置き換えてください。以下の例では、`part` テーブルのストレージクラスを AliORC フォーマットに変更しています。
call set_table_property ('public.part', 'storage_format', 'orc');
Segment から ORC フォーマットへのテーブルのバッチ変換
Hologres V1.3 以降では、Segment ストレージフォーマットを使用したテーブルの作成はサポートされなくなりました。Segment から ORC フォーマットへのテーブル変換は、できるだけ早く実施してください。この変更は以下のシナリオに影響します。
-
新規テーブル
Hologres V1.3.29 以降では、Segment フォーマットでテーブルを作成しようとすると、システムが自動的にフォーマットを ORC に変換します。`CREATE TABLE` 文を実行すると、次の通知が表示されます。
NOTICE:storage format 'segment' is no longer supported,converted to 'orc' -
既存の Segment テーブル
Segment フォーマットを使用している既存のテーブルについては、以下の手順に従って ORC フォーマットにバッチ変換してください。
-
現在のデータベースで Segment フォーマットを使用しているテーブルを確認します。
説明クエリ結果が空の場合、現在のデータベースには変換が必要なテーブルがないか、必要なすべてのテーブルの変換がすでに進行中です。これ以上の操作は不要です。
select * from hologres.hg_table_properties where property_key = 'storage_format' and property_value like '%segment%'; -
Segment フォーマットから ORC フォーマットへのバッチ変換を実行できます。
Hologres V1.3.35 以降では、Segment フォーマットから ORC フォーマットへのテーブルのバッチ変換がサポートされています。コマンド構文は以下のとおりです。
call hg_convert_segment_orc([<BATCH_SIZE>]);BATCH_SIZEはオプションのパラメーターで、同時に変換するテーブル数を指定します。このパラメーターを指定しない場合、デフォルト値の 100 が使用されます。コマンドの説明:
-
このコマンドは非同期で実行されます。フォーマット変換がバックグラウンドで実行されている間に、すぐに成功メッセージが返されます。変換プロセスは CPU およびメモリリソースを消費するため、関連メトリックが上昇します。これにより、オンラインサービスに影響を与える可能性があるため、オフピーク時間帯に変換を実行してください。処理時間は通常、数分から数時間程度かかります。CPU およびメモリメトリックをモニターし、これらのメトリックが低下した時点で変換が完了したと判断できます。
-
コマンドの実行結果が空の場合、現在のデータベースには変換が必要なテーブルがないか、必要なすべてのテーブルの変換がすでに進行中です。これ以上の操作は不要です。次のデータベースに進んでください。
-
コマンドの実行結果として「
continue to call hg_convert_segment_orc() if you want to convert all tables in current database.」のようなメッセージが返された場合、さらに変換が必要なテーブルが存在します。クラスターの負荷状況を考慮しながら、コマンドの実行結果が空になるまでコマンドを繰り返し実行してください。
-
-