Bootstrap

Flink SQL作业快速入门

Flink SQL快速入门_实时计算 Flink版(Flink)-阿里云帮助中心

这段代码是使用Apache Flink SQL来处理来自阿里云日志服务(SLS)的GitHub事件数据。它创建了一个临时表gh_event,该表连接到SLS以读取GitHub事件流,并设置了一些Flink作业的配置参数。最后,它执行了一个查询,用于计算当天获得新星标(star)最多的前10个GitHub仓库。

下面详细解释每个部分:

创建临时表 gh_event

CREATE TEMPORARY TABLE gh_event(
  ...
) WITH (
  'connector' = 'sls',
  ...
);

这段DDL语句定义了一个名为gh_event的临时表,它实际上是一个外部表,因为它通过WITH子句中的配置与阿里云的日志服务相连。这个表代表了GitHub上发生的实时事件,例如用户对项目进行的操作(fork、watch等)。WITH子句中包含了一系列键值对,用来指定如何连接到SLS以及如何读取数据,包括项目名称、端点、日志存储名称和访问凭证等信息。

设置Flink作业配置

SET 'table.exec.mini-batch.enabled'='true'; 
SET 'table.exec.mini-batch.allow-latency'='2s'; 
SET 'table.exec.mini-batch.size'='4096'; 
SET 'parallelism.default' = '4';

这些SET语句用于配置Flink作业的行为:

  • mini-batch.enabled:启用mini-batch模式,可以减少资源消耗。
  • mini-batch.allow-latency:设定允许的最大延迟为2秒,即每2秒处理一次收集到的数据
  • mini-batch.size:指定了mini-batch的最大大小为4096条记录
  • parallelism.default:设定了作业默认并行度为4,意味着如果有足够的资源,作业将以4个并发任务运行。

查询当天新增星标Top 10仓库

SELECT DATE_FORMAT(created_at_ts, 'yyyy-MM-dd') as `date`, repo_name, COUNT(*) as num
FROM gh_event
WHERE type = 'WatchEvent' AND DATE_FORMAT(created_at_ts, 'yyyy-MM-dd') = DATE_FORMAT(NOW(), 'yyyy-MM-dd')
GROUP BY DATE_FORMAT(created_at_ts, 'yyyy-MM-dd'), repo_name
ORDER BY num DESC
LIMIT 10;

这段SQL查询从gh_event表中筛选出所有类型为WatchEvent(即用户给某个仓库加星标)的事件,并且只选择当天的事件。然后,它根据仓库名(repo_name)分组,统计每个仓库收到的新星标的数量,最终按星标数量降序排列,取前10名。

;