このトピックでは、詳細なオーディエンスセグメンテーション関数である bit_construct と bit_match の構文について説明します。
背景情報
オーディエンスセグメンテーションのシナリオでは、多くの場合、明細テーブルに基づいてユーザーをセグメント化する必要があります。例えば、あるユーザーが複数のレコードを持ち、各レコードが異なる条件を満たす場合があります。詳細なオーディエンスセグメンテーションでは、通常、特定の条件の組み合わせを満たすユーザーを特定します。
次の表は明細テーブルの例です。ショッピングカートをクリックとお気に入りページを表示の両方の動作を実行したユーザーを検索する必要があります。この例では、ユーザー A が条件を満たしています。
|
ユーザー |
操作 |
ページ |
A |
クリック |
shopping cart |
B |
クリック |
home page |
A |
表示 |
favorites page |
B |
クリック |
shopping cart |
A |
クリック |
favorites page |
従来のクエリメソッドでは、結果を取得するために複数回の条件付きフィルタリングと JOIN 文が必要になります。このアプローチでは、複雑な SQL を記述する必要があり、複数の JOIN 操作により多くのリソースを消費します。Hologres V0.10 以降では、詳細なオーディエンスセグメンテーションシナリオ向けに bit_construct および bit_match 関数が利用可能です。1 回のフィルタリングと関数計算でターゲットオーディエンスを取得できるため、開発が簡素化され、迅速に結果を得ることができます。
制限事項
Hologres で詳細なオーディエンスセグメンテーション関数を使用する場合、次の制限事項が適用されます。
-
これらの関数は、Hologres V0.10 以降でのみサポートされています。現在のインスタンスのバージョンは Hologres コンソールで確認してください。インスタンスのバージョンが V0.10 より前の場合は、アップグレード準備の失敗を引き起こす一般的なエラーをご参照いただくか、Hologres DingTalk グループでフィードバックをお寄せください。詳細については、「オンラインサポートの利用方法」をご参照ください。
-
詳細なオーディエンスセグメンテーション関数を使用する前に、次の文を実行して拡張機能を有効にする必要があります。拡張機能は DB レベルの機能です。この文はデータベースごとに 1 回だけ実行すれば十分です。新しいデータベースを作成した場合は、再度この文を実行する必要があります。
--拡張機能を作成します。 CREATE EXTENSION flow_analysis;説明拡張機能をアンインストールするには、次のコマンドを実行します。
DROP EXTENSION flow_analysis;
bit_construct
Hologres V0.10 以降では、詳細なオーディエンスセグメンテーションシナリオ向けに bit_construct 関数が提供されています。
-
関数の説明
bit_construct は、指定されたフィルター条件に基づいて、最大 32 ビットのビットマップを整数として返します。
-
構文例
bit_construct( a , b , ...., a6 ) -
Parameter Description
-
パラメーター a、b などはフィルター条件を表します。これらは bool 型です。最大 32 個の条件がサポートされています。有効なパラメーター名は a から z、および a1 から a6 の範囲です。
-
この関数は int 型の値を返します。
-
bit_match
Hologres V0.10 以降では、詳細なオーディエンスセグメンテーションシナリオ向けに bit_match 関数が提供されています。
-
関数の説明
bit_match は、bit_construct によってフィルターされた結果に対して、さらに計算を実行します。
-
構文例
bit_match('expression', bitmask) -
Parameter Description
パラメーター
説明
例
expression
bit_construct 関数内の条件式です。
&(AND)、|(OR)、!(NOT)、および^(XOR) をサポートしています。a&b
bitmask
bit_construct によって作成されたビットマップの名前。
なし
使用例
次の例は、詳細なオーディエンスセグメンテーション関数を使用するための完全な構文を示しています。
-
拡張機能を有効にします。
スーパーユーザーがデータベースで次の文を実行して、拡張機能を有効にします。
CREATE EXTENSION flow_analysis; -
テーブルとデータを準備します。
次のコードは、ユーザーのショッピング行動を記録する明細テーブルを作成します。このテーブルには、ユーザー ID (uid) とショッピングパスに沿った行動が含まれます。サンプルデータもテーブルに挿入されます。
create table ods_app_dwd( event_time timestamptz, uid bigint, action text, page text, product_code text, from_days int ); insert into ods_app_dwd values('2021-04-03 10:01:30', 274649163, 'click', 'shopping cart', 'MDS', 1); insert into ods_app_dwd values('2021-04-03 10:04:30', 274649163, 'view', 'favorites page', 'MDS', 4); insert into ods_app_dwd values('2021-04-03 10:06:30', 274649165, 'click', 'shopping cart', 'MMS', 8); insert into ods_app_dwd values('2021-04-03 10:09:30', 274649165, 'view', 'shopping cart', 'MDS', 10); -
データをクエリします。
指定された時間範囲内に、商品をショッピングカートに追加し、かつお気に入りページにも追加したユーザーをクエリします。
次のいずれかのメソッドを使用してデータをクエリできます。
-
WHERE 句を使用してデータをクエリします。
説明クエリ文の WHERE 句でフィルターされるデータレコードが少ないほど、クエリパフォーマンスは向上します。
WITH tbl as ( SELECT uid, bit_or(bit_construct( a := (action='click' and page='shopping cart'), b := (action='view' and page='favorites page'))) as uid_mask FROM ods_app_dwd WHERE event_time > '2021-04-03 10:00:00' AND event_time < '2021-04-04 10:00:00' GROUP BY uid ) SELECT uid from tbl where bit_match('a&b', uid_mask);以下に SQL 文を説明します。
-
bit_construct:条件 a は商品をショッピングカートに追加したユーザーをフィルターします。条件 b は商品をお気に入りページに追加したユーザーをフィルターします。
-
bit_or:フィルターされた条件 a と b に対して論理 OR 演算を実行します。この例では、ユーザーのいずれかのレコードが条件を満たした場合、そのユーザーはその条件を満たしていると見なされます。
-
bit_match:a&b は、条件 a と条件 b の両方を満たすユーザーの積集合を返します。
-
-
HAVING 句を使用してデータをクエリします。
SELECT uid FROM ( SELECT uid, bit_or(bit_construct( a := (action='click' AND page='shopping cart'), b := (action='view' AND page='favorites page'))) as uid_mask FROM ods_app_dwd WHERE event_time > '2021-04-03 10:00:00' AND event_time < '2021-04-04 10:00:00' GROUP BY uid HAVING bit_match('a&b', bit_or(bit_construct( a := (action='click' and page='shopping cart'), b := (action='view' and page='favorites page')))) ) t
-