阿里云实时计算常见问题

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

A:①检查相应【实时采集】任务,是否勾选【格式转换】中【嵌套JSON平铺】。

②若勾选了格式转换,在相应Flink任务中进行源表JSON编写时,需将" . "改为" _ "。

Q:数据源配置中pay_time为timestamp类型,在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

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如何处理?

A:FlinkSQL仅支持流JOIN表,不支持表JOIN表操作;
Q:错误日志中显示Column 'rowtime' not found in any table; did you mean 'ROWTIME'? 该如何调整?

A:检查IDE语句,将其中的rowtime修改为大写ROWTIME即可。

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

A:检查【源表-字段/时间列】设置,确认选择时间字段声明的字段类型与其数据内容匹配。

YYYY-MM?DD HH:MM:SS对应Timestamp类型,YYYYMMDDHHMMSS对应Bigint类型。目前流计算仅支持这两种时间字段类型。
Q:为何MYSQL结果表中滑步时长与开窗结束时长和设定内容有区别?

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.如何处理?

A:语句提示当前输出字段中bill_date字段与结果表中字段类型不符。重新回到FlinkSQL任务中确认结果表字段。

确定问题后可选用下列任一方式进行解决:

①对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!!!如何处理?

A:检查维表配置中`"主键"`设置,IDE代码中ON语句字段必须与维表中"`主键`"保持一致。
Q:运行信息中涉及的指标参数来源于哪里?

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