druid查詢

来源:https://www.cnblogs.com/xujieyang4j/archive/2018/06/07/9153443.html
-Advertisement-
Play Games

druid為各種場景提供了豐富的查詢類型。 查詢由各種JSON屬性組合而成,不同類型的查詢,JSON屬性不同,下麵主要介紹常用的查詢類型。 1. Components Datasources 一個數據源等價於druid表。此外,一個查詢也可以作為數據源,提供類似於子查詢的功能。查詢數據源目前只支持G ...


druid為各種場景提供了豐富的查詢類型。 查詢由各種JSON屬性組合而成,不同類型的查詢,JSON屬性不同,下麵主要介紹常用的查詢類型。

1. Components

  1. Datasources

    一個數據源等價於druid表。此外,一個查詢也可以作為數據源,提供類似於子查詢的功能。查詢數據源目前只支持GroupBy查詢

    • Table Data Source

      最常用的類型

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Union Data Source

      聯合數據源中的數據源必須擁有相同的schema。聯合查詢只能被髮送給broker/router節點,不支持直接發送到歷史節點

      {
         "type": "union",
         "dataSources": ["<string_value1>", "<string_value2>", "<string_value3>", ... ]
      }
      

        

  2. Filters

    • Selector filter

      等價於sql的where countryIsoCode = 'US'

      {
            "queryType": "scan",
            "dataSource": {
              "type": "table",
              "name": "wikipedia3"
            },
            "filter": {
              "type": "selector",
              "dimension": "countryIsoCode",
              "value": "US"
            },
            "resultFormat": "list",
            "columns": [
              "page",
              "countryName",
              "cityName"
            ],
            "intervals": [
              "2016-06-27/2016-06-28"
            ],
            "limit": 5
          }
      

        

    • Column Comparison filter

      等價於sql的where countryName = cityName

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "columnComparison",
          "dimensions": [
            "countryName",
            "cityName"
          ]
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Regular expression filter

      正則表達式,支持標準的java正則表達式,下麵的查詢表示countryIsoCode以U開頭

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "regex",
          "dimension": "countryIsoCode",
          "pattern": "^U"
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Logical expression filters

      支持and or not,下麵的等價於 where countryIsoCode = 'US' and cityName = 'New York'

      {
            "queryType": "scan",
            "dataSource": {
              "type": "table",
              "name": "wikipedia3"
            },
            "filter": {
              "type": "and",
              "fields": [
                {
                  "type": "selector",
                  "dimension": "countryIsoCode",
                  "value": "US"
                },
                {
                  "type": "selector",
                  "dimension": "cityName",
                  "value": "New York"
                }
              ]
            },
            "resultFormat": "list",
            "columns": [
              "page",
              "countryName",
              "cityName",
              "countryIsoCode"
            ],
            "intervals": [
              "2016-06-27/2016-06-28"
            ],
            "limit": 5
          }
      

        

    • JavaScript filter

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "javascript",
          "dimension" : "countryIsoCode",
          "function" : "function(value) { return (value == 'US' || value == 'CN') }"
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Search filter

      用於部分字元串匹配,如下麵的表示包含foo,並且對大小寫不敏感

      {
        "filter": {
          "type": "search",
          "dimension": "product",
          "query": {
            "type": "insensitive_contains",
            "value": "foo"
          }
        }
      }
      

        

    • In filter

      等價於where countryIsoCode in ('US', 'CN')

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "in",
          "dimension" : "countryIsoCode",
          "values": ["US", "CN"]
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Like filter

      等價於where countryIsoCode like '%U'

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "like",
          "dimension" : "countryIsoCode",
          "pattern": "%U"
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

    • Bound filter

      等價於 "CN" < countryIsoCode < "US"

      {
        "queryType": "scan",
        "dataSource": {
          "type": "table",
          "name": "wikipedia3"
        },
        "filter": {
          "type": "bound",
          "dimension" : "countryIsoCode",
          "lower": "CN", 
          "lowerStrict": true,
          "upper": "US" , 
          "ordering": "numeric",
          "upperStrict": true,
          "ordering": "lexicographic"
        },
        "resultFormat": "list",
        "columns": [
          "page",
          "countryName",
          "cityName",
          "countryIsoCode"
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ],
        "limit": 5
      }
      

        

  3. Aggregations

    • Count aggregator

      select 
          page, 
          count(*) as num
      from wikipedia3 
      where "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-28 00:00:00'
      group by page
      order by num desc
      limit 5
      

        

      {
        "queryType": "topN",
        "dataSource": "wikipedia3",
        "dimension": "page",
        "threshold": 5,
        "metric": "num",
        "granularity": "all",
        "aggregations": [
          {
            "type": "count",
            "name": "num"
          }
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ]
      }
      

        

    • Sum aggregators

      longSum、doubleSum、floatSum

      select 
          page, 
          sum(delta) as num
      from wikipedia3 
      where "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-28 00:00:00'
      group by page
      order by page asc
      limit 5
      

        

      {
        "queryType": "topN",
        "dataSource": "wikipedia3",
        "dimension": "page",
        "threshold": 5,
        "metric": "num",
        "granularity": "all",
        "aggregations": [
          {
            "type": "longSum",
            "name": "num",
            "fieldName" : "delta"
          }
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ]
      }
      

        

    • Min / Max aggregators

      doubleMin、doubleMax、floatMin、floatMax、longMin、longMax

      select 
          page, 
          max(delta) as num
      from wikipedia3 
      where "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-28 00:00:00'
      group by page
      order by page asc
      limit 5
      

        

      {
        "queryType": "topN",
        "dataSource": "wikipedia3",
        "dimension": "page",
        "threshold": 5,
        "metric": "num",
        "granularity": "all",
        "aggregations": [
          {
            "type": "longMax",
            "name": "num",
            "fieldName" : "delta"
          }
        ],
        "intervals": [
          "2016-06-27/2016-06-28"
        ]
      }
      

        

    • First / Last aggregator

      不能在數據攝入的時候使用,只能用於查詢

      Last:最大時間戳對應的數據,0 if no row exist;First最小時間戳對應的數據,0 if no row exist

    • JavaScript aggregator

  4. Post Aggregations

    對Aggregations的結果進行二次加工並輸出,最終的結果既包含Aggregations的結果也包含Post Aggregations的結果

