【发布时间】:2021-09-17 16:33:36
【问题描述】:
我在 hive-cli 和 presto-cli 中获得同一张表的不同时间戳。
表的表结构:
+----------------------------------------------------+
| createtab_stmt |
+----------------------------------------------------+
| CREATE EXTERNAL TABLE `mea_req_201`( |
| `mer_id` bigint, |
| `mer_from_dttm` timestamp, |
| `mer_to_dttm` timestamp, |
| `_c0` bigint, |
| `a_number` string, |
| `b_number` string, |
| `time_stamp` timestamp, |
| `duration` bigint) |
| PARTITIONED BY ( |
| `partition_col` bigint) |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |
| LOCATION |
| 'hdfs://hadoop5:8020/warehouse/tablespace/external/hive/mea_req_201' |
| TBLPROPERTIES ( |
| 'TRANSLATED_TO_EXTERNAL'='TRUE', |
| 'bucketing_version'='2', |
| 'external.table.purge'='TRUE', |
| 'spark.sql.create.version'='2.4.0.7.1.4.0-203', |
| 'spark.sql.sources.schema.numPartCols'='1', |
| 'spark.sql.sources.schema.numParts'='1', |
| 'transient_lastDdlTime'='1625496239') |
+----------------------------------------------------+
从 hive-cli 运行时,输出为:
虽然来自 presto-cli:
在 mer_from_dttm col 中存在时间差异,但对于其他时间戳列,日期完全相同。请注意,当从 presto-jdbc 完成时,此时间差行为也是相同的。我相信这与时区无关,因为如果是时区,则时差应该跨越所有时间戳列,而不仅仅是一个。请提供一些解决方案。
一些事实:
-
Presto 服务器版本:0.180
-
Presto Jdbc 版本:0.180
-
hive.time-zone=亚洲/加尔各答
-
在 Presto jvm.config 中:-Duser.timezone=Asia/Calcutta
-
客户时区:亚洲/加尔各答
编辑 1: 使用 mer_id 对查询进行排序,以确保两个查询都输出相同的一组行,但是错误行为仍然保持不变。
【问题讨论】: