This topic describes how to use the bit_construct and bit_match functions for target user identification.
Background information
In target user identification scenarios, you need to identify target users from tables. For example, a table contains multiple records of each user and different records meet different conditions. To identify target users, you need to query the users who meet a combination of specific conditions.
clicked the shopping cart
and viewed favorites
from the following sample table. In this example, User A meets the query conditions.
User | Action | Page |
---|---|---|
A | click | Shopping cart |
B | click | Homepage |
A | view | Favorites |
B | click | Shopping cart |
A | click | Favorites |
Limits
- Only Hologres V0.10 and later allow you to use target user identification functions. You can view the version of your Hologres instance in the Hologres console. If the version of your Hologres instance is earlier than V0.10, submit a ticket to upgrade your instance.
- Before you use the functions, you must execute the following statement to install
an extension as the superuser. An extension is installed at the database level. For
each database, you need to install an extension only once. If you create a database,
you must execute the statement again.
CREATE EXTENSION flow_analysis;
bit_construct
In Hologres V0.10 and later, Hologres provides the bit_construct function for target user identification.
- Description
The bit_construct function returns a bitmap of the INTEGER type based on the specified filter conditions. The return value can be up to 32 bits in length.
- Syntax
bit_construct( a , b , ...., a6 )
- Parameters
- The parameters such as a and b specify filter conditions whose return values are of the BOOLEAN type. A maximum of 32 conditions are supported. Valid values: a to z and a1 to a6.
- This function returns a value of the INT type.
bit_match
In Hologres V0.10 and later, Hologres provides the bit_match function for target user identification.
- Description
The bit_match function is used to further calculate the output of the bit_construct function.
- Syntax
bit_match('expression', bitmask)
- Parameters
Parameter Description Example expression The conditional expression in the bit_construct function. The expression can contain the following operators and characters: AND ( &
), OR (|
), NOT (!
),XOR (^
), and parentheses()
.a&b bitmask The name of the bitmap that is constructed by the bit_construct function. N/A
Examples
The following sample code provides an example on how to use target user identification functions:
- Install an extension.
The superuser of an instance can execute the following statement to install an extension in a database:
CREATE EXTENSION flow_analysis;
- Prepare a table and data.
Create a table that records user IDs and the events in the online shopping process of users. Then, insert data into the table. Use the following sample statements:
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);
- Query data.
Query the users who added a product to the shopping cart and to favorites within a specific period of time.
You can query data by using one of the following methods:- Use the WHERE clause.
Note The less data that is queried by using the WHERE clause indicates better query performance.
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);
Functions in the SQL statements:- bit_construct: uses the Click the shopping cart event as Condition a and the View favorites event as Condition b to query the users who meet the filter conditions.
- bit_or: performs the bitwise OR operation on the users who meet Condition a and the users who meet Condition b. In this example, if a record of a user meets Condition a or b, the user meets the filter conditions.
- bit_match: uses the a&b expression to query the users who meet both Condition a and Condition b.
- Use the HAVING clause.
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
- Use the WHERE clause.