FlinkSQL提供了连接外部数据的方法,即通过建立Flink表与外部数据关联起来。其中最基本的连接方式为普通动态表连接,普通动态表允许读取外部数据以及输出数据至外部系统。
概念
普通动态表是FlinkSQL中的一类表,表中的数据与连接的外部数据对等,可以简单理解为把一张mysql的表放进flink内存中得到的表,并且该表与mysql表有连接关系,即该表可以读写mysql表。
使用方式
需要声明表的字段定义和表属性(连接器属性)。语法如下:
CREATE TABLE myTable (
myColumn1 int,
myColumn2 string...
)WITH (
'connector'='jdbc',
'url'='...',
'username'='...',
'password'='...'
)
with关键字前面的是字段定义,with关键字后面的是表属性。其中字段定义时还可以声明表主键,声明语法为PARIMARY KEY(myColumn1,...) NOT ENFORCED, 这里的not enforced表示flinksql不会对主键做强制的唯一性约束、非空约束,而且目前flinksql中只支持这种类型的主键。
表属性中有若干个属性字段需要声明,具体有哪些属性字段取决于使用哪个连接器,如上述声明中使用的是jdbc连接器,在使用该连接器时需要提供url、username、password等属性,通过此连接器我们就可以让该表能连接到对应的mysql表。
查询数据
我们可以查询flinksql普通动态表的数据,此数据与连接的外部数据是一致的。语法如下:
SELECT ... FROM myTable ...
tips:在运行时,只会加载一次外部数据到flinksql普通动态表。后续外部数据表有更新时,flinksql的普通动态表不会跟着自动更新。
输出数据
我们可以把数据写入到flinksql动态表,从而实现写入数据到外部系统的目的。语法如下:
INSERT INTO myTable ...