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 )
;
运行后问题解决










posted @ 2023-07-27 10:44  梦呓空间  阅读(29)  评论(0编辑  收藏  举报