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

Hologres:Hologres を使用した開発のベストプラクティス

最終更新日:Mar 13, 2026

このトピックでは、Hologres の開発標準について説明します。これらの標準に従うことで、開発要件を理解し、操作エラーを防ぐことができます。

データドメイン標準

  • データウェアハウス階層

    データウェアハウスは通常、階層的に構築されます。主な階層は以下の通りです。共通データモデル (CDM) 階層には、データウェアハウス詳細 (DWD)、データウェアハウスサマリー (DWS)、およびディメンション (DIM) 階層が含まれます。Hologres では、スキーマを使用して異なる階層を分離できます。

    • オペレーショナルデータストア (ODS):オペレーショナルデータ層。

    • 共通データモデル (CDM):パブリックディメンションモデル層。

      • データウェアハウス詳細 (DWD):詳細データ層。

      • DWS (データウェアハウスサマリー):データウェアハウスサマリー。

      • ディメンション (DIM):ディメンションデータ層。

    • アプリケーションデータサービス (ADS):アプリケーションデータ層。

    ビジネスの複雑さに応じて、適切な粒度を選択できます。たとえば、企業に複数の業務部門 (BU) がある場合、BU の略語をスキーマのプレフィックスとして使用できます。

    create schema ${bu}_ads;
    create schema ${bu}_ads_dev;
    create schema ${bu}_dwd;
    create schema ${bu}_dwd_dev;
    create schema ${bu}_dws;
    create schema ${bu}_dws_dev;
    create schema ${bu}_dim;
    create schema ${bu}_dim_dev;
    create schema ${bu}_ods;
    create schema ${bu}_ods_dev;
  • データドメインの略語

    異なるデータドメインの共有コードを定義して、全社的な標準を確立します。以下の表にいくつかの例を示します。

    データドメイン名

    データドメインの略語:例

    トランザクションドメイン

    trd

    アイテムドメイン

    itm

    ログドメイン

    log

    メンバーおよびストアドメイン

    mbr

    供給、販売、在庫管理ドメイン

    dst

    販売および顧客サービスドメイン

    crm

    クレジットおよびリスク管理ドメイン

    rsk

    ツールおよびサービスドメイン

    tls

    物流および速達ドメイン

    lgt

命名規則

  • ジョブの命名規則

    命名規則は、内部タスクと同期タスクで異なります。規則は以下の通りです。

    • 内部 SQL タスク (非同期タスク):holo_{target_table_name}。このフォーマットは、外部テーブルタスクと区別するためのものです。

    • Hologres へのデータインポート:{source}2holo_{target_table_name}

    • Hologres からのデータエクスポート:holo2{target}_{target_table_name}

  • テーブルの命名規則

    階層名

    この階層のテーブルの命名規則

    DWD

    ${bu}_dwd.data_domain_business_process_[custom_root]_suffix

    taobao_dwd.trd_ord_flow

    DWS

    ${bu}_dws.data_domain_data_granularity_abbreviation_business_process_[{custom_root}]_statistical_period

    taobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtr

    DIM

    ${bu}_dim.{dimension_definition}[_{custom_root}]

    taobao_cdm.dim_itm

    ADS

    ${bu}_ads.business_domain_dimension_[{custom_root}]_{refresh_period_identifier}

    説明

    リフレッシュ期間の識別子は以下の通りです。

    • d:毎日リフレッシュされます。

    • r:リアルタイムでリフレッシュされます。

    • h:ほぼリアルタイムでリフレッシュされます。

    taobao_ads.trd_cate_d

  • テーブルグループの命名規則

    ビジネスで複数のテーブルグループが必要な場合は、次の形式で名前を付けます:${bu}_{data_warehouse_layer_name}_{business_definition}_tg

  • ビューの命名規則

    次のセクションでは、永続ビューの命名規則と例を示します。

    • 規則

      • DWS:${bu}_dws.data_domain_data_granularity_abbreviation_business_process_[{custom_root}]_statistical_period_v

      • ADS:${bu}_ads.business_domain_dimension_[{custom_root}]_{refresh_period_identifier}_v

    • taobao_dws.trd_byr_itm_ord_cm_v
  • 外部テーブルの命名規則

    元の MaxCompute テーブル名に ext サフィックスを追加します。次のコードに例を示します。

    taobao_dim.camp_ext
  • 一時テーブルの命名規則

    元のテーブル名に tmp プレフィックスと数字のサフィックスを追加します。次のコードに例を示します。

    taobao_dim.tmp_camp_01
  • 一般的な略語

    統計期間

    略語

    最終日

    1d

    最近

    nd

    累計

    td

    暦週

    cw

    暦月

    cm

    当日までの累計

    dtr

    現在時刻までの累計

    dhr

