Google Cloud Dataflow to BigQuery - Javascript UDF - toLocalString 无法正常工作

问题描述

我使用 toLocaleString 在与 UTC 不同的时区设置日期时间。但由于某种原因它在数据流过程中不起作用。

详情如下:

  • 我正在使用 Pub/Sub Subscription to BigQuery Template。 Dataflow 从 PubSub 获取 json 格式的数据,进行转换,插入 BigQuery
  • 我想使用 UDF 进行数据转换设置。
  • (为简单起见,)输入数据仅包括 unixTimestamp。例子: {"unixTimestamp": "1612325106000"}
  • Bigquery 表有 3 列:
unix_ts:INTEGER,iso_dt:DATETIME,local_dt:DATETIME,step1:STRING,step2:STRING,step3:STRING,step4:STRING,step5:STRING,step6:STRING

unix_ts 将保留输入的 unixTimestamp 原样,iso_dt 将保留 UTC 日期时间,local_dt 将保留欧洲/柏林日期时间。

预期输出1612325106000,2021-02-03T04:05:06,2021-02-03T05:05:06,...

结果输出1612325106000,...

我使用的 UDF 转换文件

function transform(injson) {
   var input = JSON.parse(injson);

   var v_date = new Date(parseInt(input.unixTimestamp));
   var v_iso_dt = v_date.toISOString().replace('Z','');
   var v_local_dt_str = v_date.toLocaleString('en-US',{timeZone: 'Europe/Frankfurt'});
   var v_local_dt = new Date(v_local_dt_str);
   var v_diff = v_date.getTime() - v_local_dt.getTime();
   var v_local_dt_correct_zone = new Date(v_date.getTime() - v_diff);
   var v_local_dt_correct_zone_formatted = v_local_dt_correct_zone.getFullYear() + "-" +
   ("00" + (v_local_dt_correct_zone.getMonth()+1)).slice(-2) +  "-" +
   ("00" + v_local_dt_correct_zone.getDate()).slice(-2) +  "T" +
   ("00" + v_local_dt_correct_zone.getHours()).slice(-2) +  ":" +
   ("00" + v_local_dt_correct_zone.getMinutes()).slice(-2) +  ":" +
   ("00" + v_local_dt_correct_zone.getSeconds()).slice(-2) ;

   var output = {
       "unix_ts": input.unixTimestamp || null,"iso_dt": v_iso_dt  || null,"local_dt": v_local_dt_correct_zone_formatted || null,"step1": v_date  || null,"step2": v_local_dt_str   || null,"step3": v_local_dt   || null,"step4": v_diff   || null,"step5": v_local_dt_correct_zone || null,"step6": v_local_dt_correct_zone_formatted || null,};
}

附言我在 Google Cloud Dataflow to BigQuery - UDF - convert unixTimestamp to local time 中问了一个更广泛的问题。那个是关于将 unixTimestamp 转换为本地时间的最佳方法,然而,这个是关于在 DataFlow UDF 中使用 toLocaleString 的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)