Redshift:将2个Epoch Unix列转换为1带时区的可读格式

问题描述

背景:以下JSON文件是事务的事件类型(来自DocumentDB),我将每天将其加载到Redshift中。在使用Pentaho Kettle读取并解析后,Redshift中的原始表将具有您在下面的JSON中看到的确切信息。

正在Redshift中捕获此JSON文件的当前DDL是以下内容

CREATE TABLE etl.lpgetlstage_na.json_data_raw (
    document_id varchar(500),clustertime timestamp,operation_type varchar(500),"database" varchar(500),collection varchar(500),document_key varchar(500),order_number varchar(600),order_id varchar(500),order_date_time varchar(500),attraction_id varchar(500),entry_date timestamp,entry_time timestamp,request_id varchar(500),ticket_url varchar(500),pass_id varchar(500),external_ticket_id varchar(500),"class" varchar(500),filename varchar(500),last_modified varchar(500),etl_created_ts varchar(500)
);

问题:正如我们在下面的JSON结构中看到的那样,“ entry_date”和“ entry_time”两个字段目前都以Unix Epoch格式通过。我的主要目标是从“ entry_date”中提取日期,并从“ entry_time”中提取时间,以便随后将两者连接起来并创建具有以下格式(包括时区)的唯一列:“ GMT:9月7日,星期一2020 4:11:04 PM“。

我有什么办法可以通过Redshift做到这一点吗?

  {
      "_id": {
        "_data": "11111111111111"
      },"operationType": "insert","clusterTime": {
        "$timestamp": {
          "t": 1599495064,"i": 1
        }
      },"ns": {
        "db": "abc","coll": "abc"
      },"documentKey": {
        "_id": {
          "$uuid": "abcabcabcabcabcabc"
        }
      },"fullDocument": {
        "_id": {
          "$uuid": "abcabcabcabcabcabc"
        },"orderNumber": "1234567","externalOrderId": "12345678","orderDateTime": "2020-09-11T08:06:26Z[UTC]","attraction": "abc","entryDate": {
          "$date": 1599523200000
        },"entryTime": {
          "$date": 1599472800000
        },"requestId": "abc","ticketUrl": "abc","tickets": [
          {
            "passId": "1111111","externalTicketId": "1234567"
          },{
            "passId": "222222222","externalTicketId": "122442492"
          }
        ],"_class": "abc"
      }
    }

解决方法

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

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

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