このトピックでは、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_flowDWS
${bu}_dws.データドメイン_統計粒度略語_ビジネスプロセス_[{カスタムルート}]_統計期間taobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtrDIM
${bu}_dim.{ディメンション}[_{カスタムルート}]taobao_cdm.dim_itmADS
${bu}_ads.ビジネスドメイン_ディメンション_[{カスタムルート}]_更新頻度説明更新頻度変数の有効な値:
d: 毎日の更新
r: リアルタイム更新
h: 準リアルタイム更新
taobao_ads.trd_cate_dテーブルグループ
複数のテーブルグループが必要な場合は、
${bu}_{レイヤー}_{ビジネス}_tgの形式でテーブルグループに名前を付けることができます。ビュー
ビューには、次の形式で名前を付けることができます。
形式
DWS:
${bu}_dws.データドメイン_統計粒度略語_ビジネスプロセス_[{カスタムルート}]_統計期間_vADS:
${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_columns、segment_key、cluster_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=232442843int8item_id
商品に関するフィールド。
item_id=63283278784383int8member_id
会員 ID フィールド。
member_id=b2b-dsajk2343821bTEXT
*amt*
金額に関するフィールド。
pay_ord_amt_1d_001=923.23NUMERIC
*fee*
コストに関するフィールド。
post_fee=923.23NUMERIC
*cnt*
数量に関するフィールド。
pay_ord_byr_cnt_1d_001=923int4/int8is_*
ブールフィールド。
is_pm=Y/is_pm=trueTEXT/BOOL
ds
パーティションフィールド。
ds=20210120YYYYMMDD
データ型
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 メソッドを使用して履歴パーティションを管理し、メトリックの急激な変化を回避します。