日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es6 dsl与sql对比

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6 dsl与sql对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【README】

1.本文總結了 dsl 與 sql的對比寫法;

2.es采用 7.2.1 版本;


【1】創建es索引

1)新建一個數據庫事務執行日志索引

put localhost:9200/txlog

{ "mappings" :{ "properties":{"APPNAME":{"type":"keyword"} , "ITFNAME":{"type":"keyword"}, "DBNAME":{"type":"keyword"}, "EXE_COST":{"type":"integer"}, "EXE_TIMES":{"type":"integer"} , "CREATE_TIME":{"type":"date", "format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"} }} }

字段含義:

序號字段名描述
1APPNAME應用名
2ITFNAME接口名
3DBNAME數據庫名
4EXE_COST執行耗時
5EXE_TIMES??????? 執行次數
6CREATE_TIME創建時間

字段類型為 keyword,即不分詞,支持精確查找,不支持模糊查找;

補充: 如要分詞,使用 text,即支持模糊查找;


【2】插入10條數據

采用 bulk 批量插入api;如下:

post localhost:9200/txlog/_doc/_bulk

{"index":{}} {"APPNAME":"trcd1", "ITFNAME":"TRLOGQRY11", "DBNAME":"TRDB11", "EXE_COST":"11", "EXE_TIMES":"2", "CREATE_TIME":"2022-04-13 20:09:00"} {"index":{}} {"APPNAME":"trcd1", "ITFNAME":"TRLOGQRY11", "DBNAME":"TRDB11", "EXE_COST":"12", "EXE_TIMES":"3", "CREATE_TIME":"2022-04-14 20:09:00"} {"index":{}} {"APPNAME":"trcd1", "ITFNAME":"TRLOGQRY11", "DBNAME":"TRDB11", "EXE_COST":"13", "EXE_TIMES":"4", "CREATE_TIME":"2022-04-15 20:09:00"} {"index":{}} {"APPNAME":"trcd1", "ITFNAME":"TRLOGQRY11", "DBNAME":"TRDB11", "EXE_COST":"14", "EXE_TIMES":"5", "CREATE_TIME":"2022-04-16 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY21", "DBNAME":"TRDB21", "EXE_COST":"15", "EXE_TIMES":"6", "CREATE_TIME":"2022-04-17 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY21", "DBNAME":"TRDB21", "EXE_COST":"16", "EXE_TIMES":"7", "CREATE_TIME":"2022-04-17 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY22", "DBNAME":"TRDB22", "EXE_COST":"17", "EXE_TIMES":"8", "CREATE_TIME":"2022-04-19 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY23", "DBNAME":"TRDB01", "EXE_COST":"18", "EXE_TIMES":"9", "CREATE_TIME":"2022-04-20 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY23", "DBNAME":"TRDB01", "EXE_COST":"19", "EXE_TIMES":"12", "CREATE_TIME":"2022-04-21 20:09:00"} {"index":{}} {"APPNAME":"trcd2", "ITFNAME":"TRLOGQRY23", "DBNAME":"TRDB01", "EXE_COST":"20", "EXE_TIMES":"22", "CREATE_TIME":"2022-04-22 20:09:00"}


【3】dsl與sql對比

【3.0】普通查詢

sql:

select col1, col2 from table1 where col = '' ... limit 10

dsl如下:

{"_source":["APPNAME", "ITFNAME", "DBNAME", "EXE_COST"],"query":{"bool":{"filter":{"bool":{"must":[{"range":{"CREATE_TIME":{"gte":"2022-04-13 00:00:00", "lte":"2022-04-19 00:00:00"}}}]}}}}, "size":10 }

【3.1】 范圍查詢

sql:

where create_time > '' and create_time < ''

dsl如下:把 bool 封裝在filter里面,不會計算分數,提高查詢性能

{"query":{"bool":{"filter":{"bool":{"must":[{"range":{"CREATE_TIME":{"gte":"2022-04-13 00:00:00", "lte":"2022-04-15 00:00:00"}}}]}}}} }

【3.2】聚合查詢

1)根據appname 分組 求均值,求和;

sql如下:
?

select sum(exe_times) as sum_times, avg(exe_cost) as avg_cost from table where create_time > '#' and create_time < '#' group by appname

dsl如下:(先分組,后求均值,求和)

{"query":{"bool":{"filter":{"bool":{"must":[{"range":{"CREATE_TIME":{"gte":"2022-04-13 00:00:00", "lte":"2022-04-19 00:00:00"}}}]}}}}, "size":0, "aggs":{"group_by_app":{"terms":{"field":"APPNAME"}, "aggs":{"sum_times":{"sum":{"field":"EXE_TIMES"}}, "avg_cost":{"avg":{"field":"EXE_COST"}}}}} }

查詢結果:

"aggregations": {"group_by_app": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "trcd1","doc_count": 4,"avg_cost": {"value": 12.5},"sum_times": {"value": 14.0}},{"key": "trcd2","doc_count": 2,"avg_cost": {"value": 15.5},"sum_times": {"value": 13.0}}]}}

2)根據多個字段分組,如 應用名, 數據庫名

sql:

select * from (select sum(exe_times) as sum_times, avg(exe_cost) as avg_cost from table where create_time > '#' and create_time < '#'group by appname,dbname ) a order by sum_times desc limit 3

dsl:使用 painless 腳本 根據多個字段分組;

{"query":{"bool":{"filter":{"bool":{"must":[{"range":{"CREATE_TIME":{"gte":"2022-04-13 00:00:00", "lte":"2022-04-19 00:00:00"}}}]}}}}, "size":0, "aggs":{"group_by_app":{"terms":{"script":{"source":"doc['APPNAME'] + '#SPLIT#' + doc['DBNAME']", "lang":"painless"}, "size":"3", "min_doc_count":"1", "order":{"sum_times":"desc"}}, "aggs":{"sum_times":{"sum":{"field":"EXE_TIMES"}}, "avg_cost":{"avg":{"field":"EXE_COST"}}}}} }

步驟:

  • 按照 appname, dbname 分組;
  • 聚合操作:求和,求均值;
  • 按照 sum_times 倒排 聚合結果;

  • 總結

    以上是生活随笔為你收集整理的es6 dsl与sql对比的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。