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

Hologres:詳細なオーディエンスセグメンテーション関数

最終更新日:Feb 04, 2026

このトピックでは、詳細なオーディエンスセグメンテーション関数である 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 によって作成されたビットマップの名前。

    なし

使用例

次の例は、詳細なオーディエンスセグメンテーション関数を使用するための完全な構文を示しています。

  1. 拡張機能を有効にします。

    スーパーユーザーがデータベースで次の文を実行して、拡張機能を有効にします。

    CREATE EXTENSION flow_analysis;
  2. テーブルとデータを準備します。

    次のコードは、ユーザーのショッピング行動を記録する明細テーブルを作成します。このテーブルには、ユーザー 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);
  3. データをクエリします。

    指定された時間範囲内に、商品をショッピングカートに追加し、かつお気に入りページにも追加したユーザーをクエリします。

    次のいずれかのメソッドを使用してデータをクエリできます。

    • 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