2. Timeseries

統計一段時間內的彙總數據

SELECT count(*) as num,
sum(added)
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'

  

{
  "queryType": "timeseries",
  "dataSource": "wikipedia3",
  "granularity": "all",
  "aggregations": [
    { "type": "count", "name": "count" },
    { "type": "longSum", "name": "added", "fieldName": "added" }
  ],
  "intervals": [ "2016-06-27/2016-06-28" ]
}

  

3. TopN

返回前N條數據,並可以按照metric排序,可以支持維度,但只有一個

SELECT
    page,
    sum(added) as num
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'
group by page
order by num desc
limit 5

  

{
  "queryType": "topN",
  "dataSource": "wikipedia3",
  "dimension": "page",
  "threshold": 5,
  "metric": "added",
  "granularity": "all",
  "aggregations": [
    {
      "type": "doubleSum",
      "name": "added",
      "fieldName": "added"
    }
  ],
  "intervals": [ "2016-06-27/2016-06-28" ]
}

  

4. GroupBy

能對指定的多個維度分組,也支持對指定的維度排序,也支持limit,但是性能比TopN和Timeseries要差很多

SELECT
    page,
    countryName,
    sum(added) as num,
    sum(delta) as num2
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'
group by page,countryName
order by num desc
limit 5

  

{
  "queryType": "groupBy",
  "dataSource": "wikipedia3",
  "granularity": "all",
  "dimensions": [
    "page",
    "countryName"
  ],
  "limitSpec": {
    "type": "default",
    "limit": 5,
    "columns": [
      {
        "dimension": "added",
        "direction": "descending",
        "dimensionOrder": {
          "type": "numeric"
        }
      }
    ]
  },
  "aggregations": [
    {
      "type": "longSum",
      "name": "added",
      "fieldName": "added"
    },
    {
      "type": "longSum",
      "name": "delta",
      "fieldName": "delta"
    }
  ],
  "intervals": [
    "2016-06-27/2016-06-28"
  ]
}

  

5. Search

