Tüm Ürünler
Search
Belge Merkezi

Hologres:bit_construct ve bit_match

Son Güncelleme:Oct 06, 2026

bit_construct ve bit_match, birden çok JOIN işlemine gerek kalmadan bir detay tablosundan belirli koşul kombinasyonlarını karşılayan kullanıcıları belirleyen hedef kitle segmentasyonu işlevleridir.

Arka Plan

Hedef kitle segmentasyonunda tek bir kullanıcı genellikle farklı koşulları karşılayan birden fazla kayda sahiptir. Örneğin hem ürünü alışveriş sepetine ekleyen hem de favorilere kaydeden kullanıcılar gibi belirli bir koşul kombinasyonunu karşılayan kullanıcıların bulunması, geleneksel olarak birden çok kez koşullu filtreleme ve JOIN ifadeleri gerektirir. Bu durum karmaşık SQL sorgularına ve yüksek kaynak tüketimine yol açar.

Hologres V0.10 ve sonraki sürümlerde sunulan bit_construct ve bit_match işlevleri, bu çoklu JOIN desenini tek bir toplama adımıyla değiştirir.

Aşağıdaki detay tablosu sorunu göstermektedir. A kullanıcısı hem click shopping cart hem de view favorites page koşullarını karşılarken B kullanıcısı karşılamamaktadır.

user action page
A click shopping cart
B click home page
A view favorites page
B click shopping cart
A click favorites page

Ön Koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

Uzantıyı etkinleştirme

flow_analysis uzantısı veritabanı kapsamındadır. Her veritabanı için bu ifadeyi bir kez çalıştırın. Yeni bir veritabanı oluşturursanız ifadeyi tekrar çalıştırın.

CREATE EXTENSION flow_analysis;

Uzantıyı kaldırmak için:

DROP EXTENSION flow_analysis;
Bu ifadeleri bir süper kullanıcı çalıştırmalıdır.

bit_construct

Hologres V0.10 ve sonraki sürümlerde kullanılabilir.

Satır başına en fazla 32 boolean filtre koşulunu değerlendirir ve sonuçları 32 bitlik bir tamsayı bit eşlemi olarak kodlar.

Sözdizimi

bit_construct(
  a  := <bool_expr>,
  b  := <bool_expr>,
  ...,
  a6 := <bool_expr>
)

Parametreler

Parametre Tür Açıklama
a, b, ... z, a1–a6 bool Filtre koşulları. En fazla 32 koşul desteklenir. Geçerli adlar a ile z arasında ve a1 ile a6 arasındadır.

Dönüş değeri

int — karşılanan koşulları temsil eden bir bit eşlemi.

bit_match

Hologres V0.10 ve sonraki sürümlerde kullanılabilir.

Bir kullanıcının gerekli koşul kombinasyonunu karşılayıp karşılamadığını belirlemek için bit_construct tarafından üretilen bir bit eşlemine karşı mantıksal bir ifadeyi değerlendirir.

Sözdizimi

bit_match('expression', bitmask)

Parametreler

Parametre Tür Açıklama Örnek
expression text bit_construct içinde tanımlanan koşul etiketleri üzerinde mantıksal bir ifade. & (AND), | (OR), ! (NOT) ve ^ (XOR) operatörlerini destekler. 'a&b'
bitmask int bit_construct tarafından döndürülen veya bit_or ile toplanan bit eşlemi. —

Kullanım örneği

Aşağıdaki uçtan uca örnek, hem ürünü alışveriş sepetine ekleyen hem de favorilerine kaydeden kullanıcıları bulur.

Adım 1: Uzantıyı etkinleştirin

CREATE EXTENSION flow_analysis;

Adım 2: Bir tablo oluşturun ve örnek veri ekleyin

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);

Adım 3: Hedef kitleyi sorgulayın

İki sorgu deseni mevcuttur. Her ikisi de her satırın koşullarını etiketlemek için bit_construct, kullanıcı başına toplama yapmak için bit_or ve her iki koşulu da karşılayan kullanıcıları filtrelemek için bit_match kullanır.

bit_or belirli bir kullanıcı için tüm kayıtlar üzerinde mantıksal OR işlemi gerçekleştirir: herhangi bir kayıt a koşulunu karşılıyorsa kullanıcı a koşulunu karşılıyor kabul edilir.

WHERE yan tümcesi kullanma

Toplamadan önce satırları bir WHERE yan tümcesiyle filtreleyin. WHERE yan tümcesinin eşleştiği satır sayısı ne kadar azsa sorgu performansı o kadar iyi olur.

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);
  • bit_construct — a koşulu alışveriş sepetine tıklayan kullanıcıları; b koşulu ise favoriler sayfasını görüntüleyen kullanıcıları yakalar.

  • bit_or — kullanıcı başına tüm kayıtları toplar; kullanıcının kayıtlarından en az biri bir koşulla eşleşiyorsa kullanıcı bu koşulu karşılıyor kabul edilir.

  • bit_match('a&b', ...) — yalnızca hem a hem de b koşullarını karşılayan kullanıcıları döndürür.

HAVING yan tümcesi kullanma

Koşul filtresini doğrudan toplama adımına itmek için bir HAVING yan tümcesi kullanın.

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