V0.10 以降の Hologres インスタンスの場合、列指向テーブルのデータストレージ形式は AliORC に更新されます。 AliORC は、保存データの量に関してより良いパフォーマンスを提供するため、ストレージコストを削減できます。このトピックでは、Hologres における既存の列指向テーブルのデータストレージ形式を更新する方法について説明します。
制限事項
データストレージ形式を更新する際には、次の制限事項に注意してください。
この機能は、Hologres V0.10 以降でのみサポートされています。 Hologres コンソールのインスタンス詳細ページで、Hologres インスタンスのバージョンを確認できます。 Hologres インスタンスのバージョンが V0.10 より前の場合、Hologres コンソールで Hologres インスタンスを手動でアップグレードするか、Hologres DingTalk グループに参加してインスタンスのアップグレードを申請してください。 Hologres インスタンスを手動でアップグレードする方法の詳細については、「インスタンスのアップグレード」をご参照ください。 Hologres DingTalk グループへの参加方法の詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
既存の列指向テーブルのデータストレージ形式は segment ですが、行指向テーブルのデータストレージ形式は sst です。 V0.10 以降の Hologres インスタンスで新しく作成された列指向テーブルの場合、データストレージ形式は AliORC に更新されます。フィールド値 orc は AliORC 形式を示します。 Hologres V0.10 以降では、既存の列指向テーブルのデータストレージ形式を更新できますが、次の制限が課せられます。
Hologres V0.10 以降では、一度に 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
V0.10 より前のバージョンの Hologres インスタンスにおける列指向テーブルのデフォルトのデータストレージ形式。
sst
行指向テーブルのデフォルトのデータストレージ形式。
orc
V0.10 以降の Hologres インスタンスにおける列指向テーブルのデフォルトのデータストレージ形式。 property_value フィールドの値が orc の場合、テーブルのデータストレージ形式は AliORC です。
データストレージ形式の更新
Hologres インスタンスを V0.10 にアップグレードした後、インスタンスで新しく作成された列指向テーブルはデフォルトで AliORC 形式を採用します。ただし、既存の列指向テーブルのデータストレージ形式を更新するには、次のステートメントを実行する必要があります。
call set_table_property ('table_name', 'storage_format', 'orc');table_name パラメーターをテーブルの名前に置き換えます。たとえば、part という名前のテーブルを指定できます。次のステートメントを実行した後、part テーブルのデータストレージ形式は AliORC に更新されます。
call set_table_property ('public.part', 'storage_format', 'orc');列指向テーブルの segment 形式を AliORC 形式にバッチ変換する
Hologres V1.3 以降では、テーブルの作成時に列指向テーブルのストレージ形式を segment に設定することはできません。できるだけ早く AliORC に変換することをお勧めします。列指向テーブルの形式変換には、次のシナリオが関係します。
新しく作成された列指向テーブル
Hologres V1.3.29 以降では、新しく作成された列指向テーブルの形式が segment として指定されている場合、Hologres はテーブルの segment 形式を自動的に AliORC 形式に変換します。したがって、segment 形式でテーブルを作成するステートメントを実行すると、次のメッセージが返されます。
NOTICE:storage format 'segment' is no longer supported,converted to 'orc'segment 形式の既存の列指向テーブル
segment 形式の既存の列指向テーブルの場合、次の手順を実行して、テーブルの segment 形式を AliORC 形式にバッチ変換できます。
現在のデータベースで segment 形式の既存の列指向テーブルをクエリします。
説明クエリ結果が空の場合、現在のデータベースの列指向テーブルは形式変換を必要としないか、形式変換が必要な列指向テーブルがバックエンドで処理されています。
select * from hologres.hg_table_properties where property_key = 'storage_format' and property_value like '%segment%';既存の列指向テーブルの segment 形式を AliORC 形式にバッチ変換します。
Hologres V1.3.35 以降では、次のステートメントを実行して、既存のテーブルの segment 形式を AliORC 形式にバッチ変換できます。
call hg_convert_segment_orc([<BATCH_SIZE>]);BATCH_SIZEパラメーターはオプションです。このパラメーターは、データストレージ形式が同時に変換されるテーブルの数を指定します。このパラメーターの値は空のままにすることができ、デフォルト値は 100 です。ステートメントの説明:
call hg_convert_segment_orc ステートメントは非同期で実行されます。したがって、このステートメントを実行した後、成功メッセージが返されますが、形式はバックエンドで変換されています。形式変換は CPU とメモリリソースを消費し、オンラインビジネスに影響を与えます。したがって、オフピーク時に形式変換を実行することをお勧めします。形式変換には数分から数時間かかります。 Hologres コンソールで CPU 使用率とメモリ使用量メトリックを確認できます。メトリックの値が減少した場合、形式変換プロセスは完了です。
クエリ結果が空の場合、現在のデータベースのテーブルは形式変換を必要としないか、形式変換が必要なテーブルがバックエンドで処理されています。
continue to call hg_convert_segment_orc() if you want to convert all tables in current databaseメッセージに類似したメッセージが返された場合、一部のテーブルは形式変換を必要とします。この場合、クエリ結果が空になるまで、クラスターの負荷に基づいてステートメントを実行し続け、列指向テーブルの segment 形式を変換できます。