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

Hologres:Hologres開発標準

最終更新日:Jan 11, 2025

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

データドメイン

  • データレイヤー

    データウェアハウスは、オペレーショナルデータストア(ODS)、共通データモデル(CDM)、およびアプリケーションデータストア(ADS)レイヤーに分割されます。 CDMレイヤーは、データウェアハウス詳細(DWD)、データウェアハウスサービス(DWS)、およびディメンションデータ(DIM)レイヤーで構成されます。 Hologresでは、レイヤーはスキーマによって区別されます。

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

    • CDM(共通データモデル)

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

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

      • DIM(ディメンション)

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

    企業のデータウェアハウスをさまざまなレベルでレイヤーに分割できます。企業に異なる事業単位がある場合は、事業単位ごとにデータウェアハウスを分割し、事業単位名の略語を対応するスキーマのプレフィックスとして使用して、レイヤーを区別できます。

    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}。これは、内部 SQL ジョブと外部テーブルを含むジョブを区別します。

    • データインポートジョブ: {source}2holo_{target_table_name}

    • データエクスポートジョブ: holo2{target}_{target_table_name}

  • テーブル

    レイヤー

    形式

    DWD

    ${bu}_dwd.データドメイン_ビジネスプロセス_[カスタムルート]_サフィックス

    taobao_dwd.trd_ord_flow

    DWS

    ${bu}_dws.データドメイン_統計粒度略語_ビジネスプロセス_[{カスタムルート}]_統計期間

    taobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtr

    DIM

    ${bu}_dim.{ディメンション}[_{カスタムルート}]

    taobao_cdm.dim_itm

    ADS

    ${bu}_ads.ビジネスドメイン_ディメンション_[{カスタムルート}]_更新頻度

    説明

    更新頻度変数の有効な値:

    • d: 毎日の更新

    • r: リアルタイム更新

    • h: 準リアルタイム更新

    taobao_ads.trd_cate_d

  • テーブルグループ

    複数のテーブルグループが必要な場合は、${bu}_{レイヤー}_{ビジネス}_tg の形式でテーブルグループに名前を付けることができます。

  • ビュー

    ビューには、次の形式で名前を付けることができます。

    • 形式

      • DWS: ${bu}_dws.データドメイン_統計粒度略語_ビジネスプロセス_[{カスタムルート}]_統計期間_v

      • ADS: ${bu}_ads.ビジネスドメイン_ディメンション_[{カスタムルート}]_更新頻度_v

    • taobao_dws.trd_byr_itm_ord_cm_v
  • 外部テーブル

    ソース MaxCompute テーブルの名前に ext を付けたものを外部テーブルの名前として使用することをお勧めします。例:

    taobao_dim.camp_ext
  • 一時テーブル

    元のテーブルの名前にプレフィックスとして tmp を付け、サフィックスとしてシーケンス番号を付けたものを一時テーブルの名前として使用することをお勧めします。例:

    taobao_dim.tmp_camp_01
  • 略語

    統計期間

    略語

    過去1日

    1d

    過去 N 日

    nd

    合計日数

    td

    暦週

    cw

    暦月

    cm

    当日までの累計

    dtr

    現在時刻までの累計

    dhr

