【问题标题】:Hive Timestamp value change after joining two tables加入两个表后 Hive 时间戳值更改
【发布时间】:2015-06-20 13:45:03
【问题描述】:

我有两个 Hive 表,一个包含时间戳数据类型的日期值。如果我使用键查询一条特定记录,它会正确显示日期值。 select acct_key, account_open_date from Table_1 where acct_key=1234;

 acct_id   account_open_date
 1234      1963-03-01 00:00:00

但是,当将此表与另一个表连接时,返回的时间戳值更改为 2031 年的某个值 选择 a.acct_key,b.account_open_date 从 Table_2 到 Table_1 b 的左外连接 a.acct_key=b.acct_key;

acct_id    account_open_date
 1234       2031-03-19 00:00:00

似乎这个问题只发生在 Unix 纪元时间(1970)之前的日期值。有什么建议吗?谢谢

【问题讨论】:

    标签: hadoop timestamp hive


    【解决方案1】:

    这里有两个问题,首先加入不能使用时间戳和纪元时间戳。在您的最后一行中,我假设连接正在为其他时间戳返回正确的时间戳。如果我错了,请纠正我。所以如果解决了,你可以查看here 来处理纪元时间

    【讨论】:

      【解决方案2】:

      我无法重现您所看到的内容,但您可以尝试将 account_open_date 转换为 string

      select a.acct_id
          , b.new
          , other_columns
      from db.table1
      left outer join (
        select *
          , cast(account_open_date as string) new
        from db.table2 ) b
      on a.acct_id=b.acct_id
      

      【讨论】:

      • 感谢您的建议。想知道而不是使用嵌套查询,我可以直接将其转换为字符串,如下所示。这两者有区别吗? select a.acct_id , cast(b.account_open_date as string) new , other_columns from db.table1 a, left outer join db.table 2 b on a.acct_id=b.acct_id;
      • 如上所述,我无法重现您所看到的内容,但我假设在 join 期间以某种方式更改了时间戳列。所以我做了cast 然后join。如果这是您所担心的,我认为不会有太大的性能差异。
      【解决方案3】:

      我试过了。在嵌套查询中将时间戳转换为字符串,如下所示。我也尝试过不使用嵌套查询,但这不起作用。有谁知道为什么?

      无效版本:

      SELECT 
         a.acct_id
        ,CAST(b.account_open_date AS STRING) new
        ,other_columns 
      FROM 
        db.table1 a, 
        LEFT OUTER JOIN db.table2 b ON (a.acct_id = b.acct_id)
      ;
      

      工作版本:

      SELECT 
           a.acct_id
          ,b.new
          ,other_columns
      FROM 
          db.table1 a
          LEFT OUTER JOIN (
              SELECT 
                 *
                ,CAST(account_open_date AS STRING) new
             FROM 
                db.table2
          ) b
             ON (a.acct_id=b.acct_id)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-19
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2018-06-19
        • 1970-01-01
        相关资源
        最近更新 更多