1. 程式人生 > 實用技巧 >微博AnalysisQl動態資料檢視元資料設計

微博AnalysisQl動態資料檢視元資料設計

前言

目前,AnalysisQl 資料檢視的元資料(維度、指標、指標計算器)需要通過程式碼(API)或資原始檔的形式硬編碼,應用啟動時,按照宣告的順序依次註冊。這種模式下,資料檢視是 靜態 的,任何一項變更都需要重新升級釋出應用服務,不利於服務快速迭代。

考慮到這種情況,AnalysisQl 在保留原有 靜態 檢視的前提下,擴展出 動態 檢視方案,基於資料庫實現元資料的儲存,通過更新相應的資料庫記錄,即可 實時動態 地更新資料檢視。

 
AnalysisQl 專案主頁https://github.com/weibodip/analysisql。

元資料

資料檢視元資料有 7 類:

  • 資料檢視資訊
  • 資料檢視維度
  • 資料檢視維度值
  • 資料檢視指標
  • 資料表資訊
  • 資料表維度
  • 資料表指標計算器

每一類元資料對應著資料庫的一張資料表,我們分別介紹。

:資料庫以 MySQL 為例進行介紹。

資料檢視資訊

資料檢視資訊表(aql_view_info),用於儲存多個數據檢視(即:主題)資訊,包括:名稱、別名、描述及狀態資訊。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avi_topic VARCHAR 檢視名稱,通常使用英文表示。
avi_alias VARCHAR 檢視別名,通常使用中文表示,與 avi_topic(英文名稱)相對應。
avi_desc VARCHAR 檢視描述,通常用於說明主題附加資訊。
avi_state INT 檢視狀態,數值 0 表示檢視處於 禁用 狀態;數值 1 表示檢視處於 啟用 狀態,其餘數值無效。

:檢視名稱(avi_topic)全域性唯一。

資料檢視維度

資料檢視維度表(aql_view_dimension),用於儲存資料檢視支援的維度(多個)資訊,包括:名稱、別名、描述。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avd_topic VARCHAR 檢視名稱。
avd_name VARCHAR 檢視維度名稱,通常使用英文表示。
avd_alias VARCHAR 檢視維度別名,通常使用中文表示,與 avd_name(英文名稱)相對應。
avd_desc VARCHAR 檢視維度描述,通常用於說明維度附加資訊。

:檢視名稱(avd_topic)與檢視維度名稱(avd_name)組合全域性唯一。

資料檢視維度值

資料檢視維度值表(aql_view_dimension_value),用於儲存資料檢視中各個維度對應的維度值(多個)。每一個維度的維度值支援多個版本(版本使用時間戳表示),通常使用最新版本(即時間戳最大)的維度值資料。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
topic VARCHAR 檢視名稱。
dimension VARCHAR 檢視維度名稱。
dtime TIMESTAMP 檢視維度值時間戳,預設當前時間(CURRENT_TIMESTAMP)。
dvalue VARCHAR 檢視維度值。

寫入維度值

資料檢視維度值表中的維度值資料需要藉助外部應用程式寫入,可以使用定時或不定時的方式。注意,寫入指定檢視維度的維度值時,這些維度值的時間戳(dtime)需要保持一致,表示這些維度值歸屬於同一個版本。

讀取維度值

讀取指定檢視維度的維度值時,需要經過以下2個步驟:

  1. 根據檢視名稱、檢視維度名稱計算檢視維度值的最大時間戳(最新版本);
SELECT MAX(dtime) FROM %s WHERE topic = '%s' AND dimension = '%s'
  1. 根據檢視名稱、檢視維度名稱及檢視維度值的最大時間戳檢索維度值;
SELECT DISTINCT(dvalue) FROM %s WHERE topic = '%s' AND dimension = '%s' AND dtime = '%s'

:檢視名稱(topic)、檢視維度名稱(dimension)與檢視維度值時間戳(dtime)組成聯合索引。

資料檢視指標

