python解析sql欄位血緣 SQL血緣關係分析

2021-10-13 08:51:49 字數 1965 閱讀 9107

大資料場景下,每天可能都要在離線集群,執行大量的任務來支援產品、運營的分析查詢。任務越來越多的時候,就會有越來越多的依賴關係,每乙個任務都需要等需要的input表生產出來後,再去生產自己的output表。最開始的時候,依賴關係自然是可以通過管理員來管理,隨著任務量的加大,就需要乙個分析工具來解析sql的血緣關係,並且自行依賴上血緣表。

本文就介紹乙個使用druid parser,來解析sql的血緣關係。

一、sql血緣關係含義

sql血緣關係的含義是將sql中包含的表全部輸出。

例:如下sql,需要解析出該sql包含supindb.student、supindb.college兩張表。

string sql = "select * from " +

"(select * from supindb.student d where dt='20190202')a " +

"left join " +

"(select * from supindb.college c where dt='20190202')b " +

" on a.uid=b.uid " +

"where a.uid > 0";

二、sql血緣關係解析實現

sql血緣關係解析pom依賴

com.alibaba

druid

1.0.14

sql血緣關係解析**

sql血緣關係解析**僅解析select、update、insert、delete四種sql,其他種類,可依據需求自行新增相應邏輯。

public class parent else if (stat.getselectcount() > 0) else if (stat.getupdatecount() > 0 ) else if (stat.getdeletecount() > 0) { //delete

string delete = tablename.getname();

if (!delete.contains("."))

delete = db + "." + delete;

deleteset.add(delete);

result.put("select",selectset);

result.put("insert",insertset);

result.put("update",updateset);

result.put("delete",deleteset);

return result;

public static void main(string args) {

string sql = "select * from " +

"(select * from supindb.student d where dt='20190202')a " +

"left join " +

"(select * from supindb.college c where dt='20190202')b " +

" on a.uid=b.uid " +

"where a.uid > 0";

//sql = "update supindb.college set uid='22333' where name='小明'";

//sql = "delete from supindb.college where uid= '22223333'";

map> getfrom = getfromto(sql);

for (map.entry> entry : getfrom.entryset()){

system.out.println("***************=");

system.out.println("key=" + entry.getkey());

for (string table : entry.getvalue()){

system.out.println(table);

執行結果

image.png

SQL解析Json欄位

mysql支援原生json型別,使用json資料型別相較於將json格式的字串儲存在string型中的優勢有 儲存時會自動驗證json文字 可以優化儲存格式。儲存在json型中的json文字會被轉換成乙個支援快速讀取的文件元素,這樣在使用時不需要再解析文字,並且可以直接通過鍵和索引訪問其中的子物件而...

druid字段級 Druid中sql解析

基於druid解析查詢sql,在jdbc api基礎上進行外掛程式開發的時候需要。import com.alibaba.druid.sql.sqlutils import com.alibaba.druid.sql.ast.statement.sqlselect import com.alibaba...

TCP欄位解析

tcp是乙個協議,那這個協議是如何定義的,它的資料格式是什麼樣子的呢?要進行更深層次的剖析,就 需要了解,甚至是熟記tcp協議中每個欄位的含義。哦,來吧。上面就是tcp協議頭部的格式,由於它太重要了,是理解其它內容的基礎,下面就將每個欄位的資訊都詳 細的說明一下。1 source port和dest...