PyFlink订单初步分析

背景

这个文章只是给一个Flink cdc的效果的一个说明以及一些用法的思考,测试数据是一些虚拟订单数据(可以参考我前面的文章<Python虚拟订单数据创建>)

环境

下载安装pyflink

pip install apache-flink

在这里插入图片描述
关于一些PyFlink的写法以及算子的使用可以参考这篇文章

代码

创建流式环境

from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, EnvironmentSettings

s_env = StreamExecutionEnvironment.get_execution_environment()
s_env.set_parallelism(6)
env_settings = EnvironmentSettings.new_instance().in_streaming_mode().use_blink_planner().build()
s_env = StreamTableEnvironment.create(s_env, environment_settings=env_settings)

数据源输入表

s_env.sql_update("""
    CREATE TABLE source (
        order_id STRING,
        customer_name STRING,
        order_create_time TIMESTAMP(3),
        total_money FLOAT,
        order_status STRING,
        item_num INT,
        province STRING,
        city STRING     
    ) WITH (
    'connector' = 'jdbc',
    'url' = 'jdbc:mysql://localhost:3306/data?autoReconnect=true&serverTimezone = GMT%2B8',
    'driver' = 'com.mysql.cj.jdbc.Driver',
    'table-name' = 'order_data',
    'username' = 'root',
    'password' = '***'
    )
""")

cdc会通过mysql的binlog日志来获取数据变化,实现一个实时数据计算的效果。
表结构参考虚拟订单创建的文章

数据源输出表

s_env.sql_update("""
    CREATE TABLE sink (
         customer_name STRING,
         sum_total_money FLOAT
    ) WITH (
        'connector' = 'print'
    )
""")

执行算子

# 执行转换并收集结果
s_env.sql_update("INSERT INTO sink select customer_name,sum(total_money) as sum_total_money from source group by customer_name")

s_env.execute("Flink-cdc-order")

执行结果

在这里插入图片描述
+i 代表 增加insert ,+U代表增加update ,-U代表去除update
从图中可以看见5号线程先去掉了"给我唱首歌吧"的汇总数据,然后更新一条新的计算结果,打印在控制台上。

当然你也可以将sink换成mysql,kafka等其他的数据源

s_env.sql_update("""
    CREATE TABLE sink (
         customer_name STRING,
         sum_total_money FLOAT
    ) WITH (
    'connector' = 'jdbc',
    'url' = 'jdbc:mysql://localhost:3306/data?autoReconnect=true&serverTimezone = GMT%2B8',
    'driver' = 'com.mysql.cj.jdbc.Driver',
    'table-name' = '***',
    'username' = 'root',
    'password' = '***'
    )
    )
""")

换成mysql数据源之后,一旦你的order_data表数据进行变化,计算结果也会变化之后放入结果表。我们可以通过cdc的这种形式做实时的数据大屏,活动作战室分析,日常分销监控等等的用处。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值