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

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

![](https://yurun-blog.oss-cn-beijing.aliyuncs.com/%E5%85%AC%E4%BC%97%E5%8F%B7/%E5%BE%AE%E5%8D%9A%E6%B5%81%E5%AA%92%E4%BD%93%E6%95%B0%E6%8D%AE%E5%B9%B3%E5%8F%B0.png) # 前言 目前,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' ``` 2. 根據檢視名稱、檢視維度名稱及檢視維度值的最大時間戳檢索維度值; ``` 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 會定時掃描載入資料視圖表中所有處於 **啟用** 狀態的檢視,然後使用檢視名稱從其它幾類元資料表中掃描載入檢視相應的維度、指標、資料表等資訊。如果需要更新資料檢視,只需要增加或更新相應的元資料記錄,下一次掃描完成之後即可