常见问题总集

Q:为什么Flink任务中有数据输入,没有脏数据产生,但是也没有输出?

A:①检查相应【实时采集】任务,是否勾选【格式转换】中【嵌套JSON平铺】。
问题-1.png
②若勾选了格式转换,在相应Flink任务中进行源表JSON编写时,需将" . "改为" _ "。
问题-2.png

Q:数据源配置中pay_timetimestamp类型,在GroupBy时选用DATE_FORMAT函数时系统报错。错误日志中显示The main method caused an error: Incompatible types of expression and result type.如何处理?
-- FlinkSQL代码
INSERT INTO dts_ds_merchant_target
SELECT CAST(1.2 as DECIMAL) as ID ,
       CAST(2.3 as DECIMAL )as NUMB,
       CAST(DATE_FORMAT(pay_time,'%Y-%m-%d') as VARCHAR) as DAYTIME
FROM dts_ds_merchant_source
GROUP BY DATE_FORMAT(pay_time,'%Y-%m-%d') , id

问题-12.png
A:在SELECT中用户通过CAST()函数将DATE_FORMAT()返回值转换为VARCHAR类型,但是在GROUPBY中没有进行转换,DATE_FORMAT()默认返回STRING类型。Flink SQL中仅有VARCHAR类型,没有STRING类型,所以出现报错情况。
解决方式:①通过CAST()DATE_FORMAT()返回值转换成VARCHAR类型;

INSERT INTO dts_ds_merchant_target
SELECT CAST(1.2 as DECIMAL) as ID ,
       CAST(2.3 as DECIMAL )as NUMB,
       CAST(DATE_FORMAT(pay_time,'%Y-%m-%d') as VARCHAR) as DAYTIME
FROM dts_ds_merchant_source
GROUP BY CAST(DATE_FORMAT(pay_time,'%Y-%m-%d') as VARCHAR), id

②GROUPBY时直接引用pay_time字段,去掉DATE_FORMAT()

INSERT INTO dts_ds_merchant_target
SELECT CAST(1.2 as DECIMAL) as ID ,
       CAST(2.3 as DECIMAL )as NUMB,
       CAST(DATE_FORMAT(pay_time,'%Y-%m-%d') as VARCHAR) as DAYTIME
FROM dts_ds_merchant_source
GROUP BY pay_time, id
Q:错误日志提示The main method caused an error: side-table must be at the right of join operator 如何处理?

问题-11.png
A:FlinkSQL仅支持流JOIN表,不支持表JOIN表操作;

Q:错误日志中显示Column 'rowtime' not found in any table; did you mean 'ROWTIME'? 该如何调整?

问题-13.png
A:检查IDE语句,将其中的rowtime修改为大写ROWTIME即可。

Q:错误日志中显示The main method caused an error: field [totalsale] not found; input fields are: [totalSale, tms, tme]或者The main method caused an error: Field name of query result and registered TableSink dts_ds_merchant_target do not match.该如何调整?

问题-14.png
问题-15.png

A:语句提示现有totalsale字段未找到/相应结果表字段不匹配。因为输入时大小写错误,导致flink进行数据消费时无法顺利写入Mysql相应字段中。需再次检查源表/结果表中字段名称和Flink处理语句中字段名称是否完全一致。

Q:程序运行正常,数据输入正常,但是无输出,只有脏数据怎么办?

问题-17.png
A:检查【源表-字段/时间列】设置,确认选择时间字段声明的字段类型与其数据内容匹配。
问题-18.png
YYYY-MM—DD HH:MM:SS对应Timestamp类型,YYYYMMDDHHMMSS对应Bigint类型。
目前流计算仅支持这两种时间字段类型。

Q:为何MYSQL结果表中滑步时长与开窗结束时长和设定内容有区别?

问题20.png
A:检查IDE语句中HOP相关语句,INTERVAL '30' SECOND 代表滑动步长,INTERVAL '5' MINUTE代表开窗时长,若滑动步长小于开窗时长则会出现相应情况。

HOP_START(ROWTIME, INTERVAL '30' SECOND   ,INTERVAL '5' MINUTE   ) as hops
Q:为什么插入多次数据,仅在结果表中显示一次数据结果?

A:多次数据插入间隔短于会话间隔,Flink将其视作一个持续的流进行计算。可以通过以下两种方式进行调整:①重新设定一个更短的会话间隔;②等待超过会话间隔的时间再进行数据插入。

Q:错误日志显示Field types of query result and registered TableSink [表名] do not match.如何处理?

问题-21.png
A:语句提示当前输出字段中bill_date字段与结果表中字段类型不符。重新回到FlinkSQL任务中确认结果表字段。
问题-22.png
确定问题后可选用下列任一方式进行解决:
①对bill_date字段通过 CAST() 函数转换为BIGINT类型

原语句:a.dts_paytime AS bill_date,
转换后:CAST(a.dts_paytime as varchar) as bill_date,

②在数据库手动通过以下语句将bill_date字段类型修改为BIGINT类型

ALTER TABLE dts_ds_all_count_target MODIFY bill_date BIGINT

修改后重新保存提交,并重跑任务,即可解决问题。

Q:错误日志显示ON condition must contain all equal fields!!!如何处理?

问题-33.png
A:检查维表配置中`"主键"`设置,IDE代码中ON语句字段必须与维表中"`主键`"保持一致。
问题-34.png

Q:运行信息中涉及的指标参数来源于哪里?

A:指标数据支持Prometheus和RestFulAPI两种获取方式。数据来源同一份,rest直接从flink里面获取。Promethues是将flink指标打到第三方系统,然后从第三方系统获取。

Q:数据库连接正常,但是为什么下拉列表中不显示数据表?

A:请确认数据源连接时是否在jdbc连接处是否填写完整,RDB类的数据源需要指向具体的数据库。

Q:维表关联查询时,维表中有数据,但是为什么关联之后数据为null?

A:请检查关联字段是否为null值。且当主键的数据类型为datatime时,主键也不能为null。

Q:在运行实时任务时,将总topic从1改为3,为什么只有一个分区能正常写入数据?

A:在原先Topic数量为1时,FlinkSQL任务提交会默认只向1个分区写入。此时增加分区时,由于任务处于运行过程中,仍默认原有分区写入,不会动态变化。因此,不要在运行过程中更改相关配置,如有更改,请选择时间点重跑。

Q:实时采集任务中设置了采集起点,但是任务正常运行后,不能立刻采集到数据,如何解决?

A:实时采集任务指定了采集起始时间点,在任务开始后,系统需要一定的时间先寻找采集时间点,会在日志中会出现一段info日志。找到采集起始时间后,才会有序采集数据,因此属于正常现象,等待一段时间即可。

2021 09 23 16 20 49
Q:使用上传的自定义udf函数,引用后却提示语法检验不通过?

A:在给jar包中的udf函数命名的时候,需要注意不能与平台中注册的函数名称相同,否则会出现重名的问题,从而导致语法检测失败。

Q:双流Join任务在运行过程中,flinksql任务为什么消费不到数据?

A: 双流Join场景下,Flink1.10 需要在环境参数重开启TTL状态配置。

2021 09 23 17 38 11