3 个回答
Temporal Table Join(时态表连接)用于关联一个动态变化的维度表(如缓慢变化的维度SCD)与事件流,确保事件始终关联维度表在特定时间点的状态。使用示例如下:
1、定义维度表(带时间属性)
1、定义维度表(带时间属性)
-- 用户维度表(含有效时间范围)
CREATE TABLE dim_user (
user_id STRING,
user_name STRING,
address STRING,
start_time TIMESTAMP(3), -- 有效开始时间
end_time TIMESTAMP(3), -- 有效结束时间(未来时间表示当前有效)
WATERMARK FOR end_time AS end_time - INTERVAL '5' SECOND
) WITH (...);
2、定义事件流-- 订单事件流(含事件时间)
CREATE TABLE orders (
order_id STRING,
user_id STRING,
order_amount DOUBLE,
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (...);
发布于:2周前 (05-29) IP属地:
3、执行Temporal Table Join
SELECT
o.order_id,
o.user_id,
u.address AS user_address,
o.order_amount
FROM orders o
JOIN dim_user FOR SYSTEM_TIME AS OF o.event_time u
ON o.user_id = u.user_id;
发布于:2周前 (05-29) IP属地:
3、执行Temporal Table Join
SELECT
o.order_id,
o.user_id,
u.address AS user_address,
o.order_amount
FROM orders o
JOIN dim_user FOR SYSTEM_TIME AS OF o.event_time u
ON o.user_id = u.user_id;
这里补充下,使用Temporal Table Join关联变化的维度表的适用场景有:
用户地址变更、商品价格调整,需关联历史快照。
追踪用户行为与当时生效的促销活动关联。
修正历史数据时,需基于事件时间重新关联维度状态。
发布于:2周前 (05-29) IP属地:
我来回答
您需要 登录 后回答此问题!