類似於like操作,可以查詢多個維度列,不支持聚合

SELECT
page,
countryName
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'
and page like '%C' or countryName like '%C'
limit 5

  

{
  "queryType": "search",
  "dataSource": "wikipedia3",
  "granularity": "all",
  "dimensions": [
    "page",
    "countryName"
  ],
  "query": {
    "type": "insensitive_contains",
    "value": "C"
  },
  "sort" : {
    "type": "lexicographic"
  },
  "limit": 5,
  "intervals": [
    "2016-06-27/2016-06-28"
  ]
}

  

6. Select

查數據,不支持聚合,但支持分頁,排序

SELECT
*
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'
limit 0,5

  

{
  "queryType": "select",
  "dataSource": "wikipedia3",
  "granularity": "all",
  "dimensions":[],
  "metrics":[],
  "pagingSpec":{"pagingIdentifiers": {}, "threshold":5},
  "intervals": [
    "2016-06-27/2016-06-28"
  ]
}

  

7. Scan

類似於Select,但不支持分頁,但是如果沒有分頁需求,推薦使用這個,性能比Select好

SELECT
page,countryName
FROM wikipedia
WHERE "__time" BETWEEN TIMESTAMP '2016-06-27 00:00:00' AND TIMESTAMP '2016-06-27 23:59:59'
limit 5

  

{
   "queryType": "scan",
   "dataSource": "wikipedia3",
   "resultFormat": "list",
   "columns":["page","countryName"],
   "intervals": [
     "2016-06-27/2016-06-28"
   ],
   "batchSize":20480,
   "limit":5
 }

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • from selenium import webdriverimport unittestimport importlib,sysimport timeimportlib.reload(sys)sys.getdefaultencoding()class TestLogin(unittest.Test ...
  • Win xp重置 編輯 要為 Windows XP 重置 Winsock,請按照下列步驟操作: 1.單擊“開始”,運行中輸入cmd。 2.然後輸入命令 netsh winsock reset。 3.重啟電腦。 Win7重置 編輯 要為 Windows 7 重置 Winsock,請按照下列步驟操作: ...
  • vim按d表示剪切按dd剪切一行vim命令:命令模式 /關鍵字 n繼續向下查找 vim的多行註釋:1.按ctrl + v進入 visual block模式2.按上下選中要註釋的行3.按大寫字母I,再插入註釋符,例如//4.按兩下esc5.按ctrl + v進入 visual block模式,按箭頭選 ...
  • ELK:Elasticsearch Logstash Kibana Elasticsearch:是基於JSON的分散式搜索和分析引擎,專為實現水平擴展、高可用和管理便捷性而設計 Logstash:是動態數據收集管道,擁有可擴展的插件生態系統 Kibana:能夠已圖形化呈現數據,並且具有可擴展的用戶界 ...
  • 1.yum install epel-release(安裝epel(Extra Packages for Enterprise Linux)) 2.yum repolist(確保epel添加到yum的源裡邊,如果沒有刪除epel-release重新安裝) 3.yum install nginx(安裝 ...
  • Shell編程之條件語句 學習目標: 掌握shell腳本條件測試 掌握if語句編程 目錄結構: 條件測試 條件測試概述 l 對特定的條件進行判斷,以決定如何執行操作 l 測試的方法 方法1:test 條件表達式 方法2:【條件表達式】 l 當條件成立時,測試語句的返回值為0,否則為其他數值 條件測試 ...
  • 一、現象描述 今天在調試兩台物理機,做完配置重啟主機後,發現一臺伺服器網路無法ssh連接,通過ILO進去ifconfig發現eth0配置的IP地址等信息丟失,手動重啟後,可以ssh連接,但過一段時間,ssh又再次登錄失敗,ifconfig eth0的相關信息也丟失。 二、錯誤原因 centos 6. ...
  • 深圳銳科光電科技有限公司的DALI色溫模塊符合IEC62386-102和IEC62386-207(LED模塊)和IEC62386-209(色溫)標準,同時支持DT6(LED模塊)和DT8(顏色控制-色溫)協議。採用了原裝進口ST單片機晶元,完美相容TRIDONIC(銳高)、OSRAM(歐司朗)、PH... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...