資料檢視指標表(aql_view_metric),用於儲存資料檢視支援的指標(多個)資訊,包括:名稱、別名、描述。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avm_topic VARCHAR 檢視名稱。
avm_name VARCHAR 檢視指標名稱,通常使用英文表示。
avm_alias VARCHAR 檢視指標別名,通常使用中文表示,與 avm_name(英文名稱)相對應。
avm_desc VARCHAR 檢視指標描述,通常用於說明指標附加資訊。

:檢視名稱(avm_topic)與檢視指標名稱(avm_name)組合全域性唯一。

資料表資訊

資料表資訊表(aql_view_table_info),用於儲存資料檢視支援的資料表(多個)資訊,包括:名稱、時間粒度大小、時間粒度單位、儲存週期、時間延遲及狀態資訊。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avti_topic VARCHAR 檢視名稱。
avti_name VARCHAR 資料表名稱,通常使用英文表示。
avti_data INT 資料表資料時間粒度大小。
avti_unit VARCHAR 資料表資料時間粒度單位,支援“s”(秒)、“m”(分鐘)、“h”(小時)、“d”(天)、“w”(周)、“M”(月)、“q”(季度)、“y”(年)。
avti_period INT 資料表資料儲存週期,使用資料表時間粒度為計算單位,詳情見後。
avti_delay INT 資料表資料時間延遲,使用資料表時間粒度為計算單位,詳情見後。
avti_state INT 資料表狀態,數值 0 表示資料表處於 禁用 狀態;數值 1 表示資料表處於 啟用 狀態,其餘數值無效。

假設,時間粒度大小(avti_data)為 5,時間粒度單位(avti_unit)為 m,表示資料表資料時間粒度為 5分鐘。
假設,時間粒度為 5分鐘,儲存週期(avti_period)為 288,表示資料表資料儲存週期為 1天。
假設,時間粒度為 5分鐘,時間延遲(avti_delay)為 12,表示資料表資料時間延遲為 1小時;

:檢視名稱(avti_topic)、資料表名稱(avti_name)全域性唯一;

資料表維度

資料表維度表(aql_view_table_dimension),用於儲存資料檢視/資料表支援的維度(多個)。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avtd_topic VARCHAR 檢視名稱。
avtd_table VARCHAR 資料表名稱。
avtd_name VARCHAR 資料表維度名稱。

:檢視名稱(avtd_topic)、資料表名稱(avtd_table)及資料表維度名稱(avtd_name)組合全域性唯一。

資料表指標計算器

資料表指標計算器表(aql_view_table_calculator),用於儲存資料檢視/資料表支援的指標計算資訊,包括:名稱、指標計算查詢引擎(型別、連結、使用者名稱、密碼)、指標計算規則(SQL查詢語句)。

欄位名稱 欄位型別 欄位含義
id INT 主鍵ID
avtc_topic VARCHAR 檢視名稱。
avtc_table VARCHAR 資料表名稱。
avtc_metric VARCHAR 資料表指標名稱。
avtc_type VARCHAR 資料表指標計算時使用的查詢引擎型別,支援“clickhouse”、“mysql”、“presto”。
avtc_url VARCHAR 資料表指標計算時連線查詢引擎的JDBC URL。
avtc_user VARCHAR 資料表指標計算時連線查詢引擎的使用者名稱。
avtc_passwd VARCHAR 資料表指標計算時連線查詢引擎的密碼。
avtc_sql VARCHAR 資料表指標計算時使用的SQL查詢語句,不同的查詢引擎需要使用不同的SQL查詢語法。

:檢視名稱(avtc_topic)、資料表名稱(avtc_table)及資料表指標名稱(avtc_metric)組合全域性唯一。

結語

AnalysisQl 會定時掃描載入資料視圖表中所有處於 啟用 狀態的檢視,然後使用檢視名稱從其它幾類元資料表中掃描載入檢視相應的維度、指標、資料表等資訊。如果需要更新資料檢視,只需要增加或更新相應的元資料記錄,下一次掃描完成之後即可生效。