週六晚11實習生上線資料觀測突發問題(涉及MYSQL,Hive等)

海山了-發表於2024-11-02

前提

有點恐怖,上次需求上線後,部分線上資料觀測要留到11月初,上次是一個稅收相關的需求,已有功能的線上資料觀察已經完成,還剩下部分只有在十一月初才可以觀察

簡單提一嘴(非技術相關)

之前把hive sql發給了mentor,結果hive sql裡的pt居然寫成了20251011,人都麻了,搞得我這次一直沒發現,一直以為查出資料集為空只是資料還沒生成😅

並且意外發生了,之前mentor是當天晚上7點左右就有了對應的資料而我突然想起忘了執行,現在晚上11點執行了好幾次都沒有資料生成,人麻了😅

這時候告訴mentor除了打電話估計也沒人響應了,所以只能死馬當活馬醫

嘗試梳理情況解決問題

轉機出現

發現資料平臺標明瞭表產出時間的描述

表產出時間是在T+1產出,今天產出昨天的資料,時間分割槽為當前國家首都時間

產生好奇

在Mysql資料庫查到的任務拒絕或者透過時間都是11/2開頭的,誒那這是否有點不對

由於之前的我很喜歡分析資料庫表,並且之前聽到mentor們討論過資料庫的時間欄位是時間戳

回憶

立馬想起了時間戳有鬼(感恩之前瞭解過timestamp和datatime等等的區別,在腦子裡留下了點印象)

透過AI驗證後發現確實如此

timeStamp是會隨著MySQL會話時區而自動變換查詢的結果

記得當時聽mentor說,用timestamp,是因為跨多個國家業務,所以使用timestamp來統一,這裡查了下我之前做的筆記,不用datetime是因為datetime存在儲存時的時區不一樣,那麼拿出來後的時區也不一樣,也就是不統一啦,不統一對於之後線上bug確定這會更麻煩

那麼接下來問題就只剩

確認下當前的時區是否是北京時區,如果是北京時區那hive中的資料就能作為觀察的資料了

如何查時區

  • 第一次嘗試
SELECT @@session.time_zone;

發現返回給我的結果是SYSTEM

😅,實習生可沒有那麼多許可權去訪問線上伺服器

  • 第二次嘗試
SELECT @@global.time_zone;

還是SYSTEM

底層原理是當前會話並沒有設定時區,所以也就是直接用的預設時區,即查了也沒用😅

陷入困惑,回到題目

突然想到Mysql中select CURRENT_TIMESTAMEP再和我們當前北京時間確定下不就行了嗎?

當然上面是運氣好的情況,不然24時區一一確定也夠嗆

所以運氣來了!正好是我電腦的時間

解決問題

目前的Mysql顯示的稅收相關時間為2024-11-02 06:21:38

那麼步驟如下:

  1. 找個網站時間換算
  2. 只要時間換算完成對應MX的時間是11-01即可,那麼資料就是對應的(萬幸正好是01號前)

嘿嘿!看了所有程式碼改動都沒問題,司機照常出車完單!至少避免了P0 Bug

讓我複習了挺多的,但願這次秋招來個人收了我吧

不過上述內容都是出自於我對於hive資料庫表描述沒有理解出現偏差,pt欄位的型別也是string,這個確實沒法百分百確認,我還查了和我們國家相近的日本,發現pt欄位也是1101,可能上次mentor查的時候是意外吧

相關文章