すべてのプロダクト
Search
ドキュメントセンター

Hologres:既存の列指向テーブルのデータストレージ形式の更新

最終更新日:Jan 11, 2025

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 形式にバッチ変換できます。

    1. 現在のデータベースで segment 形式の既存の列指向テーブルをクエリします。

      説明

      クエリ結果が空の場合、現在のデータベースの列指向テーブルは形式変換を必要としないか、形式変換が必要な列指向テーブルがバックエンドで処理されています。

      select * from hologres.hg_table_properties
      where property_key = 'storage_format' and property_value like '%segment%';
    2. 既存の列指向テーブルの 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 形式を変換できます。