如何在FlinkSQL中使用Temporal Table Join关联变化的维度表?

提问者:帅平 问题分类:面试刷题
如何在FlinkSQL中使用Temporal Table Join关联变化的维度表?
3 个回答
最后一丝温柔
最后一丝温柔
​Temporal Table Join​(时态表连接)用于关联一个动态变化的维度表(如缓慢变化的维度SCD)与事件流,确保事件始终关联维度表在特定时间点的状态。使用示例如下:
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属地:
我来回答