テーブル開発標準

  • 内部テーブルの標準

    テーブルを作成する前に、データモデル標準に従ってテーブルとそのフィールドの名前を決定します。また、要件に基づいてテーブルのライフサイクルを確認し、テーブルとそのフィールドに完全なコメントを追加する必要があります。関連する標準は以下の通りです。

    • 厳格な標準 (これらの標準が満たされていない場合、公開は許可されません):

      • 出力テーブルとそのフィールドにはコメントを含める必要があります。この規則は、プラットフォーム上のすべてのデータ開発シナリオに適用されます。テーブルのコメントは簡潔で明確でなければなりません。

      • テーブル作成ステートメントでは、テーブルのライフサイクル (time_to_live_in_seconds) を指定する必要があります。

      • テーブル作成ステートメントでは、分散キー (distribute_key) を指定する必要があります。分散キーを選択するための原則は以下の通りです。

        十分に分散され、JOIN または GROUP BY 操作で最も頻繁に使用されるフィールドを選択します。たとえば、購入者-アイテムテーブルの場合、user_iditem_id を分散キーとして設定できます。ただし、user_id が結合で最も頻繁に使用されるキーである場合は、分散キーを user_iditem_id の両方ではなく、user_id のみに設定します。

      • クエリで結合されるテーブルは、同じテーブルグループに作成する必要があります。

      • すべてのファクトテーブルとディメンションテーブルで、同じエンティティ ID に同じ名前とデータ型を使用します。たとえば、トランザクションテーブルのユーザー ID が user_id の場合、ディメンションテーブルでも uid ではなく user_id でなければなりません。データ型の変換を減らすために、データ型の一貫性を保ちます。

      • デフォルトでは、すべての物理テーブルのパーティションフィールドとして ds を使用します。

    • 推奨標準:

      • テーブル作成ステートメントでは、bitmap_columnssegment_key、または cluster_key のうち、少なくとも 1 つのプロパティを指定する必要があります。

      • フィールドのカーディナリティが不明な場合は、dictionary_encoding_columns (辞書インデックス) テーブルプロパティを設定しないでください。次のステートメントを実行して、プロパティを空に設定できます。

        call set_table_property('table_name', 'dictionary_encoding_columns','')
      • orientation (データストレージフォーマット) テーブルプロパティには、column フォーマットを推奨します。このプロパティを row に設定することもできます。

        説明

        テーブルに対するすべてのクエリで、常にすべての primary key 列を equals または in 演算子を使用して指定できることを確認できない限り、row フォーマットを使用しないでください。このプロパティが設定されていない場合、デフォルトで column ストレージフォーマットが使用されます。

      • bitmap_columns (ビットエンコーディング) テーブルプロパティは、bitmap を有効にして、ストレージファイル内のデータを迅速にフィルタリングします。

        • bitmap_columnsfilter 条件で使用されるフィールドに設定します。デフォルトでは、すべての TEXT フィールドが含まれます。

        • user_id のようなカーディナリティの高いフィールドを bitmap_columns として設定しないでください。アクティビティ ID などのメトリックを bitmap_columns として設定することを推奨します。

      • event_time_column テーブルプロパティは、イベントタイムスタンプなど、リアルタイム書き込みに関連するフィールドに使用する必要があります。

      • clustering_key (クラスターインデックス) テーブルプロパティは、指定されたクラスターインデックスに基づいてデータをソートします。クラスターインデックスを作成すると、インデックス列に対する range および filter クエリを高速化できます。クラスターインデックスは 1 つだけ設定できます。このプロパティは、GMV をバケット化する場合など、範囲フィルタリングに適しています。

  • MaxCompute 外部テーブルの標準

    Hologres は、外部テーブルを介して MaxCompute のクエリを高速化し、データ同期プロセスを簡素化できます。コンピューティングパフォーマンスを向上させるために、必要でない限り、内部テーブルと外部テーブルを結合しないでください。外部テーブルをより適切に管理および保守するには、これらの標準に従う必要があります。

    • 厳格な標準:元の MaxCompute テーブル名に ext サフィックスを追加して、外部テーブルの命名規則に厳密に従う必要があります。

    • 推奨標準:

      • テーブルスキーマの DDL を保持し、バージョン管理下に置きます。

      • 内部テーブルと外部テーブルを結合しないでください。代わりに、外部テーブルから内部テーブルにデータを同期します。

  • 標準を表示

    • 厳格な標準:ビューの命名規則に厳密に従う必要があります。

    • 推奨標準:

      • タスクスケジューリングを有効にして、後続の開発ジョブの依存関係チェーンの整合性を確保します。

      • 複雑なリクエストによる過剰な計算を避けるために、異なる粒度に対して個別のビューを作成します。

        たとえば、cw、cm、nd、および 1d に対して 4 つの個別のビューを作成できます。異なるクライアントがある場合は、pc、wap、および app のビューを作成できます。異なる収集方法を使用する場合は、ut と非 ut に分けることができます。

  • ライフサイクル (内部テーブルのみ) の標準

    データウェアハウス階層

    対応するライフサイクルルールの説明

    DWD

    日次増分の詳細については、推奨される保持期間は 2 年以内です。

    DWS

    日次増分の詳細については、推奨される保持期間は 2 年以内です。

    DIM

    大規模なディメンションテーブルについては、極端なストレージモデリングの後、永久保持を推奨します。小規模なディメンションテーブルについては、ライフサイクルを MaxCompute テーブルと一致させます。

    大規模と小規模のディメンションテーブルを区別する基準:単一のパーティションが 1 TB を超えることはできません。

    推奨標準:

    パーティションテーブルの場合、リアルタイムタスクデータを当日のパーティションに書き込みます。データウェアハウス階層に基づいて適切な TTL を設定します。TTL を既に超えているパーティションに更新された履歴データを書き込まないでください。

  • テーブルグループの標準 (オプション)

    各データベースには、デフォルトのテーブルグループとシャード数があります。ビジネスニーズに基づいて新しいテーブルグループを作成したり、シャード数を変更したりして、より良いパフォーマンスを実現できます。推奨される標準は以下の通りです。

    • 必要でない限り、新しいテーブルグループを作成しないでください。

    • データ量が大きいテーブルの場合は、シャード数を増やした別のテーブルグループを作成できます。

    • データ量が少ないテーブルが多い場合は、シャード数を減らしたテーブルグループを作成できます。

    • クエリで結合する必要があるテーブルは、同じテーブルグループに配置する必要があります。

