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:
Hologres V0.10 veya daha yeni bir sürüm. Mevcut sürümünüzü Hologres konsolunda kontrol edin. Sürümünüz V0.10'dan önceyse bkz. Yükseltme hazırlığının başarısız olmasına neden olan yaygın hatalar veya Hologres DingTalk grubuyla iletişime geçin. Daha fazla bilgi için bkz. Daha fazla çevrimiçi destek nasıl alınır?
Hedef veritabanında etkinleştirilmiş
flow_analysisuzantısı (bkz. Uzantıyı etkinleştirme)
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—akoşulu alışveriş sepetine tıklayan kullanıcıları;bkoş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 hemahem debkoş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