Druid:如何在没有聚合功能的情况下将数值数据添加到指标中

Posted

技术标签:

【中文标题】Druid:如何在没有聚合功能的情况下将数值数据添加到指标中【英文标题】:Druid:how to add a numeric data to metric without aggregation function 【发布时间】:2017-05-23 09:35:40 【问题描述】:

场景是我想设置一个股票报价服务器并将报价数据保存到德鲁伊。

我的要求是通过查询得到所有股票的最新价格。

但是我注意到druid的查询接口比如时间序列只适用于metrics字段,而不是维度字段。

所以我考虑将价格作为指标之一,但不需要汇总。

我该怎么做?

有什么建议吗?

这是我的宁静配置文件。


  "dataSources" : 
     "stock-index-topic" : 
      "spec" : 
        "dataSchema" : 
          "dataSource" : "stock-index-topic",
          "parser" : 
            "type" : "string",
            "parseSpec" : 
              "timestampSpec" : 
                "column" : "timestamp",
                "format" : "auto"
              ,
              "dimensionsSpec" : 
                "dimensions" : ["code","name","acronym","market","tradeVolume","totalValueTraded","preClosePx","openPrice","highPrice","lowPrice","latestPrice","closePx"],
                "dimensionExclusions" : [
                  "timestamp",
                  "value"
                ]
              ,
              "format" : "json"
            
          ,
          "granularitySpec" : 
            "type" : "uniform",
            "segmentGranularity" : "HOUR",
            "queryGranularity" : "SECOND",
          ,
          "metricsSpec" : [
            
              "name" : "firstPrice",
              "type" : "doubleFirst",
              "fieldName" : "tradePrice"
            ,
              "name" : "lastPrice",
              "type" : "doubleLast",
              "fieldName" : "tradePrice"
            , 
              "name" : "minPrice",
              "type" : "doubleMin",
              "fieldName" : "tradePrice"
            , 
              "name" : "maxPrice",
              "type" : "doubleMax",
              "fieldName" : "tradePrice"
            
          ]
        ,
        "ioConfig" : 
          "type" : "realtime"
        ,
        "tuningConfig" : 
          "type" : "realtime",
          "maxRowsInMemory" : "100000",
          "intermediatePersistPeriod" : "PT10M",
          "windowPeriod" : "PT10M"
        
      ,
      "properties" : 
        "task.partitions" : "1",
        "task.replicants" : "1",
        "topicPattern" : "stock-index-topic"
      
    
  ,
  "properties" : 
    "zookeeper.connect" : "localhost:2181",
    "druid.discovery.curator.path" : "/druid/discovery",
    "druid.selectors.indexing.serviceName" : "druid/overlord",
    "commit.periodMillis" : "15000",
    "consumer.numThreads" : "2",
    "kafka.zookeeper.connect" : "localhost:2181",
    "kafka.group.id" : "tranquility-kafka"
  

【问题讨论】:

【参考方案1】:

我认为您应该将 [latest_price] 作为新的数字维度,考虑到 druid 的工作原理,从性能和查询的角度来看它会好得多。 指标和旨在作为核心执行聚合功能的指标,因此对您的用例没有帮助。

【讨论】:

以上是关于Druid:如何在没有聚合功能的情况下将数值数据添加到指标中的主要内容,如果未能解决你的问题,请参考以下文章

Apache Druid的SQL查询使用手册

如何在mongo聚合不起作用的情况下将字符串转换为日期总是返回null?

在没有 DST 的情况下将时间保存为 UTC(时刻)

如何在没有 Facebook、Twitter 等的情况下将社交功能集成到 iOS 和/或 Android 应用程序中?

如何在不使用数据透视的情况下将行转换或转置为 SQL 中的列?

在 SQL 中不进行聚合的数据透视