![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230726164318392-162588362.png) # 1. 結果集 ## 1.1. sql ```sql select empno,mgr from emp ord ...
最近在測試flink從trino查詢數據插入到phoenix5的功能,發現一個時間的問題:
明明插入的時間是 '1940-06-01',查詢出來的時間會少一天,同樣的 Timestamp 也會自動少掉 8個小時,詳細原因參考 Phoenix關於時區的處理方式說明。但是文章中阿裡的已經處理,但是社區版的仍然有問題,好在社區版本的也有了對應的升級包PHOENIX-6623 ,把phoenix 5.14的版本編譯好後,升級上去,打開 phoenix.query.applyTimeZoneDisplacement=true,但是經過測試大部分時間已經能夠正常的顯示,仍然有一些時間存在問題,
其中的原因是因為 phoenix 採用的 org.joda.time 工具包,存的時間是按照GMT時區存的數據,對於夏令時的處理存在問題,詳細可以參照 消失了的那些天——Joda中的夏令時。對於特殊的幾個時間 1940-06-01、1941-03-16、1986-05-04、1987-04-12、1988-04-10、1989-04-16、1990-04-15、1991-04-14 的時間夏令時的偏移量是按照9小時來處理的,正常的時間按照8個小時來做處理,通過時區的轉換 ,這種正好是夏令時多1個小時的就會顯示少1一天。目前社區應該沒有解決特殊的夏令時的顯示。
目前的解決方案:升級到phoenix 5.14版本,打開phoenix.query.applyTimeZoneDisplacement=true,Timestamp格式是可以正常顯示,date 類型數據仍然存在一點問題,查詢的客戶端使用 sqlline-thin 客戶端以及QueryServer JDBC,sqlline 的客戶端to_char顯示的是GMT時區的時間,sqlline-thin to_char顯示的是 GMT+8 的時間,date 類型的數據通過 SUBSTR(to_char(date),1,10) 來解決顯示問題,如果不存在這幾個夏令時時間,就可以直接查詢原表
sqlline:
sqlline-thin:
另外:
5.14版本缺少 QueryServer的可以參考 關於Phoenix5.X 安裝包不包含QueryServer服務問題_phoenix-hbase5.x(適配phoenix-queryserver)_Jason_yan0527的博客-CSDN博客,需要自行編譯