配置单元unix\u时间戳在源列中毫秒内不工作

des4xlb0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(454)

我用的是Hive1.1
摄取dtm中的最后六位数字表示毫秒。
但是如果我也指定了模式,unix\u timestamp hive函数会给出相同的结果
那么,如何得到包含毫秒的unix\u时间戳的结果呢

  1. select a_ingestion_dtm,unix_timestamp(a_ingestion_dtm) from omega limit 10;
  2. +-----------------------------+-------------+--+
  3. | a_ingestion_dtm | _c1 |
  4. +-----------------------------+-------------+--+
  5. | 2019-07-08 16:11:02.076002 | 1562616662 |
  6. | 2019-07-08 21:07:26.253007 | 1562634446 |
  7. | 2019-07-08 21:07:14.284 | 1562634434 |
  8. +-----------------------------+-------------+--+
  9. select a_ingestion_dtm,unix_timestamp(a_ingestion_dtm,'yyyy-MM-dd HH:mm:ss.SSSSSS') from omega limit 10;
  10. +-----------------------------+-------------+--+
  11. | a_ingestion_dtm | _c1 |
  12. +-----------------------------+-------------+--+
  13. | 2019-07-08 16:11:02.076002 | 1562616662 |
  14. | 2019-07-08 21:07:26.253007 | 1562634446 |
  15. | 2019-07-08 21:07:14.284 | 1562634434 |
  16. +-----------------------------+-------------+--+
a0x5cqrl

a0x5cqrl1#

unix\u timestamp(string date)返回从1970年起经过的秒数。
您可以将毫秒部分连接到unix\u timestamp返回的bigint。
就像在这个演示中:

  1. with your_data as (
  2. select stack(3,
  3. '2019-07-08 16:11:02.076002',
  4. '2019-07-08 21:07:26.253007',
  5. '2019-07-08 21:07:14.284'
  6. ) as ts
  7. )
  8. select concat_ws('.',cast(unix_timestamp(ts) as string),regexp_extract(ts,'\\.(\\d+)$'))
  9. from your_data;

结果:

  1. OK
  2. 1562627462.076002
  3. 1562645246.253007
  4. 1562645234.284
  5. Time taken: 0.057 seconds, Fetched: 3 row(s)
展开查看全部

相关问题