大資料場景下,每天可能都要在離線集群,執行大量的任務來支援產品、運營的分析查詢。任務越來越多的時候,就會有越來越多的依賴關係,每乙個任務都需要等需要的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...