Topik ini menjelaskan cara menggunakan fungsi bit_construct dan bit_match untuk identifikasi pengguna yang dimaksud.
Informasi latar belakang
Dalam skenario identifikasi pengguna yang dimaksud, Anda perlu mengidentifikasi pengguna tertentu dari tabel. Sebagai contoh, sebuah tabel berisi beberapa catatan dari satu pengguna, dan setiap catatan memenuhi kondisi yang berbeda. Untuk mengidentifikasi pengguna yang dimaksud, Anda perlu menanyakan pengguna yang memenuhi kombinasi kondisi tertentu.
Sebagai contoh, tanyakan pengguna yang telah mengklik keranjang belanja dan telah melihat favorit dari tabel sampel berikut. Dalam contoh ini, Pengguna A memenuhi kondisi kueri.
Pengguna | Aksi | Halaman |
A | klik | Keranjang belanja |
B | klik | Beranda |
A | lihat | Favorit |
B | klik | Keranjang belanja |
A | klik | Favorit |
Secara tradisional, Anda perlu menentukan kondisi untuk menanyakan data beberapa kali dan menggunakan pernyataan JOIN untuk mendapatkan hasil yang memenuhi kondisi. Metode ini membutuhkan Pernyataan SQL yang kompleks. Selain itu, beberapa pernyataan JOIN mengonsumsi banyak sumber daya. Di Hologres V0.10 dan versi lebih baru, Hologres menyediakan fungsi bit_construct dan bit_match untuk identifikasi pengguna yang dimaksud. Anda hanya perlu menentukan kondisi untuk menanyakan data sekali dan menggunakan fungsi-fungsi tersebut untuk mendapatkan hasil yang memenuhi kondisi. Ini menyederhanakan pengembangan data dalam skenario identifikasi pengguna yang dimaksud dan membantu Anda mendapatkan hasil dengan mudah.
Batasan
Saat menggunakan fungsi identifikasi pengguna yang dimaksud di Hologres, perhatikan batasan berikut:
Hanya Hologres V0.10 dan versi lebih baru yang memungkinkan Anda menggunakan fungsi identifikasi pengguna yang dimaksud. Anda dapat melihat versi instance Hologres Anda di konsol Hologres. Jika versi instance Hologres Anda lebih awal dari V0.10, tingkatkan instance Hologres Anda secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres secara manual, lihat Peningkatan Instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.
Sebelum menggunakan fungsi-fungsi tersebut, Anda harus mengeksekusi pernyataan berikut untuk menginstal ekstensi sebagai superuser. Ekstensi diinstal pada tingkat database. Untuk setiap database, Anda hanya perlu menginstal ekstensi sekali. Jika Anda membuat database baru, Anda harus mengeksekusi pernyataan lagi.
-- Instal ekstensi. CREATE EXTENSION flow_analysis;CatatanUntuk menghapus ekstensi, eksekusi pernyataan berikut:
DROP EXTENSION flow_analysis;
bit_construct
Di Hologres V0.10 dan versi lebih baru, Hologres menyediakan fungsi bit_construct untuk identifikasi pengguna yang dimaksud.
Function description
Fungsi bit_construct mengembalikan bitmap bertipe INTEGER berdasarkan kondisi filter yang ditentukan. Nilai yang dikembalikan bisa memiliki panjang hingga 32 bit.
Syntax
bit_construct( a , b , ...., a6 )Parameters
Parameter seperti a dan b menentukan kondisi filter yang nilai kembaliannya bertipe BOOLEAN. Maksimal 32 kondisi didukung. Nilai valid: a hingga z dan a1 hingga a6.
Fungsi ini mengembalikan nilai bertipe INT.
bit_match
Di Hologres V0.10 dan versi lebih baru, Hologres menyediakan fungsi bit_match untuk identifikasi pengguna yang dimaksud.
Function description
Fungsi bit_match digunakan untuk menghitung lebih lanjut keluaran fungsi bit_construct.
Syntax
bit_match('ekspresi', bitmask)Parameters
Parameter
Deskripsi
Contoh
ekspresi
Ekspresi kondisional dalam fungsi bit_construct. Ekspresi dapat berisi operator dan karakter berikut: AND (
&), OR (|), NOT (!), dan XOR (^).a&b
bitmask
Nama bitmap yang dibangun oleh fungsi bit_construct.
Tidak tersedia
Contoh
Kode sampel berikut memberikan contoh tentang cara menggunakan fungsi identifikasi pengguna yang dimaksud:
Instal ekstensi.
Eksekusi pernyataan berikut untuk menginstal ekstensi di database sebagai superuser:
CREATE EXTENSION flow_analysis;Siapkan tabel dan data.
Buat tabel yang mencatat ID pengguna dan acara dalam proses belanja online pengguna. Kemudian, masukkan data ke dalam tabel. Gunakan pernyataan sampel berikut:
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', '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);Tanyakan data.
Tanyakan pengguna yang menambahkan produk ke keranjang belanja dan ke favorit dalam periode waktu tertentu.
Anda dapat menanyakan data dengan salah satu metode berikut:
Gunakan klausa WHERE.
CatatanSemakin sedikit data yang diperoleh menggunakan klausa WHERE, semakin baik performa kuerinya.
WITH tbl as ( SELECT uid, bit_or(bit_construct( a := (action='click' and page='Shopping cart'), b := (action='view' and page='Favorites'))) 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);Fungsi dalam pernyataan SQL:
bit_construct: menggunakan acara Klik keranjang belanja sebagai Kondisi a dan acara Lihat favorit sebagai Kondisi b untuk menanyakan pengguna yang memenuhi kondisi filter.
bit_or: melakukan operasi bitwise OR pada pengguna yang memenuhi Kondisi a dan pengguna yang memenuhi Kondisi b. Dalam contoh ini, jika catatan pengguna memenuhi Kondisi a atau b, pengguna tersebut memenuhi kondisi filter.
bit_match: menggunakan ekspresi a&b untuk menanyakan pengguna yang memenuhi Kondisi a dan Kondisi b.
Gunakan klausa HAVING.
SELECT uid FROM ( SELECT uid, bit_or(bit_construct( a := (action='click' AND page='Shopping cart'), b := (action='view' AND page='Favorites'))) 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')))) ) t