flink-sink表动态分区数据未进入
create TEMPORARY table source_tab(
gmt_create BIGINT ,
gmt_modified BIGINT,
relation_biz_vou_no VARCHAR,
actual_billing_dt VARCHAR,
billing_dt VARCHAR ,
cer_detail VARCHAR,
is_valid BIGINT,
clause_code VARCHAR,
squence_id DECIMAL,
dateNow as DATE_FORMAT(TIMESTAMPADD(DAY, -1, CURRENT_TIMESTAMP), 'yyyyMMdd')
) with (
'connector'='datagen'
);
create TEMPORARY table sink_res(
gmt_create BIGINT ,
gmt_modified BIGINT,
relation_biz_vou_no VARCHAR,
actual_billing_dt VARCHAR,
billing_dt VARCHAR ,
cer_detail VARCHAR,
is_valid BIGINT,
clause_code VARCHAR,
squence_id DECIMAL,
ds VARCHAR
) with (
'connector' = 'odps',
'endpoint' = '',
'tunnelEndpoint' = '',
'project' = '',
'tablename' = '',
'accessid' = '',
'accesskey' = '',
'partition'='ds'
);
INSERT into sink_res
SELECT
gmt_create,gmt_modified,relation_biz_vou_no,actual_billing_dt,billing_dt,cer_detail,is_valid,clause_code,squence_id,
dateNow as ds
FROM source_tab;
以上脚本首次运行起来没有问题,取得当前时间格式化作为动态分区。但是,运行之后第二天的分区发现没有数据进入
此时开始了一轮又一轮的bug查找中。。。分析发现DATE_FORMAT()内置函数存在严重bug(flink文档提示)
话不多说,一言不合上代码
create TEMPORARY table t_cer_original_voucher_inf(
gmt_create BIGINT ,
gmt_modified BIGINT,
relation_biz_vou_no VARCHAR,
actual_billing_dt VARCHAR,
billing_dt VARCHAR ,
cer_detail VARCHAR,
is_valid BIGINT,
clause_code VARCHAR,
squence_id DECIMAL,
dateNow as FROM_UNIXTIME(UNIX_TIMESTAMP() - 86400,'yyyyMMdd')
-- dateNow as DATE_FORMAT(now(),'yyyy-MM-dd hh-mm-ss')
) with (
'connector'='datagen'
);
create TEMPORARY table qc_ods_t_cer_original_voucher_inf(
gmt_create BIGINT ,
gmt_modified BIGINT,
relation_biz_vou_no VARCHAR,
actual_billing_dt VARCHAR,
billing_dt VARCHAR ,
cer_detail VARCHAR,
is_valid BIGINT,
clause_code VARCHAR,
squence_id DECIMAL,
ds VARCHAR
) with (
'connector'='odps',
'endPoint'='',
'project'='',
'tableName'='',
'accessId'='',
'accessKey'='',
'partition'='ds'
);
INSERT into qc_ods_t_cer_original_voucher_inf
SELECT
gmt_create,gmt_modified,relation_biz_vou_no,actual_billing_dt,billing_dt,cer_detail,is_valid,clause_code,squence_id,
dateNow as ds
FROM t_cer_original_voucher_inf
where
(gmt_create between UNIX_TIMESTAMP(CONCAT(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'), ' ', '00:00:00' ))*1000
and UNIX_TIMESTAMP(CONCAT(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'), ' ', '02:00:00' ))*1000 )
or
(gmt_modified between UNIX_TIMESTAMP(CONCAT(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') ,' ','00:00:00' ))*1000
and UNIX_TIMESTAMP(CONCAT(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),' ','02:00:00' ))*1000 )
;
运行后问题解决