フィールド開発標準

  • フィールドタイプの標準

    フィールドタイプは、次の要件に厳密に従って作成する必要があります。

    フィールド/フィールドサフィックス

    フィールドコメント

    略語

    user_id

    自動インクリメントメンバー ID

    user_id=232442843

    int8

    item_id

    アイテム ID

    item_id=63283278784383

    int8

    member_id

    登録メンバー ID

    member_id=b2b-dsajk2343821b

    TEXT

    *amt*

    金額タイプ

    pay_ord_amt_1d_001=923.23

    NUMERIC

    *fee*

    料金タイプ

    post_fee=923.23

    NUMERIC

    *cnt*

    数量タイプ

    pay_ord_byr_cnt_1d_001=923

    int4/int8

    is_*

    ブール値タイプ

    is_pm=Y/is_pm=true

    TEXT/BOOL

    ds

    パーティション

    ds=20210120

    YYYYMMDD

  • 基本データ型のリファレンス

    Hologres のデータ型は PostgreSQL のデータ型と互換性がありますが、Hologres はその一部のみをサポートしています。フィールドタイプと MaxCompute とのマッピングの詳細については、「データ型サマリー」をご参照ください。

  • 通貨単位と精度

    通貨単位は USD です。モデルで特に指定されていない限り、金額関連のデータを丸めないでください。この方法は、異なる統計方法を使用する集計計算での不整合を防ぎます。

SQL 標準

  • 厳格な標準:

    • SQL ステートメントの最外層およびサブクエリ内では、計算を必要としないフィールドに対して select * を使用しないでください。すべての操作で列名を明示的に指定する必要があります。

    • WHERE 句では、Coalesce 関数を使用して null フィールドと空の文字列を処理する必要があります。

  • 推奨標準:

    • 頻繁に使用する count distinct フィールドを distribution_key として使用します。複数の count distinct 操作の組み合わせについては、ステートメントを手動で書き換える必要があります。

      select count(distinct userid)
           , count(distinct case when stat_date = '20201111' then userid end) 
      from t group by cate_id;
      
      --次のように書き換えます
      select count(1), sum(c) from 
      (
        select userid
             , cate_id
             , cast(count(case when stat_date = '20201111' then 1 end) > 0) as c 
        from t 
        group by cate_id, userid
      ) t1 
      group by cate_id;
    • オフラインスケジューリングタスクの場合、パーティションテーブルに対して analyze table 操作を実行します。

    • 長期的な使用シナリオでは、ATTACH/DETACH 操作を使用して履歴パーティションに対するバッチ操作を行い、データメトリックの急激な変動を回避します。