テーブル構成標準

  • 内部テーブル

    内部テーブルを作成する場合は、テーブルとそのフィールドの命名規則に準拠する必要があります。さらに、ビジネス要件に基づいてテーブルのライフサイクルを設定し、テーブルとそのフィールドにコメントを追加する必要があります。内部テーブルを構成する際は、次の標準と推奨事項に注意してください。

    • 内部テーブルを正常に作成するために準拠する必要がある標準

      • データの開発と分析を容易にするために、テーブルとそのフィールドに簡潔で正確なコメントを追加します。

      • テーブルの作成に使用するステートメントで、time_to_live_in_seconds プロパティを指定します。このプロパティは、テーブルのライフサイクルを指定するために使用されます。

      • テーブルの作成に使用するステートメントで、distribute_key プロパティを指定します。このプロパティは、配布キーを指定するために使用されます。

        選択した配布キーは、十分なカーディナリティを持ち、JOIN 操作と GROUP BY 操作に最も頻繁に使用される必要があります。たとえば、商品データを格納するテーブルでは、user_id フィールドと item_id フィールドを配布キーとして選択できます。ただし、user_id フィールドがデータの結合に最も頻繁に使用される場合は、user_id フィールドのみを配布キーとして選択する必要があります。

      • 同じテーブルグループ内で結合クエリに関係するテーブルを作成します。

      • すべてのファクトテーブルとディメンションテーブルで、同じエンティティ ID に同じ名前とデータ型を使用します。たとえば、トランザクションテーブルでユーザー ID として user_id を指定した場合は、ディメンションテーブルのユーザー ID として uid ではなく user_id を使用する必要があります。データ型の一貫性を保つことで、データ型の変換が不要になります。

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

    • 推奨事項

      • テーブルの作成に使用するステートメントで、bitmap_columnssegment_keycluster_key プロパティのいずれかを指定します。

      • テーブル内のフィールドのカーディナリティが不明な場合は、dictionary_encoding_columns プロパティを指定しないでください。このプロパティは、辞書マッピングを作成するために使用されます。辞書マッピングをスキップするには、次のステートメントを実行します。

        call set_table_property('table_name', 'dictionary_encoding_columns','')
      • orientation プロパティを column に設定して、テーブルを列指向テーブルとして設定します。 行指向ストレージタイプも Hologres でサポートされています。

        説明

        テーブルのすべての主キー列を、等号または IN 演算子を使用してテーブルに対する各クエリで指定できる場合を除き、テーブルを行指向テーブルとして設定しないでください。デフォルトでは、orientation プロパティが指定されていない場合、列指向ストレージタイプが使用されます。

      • bitmap_columns プロパティを設定します。このプロパティは、Hologres がビットマップインデックスを作成するフィールドを指定するために使用されます。 ビットマップインデックスは、格納されたデータをフィルタリングするために使用できます。

        • フィルタ条件をビットマップインデックスに変換することをお勧めします。デフォルトでは、TEXT タイプのすべてのフィールドに対してビットマップインデックスが作成されます。

        • user_id フィールドなど、値の数が非常に多いフィールドをこのプロパティに指定することはお勧めしません。代わりに、activity_id などのフィールドを指定できます。

      • event_time_column プロパティを、イベントタイムスタンプを格納するフィールドなど、リアルタイムデータ書き込みに使用されるフィールドに設定します。

      • clustering_key プロパティを、Hologres がクラスタ化インデックスを作成するフィールドに設定します。 Hologres は、クラスタ化インデックスに基づいてデータをソートします。クラスタ化インデックスを使用することで、インデックスフィールドに対する RANGE クエリと FILTER クエリを高速化できます。各テーブルでサポートされるクラスタ化インデックスは1つだけです。このプロパティは、範囲でデータをフィルタリングするために使用できます。たとえば、このプロパティは、総商品販売額(GMV)の分布に使用できます。

  • 外部テーブル

    Hologres では、外部テーブルを使用して、ソース MaxCompute テーブルのデータに対するクエリを高速化できます。これにより、データ同期プロセスが簡素化されます。計算パフォーマンスを向上させるために、外部テーブルを内部テーブルに関連付けないことをお勧めします。外部テーブルの管理を改善するために、外部テーブルを構成する際は、次の標準と推奨事項に注意してください。

    • 準拠する必要がある標準: 命名規則に従い、ソース MaxCompute テーブルの名前に ext を付けたものを外部テーブルの名前として使用します。

    • 推奨事項

      • 外部テーブルを作成するために使用される DDL ステートメントを保持し、テーブルのさまざまなバージョンを管理します。

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

  • ビュー

    • 準拠する必要がある標準: 命名規則に従います。

    • 推奨事項

      • タスクをスケジュールして、ビジネスプロセス全体で依存関係を構成します。

      • 計算におけるデータ量を削減するために、異なる粒度でデータを格納するテーブルに対して個別のビューを作成します。

        たとえば、異なる粒度でデータを格納する4つのテーブルに対して、cw(暦週)、cm(暦月)、nd(N 日)、1d(1日)ビューを作成できます。テーブルが異なる端末のデータを格納する場合は、pc、wap、app ビューを作成できます。テーブルが異なるデータ収集方法のデータを格納する場合は、ut ビューと non-ut ビューを作成できます。

  • 内部テーブルのライフサイクル

    レイヤー

    推奨されるライフサイクル

    DWD

    日レベルの増分データを格納するテーブルの場合、ライフサイクルを最大2年に設定することをお勧めします。

    DWS

    日レベルの増分データを格納するテーブルの場合、ライフサイクルを最大2年に設定することをお勧めします。

    DIM

    究極ストレージモードで格納されている大規模なディメンションテーブルの場合、ライフサイクルを永続的に設定することをお勧めします。小規模なディメンションテーブルの場合、ライフサイクルをソース MaxCompute テーブルのライフサイクルに設定することをお勧めします。

    大規模なディメンションテーブルと小規模なディメンションテーブルの違いは、単一パーティションのサイズにあります。テーブル内のパーティションのサイズが 1 TB を超える場合、そのテーブルは大規模なディメンションテーブルと見なされます。

    推奨事項

    パーティションテーブルの場合、リアルタイムデータを同じ日に生成されたパーティションに書き込み、レイヤーに基づいて適切な有効期限(TTL)期間を構成することをお勧めします。更新されたデータを、TTL 期間が指定された TTL 期間を超えているパーティションに書き込まないでください。

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

    各データベースには、デフォルトのテーブルグループとデフォルトのシャード数があります。パフォーマンスを向上させるために、ビジネス要件に基づいてテーブルグループを作成したり、シャード数を変更したりできます。推奨事項:

    • 必要な場合を除き、テーブルグループを作成しないでください。

    • 大量のデータを含むテーブルの場合は、シャード数の多いテーブルグループを作成します。

    • 少量のデータを含む多数のテーブルの場合は、シャード数の少ないテーブルグループを作成します。

    • 結合クエリに関係するテーブルを同じテーブルグループに配置します。

フィールド設定標準

  • フィールドタイプ

    次の表に、準拠する必要があるフィールドタイプの標準を示します。

    フィールド名またはサフィックス

    説明

    タイプまたは形式

    user_id

    自動インクリメントユーザー ID フィールド。

    user_id=232442843

    int8

    item_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 は、PostgreSQL のデータ型の一部をサポートしています。 Hologres データ型と MaxCompute データ型と Hologres データ型のマッピングの詳細については、「データ型」をご参照ください。

  • 通貨と精度

    中国本土内の地域では、通貨単位として CNY を使用します。その他の地域では、通貨単位として USD を使用します。特に明記されていない限り、金額に関連するデータを四捨五入しないでください。これにより、後続の計算結果の不整合を防ぐことができます。

SQL 構文

  • 準拠する必要がある標準:

    • 最も外側のクエリとサブクエリで計算する必要があるフィールドに対してのみ、SELECT * ステートメントを使用します。すべての操作でフィールド名を指定します。

    • WHERE 句の空のフィールドと文字列には、COALESCE 式を使用します。

  • 推奨事項

    • count (distinct) メソッドを使用して配布キーを設定します。 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 ステートメントを実行して、パーティションテーブルを分析します。

    • テーブルが長期間にわたって必要な場合は、detach および attach メソッドを使用して履歴パーティションを管理し、メトリックの急激な変化を回避します。