node-druid-query, Druid的简单查询库( http

分享于 

37分钟阅读

GitHub

  繁體 雙語
Simple querying library for Druid (http://druid.io)
  • 源代码名称:node-druid-query
  • 源代码网址:http://www.github.com/7eggs/node-druid-query
  • node-druid-query源代码文档
  • node-druid-query源代码下载
  • Git URL:
    git://www.github.com/7eggs/node-druid-query.git
    Git Clone代码到本地:
    git clone http://www.github.com/7eggs/node-druid-query
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/7eggs/node-druid-query
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    基于的德鲁伊查询

    NPM versionBuild Status

    node.js 中( http://druid.io )的简单查询。 灵感来自 ruby

    目录:

    安装

    
    npm install druid-query --save
    
    
    
    

    示例( 简单)

    var Druid =require('druid-query')
    , Client =Druid.Client, Query =Druid.Query, client =newClient('http://127.0.0.1:8080')var q1 =client.groupBy()q1.dataSource('randSeq')q1.granularity('all')
    q1
    . dimensions([])
    . aggregation('count', 'rows')
    . aggregation('doubleSum', 'e', 'events')
    . aggregation('doubleSum', 'randomNumberSum', 'outColumn')
    . postAggregation('arithmetic', 'avg_random', '/', [
     Query.postAggregation('fieldAccess', null, 'randomNumberSum')
     Query.postAggregation('fieldAccess', null, 'rows')
     ])
    . interval(Date.UTC(2012, 9, 1), Date.UTC(2020, 0, 1))q1.exec(function(err, result) {
     if (err) {
     // handle error... }
     else {
     beCoolWith(result)
     }
    })var q2 =newDruid.TimeBoundaryQuery()q2.dataSource('wikipedia')client.exec(q2, function(err, result) {
     // handle results})

    示例( ZooKeeper )

    var Druid =require('druid-query')
    , druid =newDruid('localhost:2181,localhost:2182/druid', '/broker', {preferSSL:true})var query =druid.groupBy('myCoolDS')
    query
    . filter('selector', 'dimension1', 100500)
    . dimensions('dimension2', 'dimension3')
    . granularity('day')
    . aggregation('count', 'howMany')
    . interval(Date.UTC(2012, 0, 1), Date.UTC(2015, 0, 1))
    . exec(function(err, result) {
     // handle error// handle result })var anotherQuery =newDruid.SegmentMetadataQuery()anotherQuery.dataSource('superDS')anotherQuery.interval('2011-01-01/2012-01-01')anotherQuery.interval('2013-01-01/2014-01-01')druid.exec(anotherQuery, function(err, results) {
     if (err) {
     // error reasons:// 1. data source is not served by any known node// 2. query validation error// 3. error from Druid node after executing query }
     else {
     // handle results }
    })druid.once('ready', function() {
     // Do what you want with this event :-)})druid.on('error', function(err) {
     // handle client error here})// Call. end() when finished working with Druiddruid.end()

    API

    德鲁伊

    使用ZooKeeper获取德鲁伊节点数据并获取每个 node 提供的数据源的客户机。

    事件
    • ready - 在客户端完成节点数据( 所以可以用了)的( re ) 加载时发出。 如果客户机偶尔失去与ZooKeeper的连接,它是 establed,客户机又加载 node 数据。
    • error - 当客户端收到任何错误时发出。
    Druid ( connectionString,discoveryPath,[options] )

    创建客户端实例。

    参数

    • connectionString string - ZooKeeper连接字符串。
    • discoveryPath string - 服务发现路径。
    • 选项 object - 客户端选项。
      • zookeeper 选项传递到 node-zookeeper-clientcreateClient() 函数。
      • preferSSL - 如果可用,使用 Druid node的SSL端口。 默认值:false
    void cancel(query, callback )

    取消查询。与 #exec(query, 回调相同。

    参数

    • 查询 Query - Query ( 或者子类类) 实例。
    • 回调 function - 带有以下签名的回调函数: (err)
    void end( )

    结束与客户端的工作。

    void exec(query, callback )

    在合适的node 上运行 Query

    如果客户端不是 ready ( 读取上面的事件 ) 方法,则将等待 ready 或者 error 事件继续。

    如果 Query 数据源没有被找到,发现的节点 callback 将被相应的错误调用。

    一旦 node的并发运行查询数最小,Query 被发送到它。

    参数

    • 查询 Query - Query ( 或者子类类) 实例。
    • 回调 function - 带有以下签名的回调函数: (err, result)
    string[] getDataSources ( )

    获取数据源列表。

    DruidNodes[] getNodes ( )

    获取可用节点的列表。

    DruidNode 扩展了 Druid.Client。它保持了库的node 数据和并发运行的查询( 用于简单负载平衡) 数量。

    GroupByQuery groupBy(dataSource, [rawQuery] ) SearchQuery search(dataSource, [rawQuery] ) SegmentMetadataQuery segmentMetadata(dataSource, [rawQuery] ) TimeBoundaryQuery timeBoundary(dataSource, [rawQuery] ) TimeseriesQuery timeseries(dataSource, [rawQuery] ) TopNQuery topN(dataSource, [rawQuery] )

    使用 dataSource 集合返回查询实例。 查询附加到调用 Druid 实例,因此调用 Druid#exec ( 查询,回调) 来执行查询。

    参数

    • 数据源 string - 为它的创建 Query的数据源名称。
    • rawQuery object - 作为第二个参数传递给 Query 构造函数。

    客户端( druid )

    使用 Druid node URL的基本客户端类。

    客户端( url )

    创建客户端实例。

    参数

    • URL string - Druid node URL。
    static void fromZooKeeper(connectionString, discoveryPath, [options], callback )

    通过使用 node-zookeper-client 查找Druid服务,并选择随机 node。 对于选择的node Client 实例,创建。

    参数

    • connectionString string - ZooKeeper连接字符串。
    • discoveryPath string - 服务发现路径。
    • 选项 object - 查找选项。 目前我们只有一个选择:
      • preferSSL - 如果可用,使用 Druid node的SSL端口。 默认值:false
    void cancel(query, callback )

    取消查询。

    参数

    • 查询 Query - 查询对象。
    • callback(err) function - 回调函数。
    void dataSources(callback )

    获取数据源列表。

    参数

    • 回调(。err,数据源) function - 回调函数。
    void exec(query, callback )

    执行查询。

    参数

    • 查询 Query - 查询对象。
    • 回调( 错误,结果) function - 回调函数。
    GroupByQuery groupBy( [rawQuery] ) SearchQuery search( [rawQuery] ) SegmentMetadataQuery segmentMetadata( [rawQuery] ) TimeBoundaryQuery timeBoundary( [rawQuery] ) TimeseriesQuery timeseries( [rawQuery] ) TopNQuery topN( [rawQuery] )

    创建 Query 实例并将它的附加到客户端。

    参数

    • rawQuery object - 作为第二个参数传递给 Query 构造函数。

    查询( druid。查询)

    注意:如果没有指定参数,每个字段方法都返回field值。

    查询( 客户端,[rawQuery] )

    创建查询实例

    参数

    • 客户端 Client - 客户端实例。
    • rawQuery object - 原始查询数据( 可以在创建 Query 对象之后调用 Query#exec(callback) 或者 Druid#exec(query, callback) )。 记住如果构造函数不是基 Query 类( 比如。 GroupByQuery ) queryType 属性首先从 rawQuery 对象中移除以防止错误。
    void cancel(callback )

    取消查询。应为此设置 context.queryId

    参数

    • callback(err) function - 回调函数。
    void exec(callback )

    执行查询(。仅在客户端 比如 附加到由某些客户端实例创建的情况下)。

    参数

    • 回调( 错误,结果) function - 回调函数。
    object toJSON ( )

    返回查询数据。

    staticobject 聚合( 类型,名称,[args...] )

    创建聚合规范。

    参数

    • 类型 string | object - 聚合类型: cardinalitycountdoubleSumhyperUniquejavascriptlongSummaxmin。 也可以在这里参数中将聚合指定为对象。
    • 名称 string - 聚合输出名称。
    • args ...* - 聚合特定参数。

    Query.aggregation('cardinality', name, fieldNames, byRow)

    • fieldNames string[] - 计算基数的字段。
    • byRow boolean - 如果我们要计算不同组合的基数。 默认值:false

    Query.aggregation('count', name)

    • 这里没有参数

    Query.aggregation('doubleSum', name, fieldName)

    • fieldName string - 要与之求和的度量列的名称。

    Query.aggregation('hyperUnique', name, fieldName)

    • fieldName string - 维度名称。

    Query.aggregation('javascript', name, fieldNames, aggregateFn, combineFn, resetFn)

    • fieldNames string[] - 传递给聚合函数的字段名称。
    • aggregateFn string | function - 聚合函数。
    • combineFn string | function - 组合部分部分。
    • resetFn string | function - 初始化函数。

    Query.aggregation('longSum', name, fieldName)

    • fieldName string - 要与之求和的度量列的名称。

    Query.aggregation('max', name, fieldName)

    • fieldName string - 度量列的名称。

    Query.aggregation('min', name, fieldName)

    • fieldName string - 度量列的名称。
    staticobject[] 聚合( 列表。)

    返回聚合的array。

    参数

    • 列出 object[] | object... - 聚合规范的array。 spec可以由 Query.aggregation() 或者原始JavaScript对象返回。
    staticobject extractionFunction ( 类型,[args...] )

    创建 DimExtractionFn 规范。

    参数

    • 类型 string | object - 规范类型: javascriptpartialregexSearchQuerytime - 或者DimExtractionFn规范对象。
    • args ...* - 函数特定参数。

    Query.extractionFunction('javascript', fn)

    • fn string | function - JavaScript函数。

    Query.extractionFunction('partial', regex)

    • 正规表达式 string | RegExp - 匹配正则表达式。

    Query.extractionFunction('regex', regex)

    • 正规表达式 string | RegExp - 匹配正则表达式。

    Query.extractionFunction('searchQuery`, query...)

    • 查询 object |.. .* - 如果指定一个参数,我们将它视为 SearchQuerySpec 对象。 否则,将为所有传递的参数调用 Query.query()

    Query.extractionFunction('time', input, output)

    • 输入 string - 输入时间格式。
    • 输出 string - 输出时间格式。
    staticobject 过滤器( 类型,[args...] )

    创建过滤器规格。

    参数

    • 类型 string | object - 筛选器类型: andjavascriptnotorregexselectorsearchin - 或者原始筛选对象。
    • args ...* - 筛选特定参数。 描述如下。

    Query.filter('and', filters...)

    • 过滤器 object[] |.. .object - and的过滤器列表。

    Query.filter('javascript', dimension, fn)

    • Dimension string - 应用过滤器的维度。
    • fn string | function - 用于应用( 应返回布尔值)的函数。

    Query.filter('not', filter...)

    • 过滤器 string |.. .* - 如果此参数是对象,我们将它的用作过滤器规范。 否则,所有参数都再次传递给 Query.filter()

    Query.filter('or', filters...)

    • 过滤器 object[] |.. .object - or的过滤器列表。

    Query.filter('regex', dimension, pattern)

    • Dimension string - 应用过滤器的维度。
    • Pattern string - Java正则表达式。

    Query.filter('selector', dimension, value)

    • Dimension string - 应用过滤器的维度。
    • * - 要匹配的值。

    Query.filter('search', dimension, query)

    • Dimension string - 应用过滤器的维度。
    • 查询 * - SearchQuerySpec 对象

    Query.filter('in', dimension, values)

    • Dimension string - 应用过滤器的维度。
    • object[] - 要匹配的值。
    具有( 类型,[args...] )的staticobject

    创建 having 规范。

    参数

    • 键入 string | object - HavingSpec对象或者类型: andequalTogreaterThanlessThannotor
    • args ...* - 特定于spec类型的参数。

    Query.having('and', specs...)

    • spec object[] |.. .object - and 操作的规范列表。

    Query.having('equalTo', aggregation, value)

    • 聚合 string - 聚合名称。
    • * - 要匹配的值。

    Query.having('greaterThan', aggregation, value)

    • 聚合 string - 聚合名称。
    • * - 要比较的值。

    Query.having('lessThan', aggregation, value)

    • 聚合 string - 聚合名称。
    • * - 要比较的值。

    Query.having('not', spec...)

    • spec object |.. .* - 如果第一个参数是对象,我们将它用作过滤器规范。 否则,所有参数都再次传递给 Query.having()

    Query.having('or', specs...)

    • spec object[] |.. .object - or 操作的规范列表。
    staticobject 间隔( 启动,[end] )

    创建间隔字符串。

    在指定的一个参数中,它被视为间隔字符串。

    参数

    • 开始 string | number | Date - 间隔字符串或者开始时间作为时间戳,日期字符串或者 Date 对象。
    • 结尾 string | number | Date - 结束时间。
    staticobject orderBy ( 维度,[direction] )

    创建OrderBy规范。

    参数

    • 维度 string - 按维度排序的维度。
    • 方向 string - 排序 direction。 默认值:ASCENDING
    staticobject postAggregation ( 类型,名称,[args...] )

    创建邮政聚合规范。

    参数

    • 类型 string | object - post聚合类型: arithmeticconstantfieldAccesshyperUniqueCardinalityjavascript。 也可以是 ready-to-use post聚合对象( 在这种情况下,不需要其他参数,当然)。
    • 名称 string - post聚合输出名称。
    • args ...* - post聚合特定参数。 阅读以下参数。

    Query.postAggregation('arithmetic', name, op, fields)

    • 运算 string - 算术运算: +,-,* 或者/.
    • 字段 object[] |.. .object - 帖子聚合规范的列表: 原始对象或者 Query.postAggregation() 结果。

    Query.postAggregation('constant', name, value)

    • * - 常量值。

    Query.postAggregation('fieldAccess', name, fieldName)

    • fieldName string - 聚合字段名称。 如果未指定 postAggregation() 第二个参数( name ),则将它的用作 fieldName

    Query.postAggregation('hyperUniqueCardinality', name, fieldName)

    • fieldName string - hyperUnique聚合器的名称。 如果未指定 postAggregation() 第二个参数( name ),则将它的用作 fieldName

    Query.postAggregation('javascript', name, fieldNames, fn)

    • fieldNames string[] - 聚合器名称列表- 作为参数传递给函数。
    • fn string | function - post聚合函数。
    staticobject[] postAggregations ( 列表。)

    返回post聚合规范的array。

    参数

    • 列出 object[] | object... - 聚合规范的array。 它们可以是 Query.postAggregation() 或者原始JavaScript对象返回的。
    查询( 类型,值- )

    创建SearchQuery规范。

    参数

    • 键入 string | object - SearchQuery类型: insensitive_containsfragment 或者已经准备好的SearchQuerySpec对象。
    • string | string[] |.. .string - 要匹配的值如果 typefragment 值( 或者所有的值) 被视为 array。 如果类型为 insensitive_contains 值,则用作 string
    Query 聚合( 类型,名称,[args...] )

    将聚合规范添加到 aggregations

    参数

    • 类型 string | object - 聚合类型: cardinalitycountdoubleSumhyperUniquejavascriptlongSummaxmin。 或者聚合规范作为JS对象。
    • 名称 string - 聚合输出名称。
    • args ...* - 聚合特定参数。 在 Query.aggregation() 描述中读取有关参数的上面。
    Query 聚合( 列表。)

    设置 aggregations 字段。

    参数

    • 列出 object[] | object... - 聚合规范的array。 spec可以由 Query.aggregation() 或者原始JavaScript对象返回。
    Query 绑定( 值)

    设置 TimeBoundaryQuerybound 字段。

    参数

    • string - 必须是 "minTime" 或者 "maxTime"。 否则将引发错误。
    Query 上下文( 数据)

    设置 context 字段在这里阅读更多关于它的内容。

    参数

    • 数据 object
      • timeoutnumber
      • prioritynumber
      • queryIdstring
      • useCacheboolean
      • populateCacheboolean
      • bySegmentboolean
      • finalizeboolean
    数据源( 类型,参数。)

    设置 dataSource 字段

    参数

    • 类型 string | object - 数据源类型。 或者作为字符串或者对象( 数据源结构)的数据源。
    • args ...* - 特定于每个数据源类型的参数。

    Query#dataSource ('表'名称)

    • 名称 string - 数据源名称。

    Query#dataSource ('查询'子查询)

    • 子查询 object | Query - 子查询作为查询实例或者原始查询对象。
    Query 维度( 维度,[outputName],[extractFn] )

    设置 DimensionSpec。

    如果第一个参数是一个对象,那么只需将它用作 DimensionSpec。

    如果不依赖参数长度,则创建默认或者提取维度规范。

    如果第二个或者第三个参数是对象 ExtractionDimensionSpec,则创建。

    在其他情况下创建 DefaultDimensionSpec。

    参数

    • Dimension string | object - 用于操作的维度。 或者标注定义作为对象。
    • outputName string - 维度输出名称。
    • extractFn object - 由 Query.extractionFunction() 或者原始JavaScript对象创建的提取函数规范。
    Query 维度( 列表。)

    设置尺寸。

    参数

    • 列表 string[] |.. .string - 维度列表。
    Query 过滤器( 类型,[args...] )

    设置过滤器规格。

    参数

    • 类型 string | object - 筛选器类型: andjavascriptnotorregexselector。 否则,可以将整个筛选器对象指定为第一个参数。
    • args ...* - 筛选特定参数。 它们在 Query.filter() 方法描述中描述。
    Query 粒度( 类型,[args...] )

    设置查询的粒度。

    参数

    • string | object - 作为字符串或者对象的粒度。 如果 value 为字符串,则它必须是下列值之一: allnoneminutefifteen_minutethirty_minutehourdaydurationperiod,表示粒度规范对象。
    • 参数 ...* - 特定参数( 如果 valueperiod 或者 duration )。

    Query#granularity ('持续时间',持续时间,[origin] )

    • 持续时间 string | number - 毫秒内的持续时间值。
    • 起点 string | number | Date - 开始时间( 可选)。

    Query#granularity ('周期'。句号,[timeZone],[origin] )

    • 期间 string - ISO-8601 持续时间格式。
    • 时区 string - 时区。默认值: UTC ( 可选)。
    • 起点 string | number | Date - 开始时间( 可选)。
    具有( 类型,[args...] )的Query

    设置 having 字段。

    参数

    • 键入 string | object - HavingSpec对象或者类型: andequalTogreaterThanlessThannotor
    • args ...* - 特定于spec类型的参数。 它们在 Query.having() 中描述。
    Query 间隔( 开始,[end] )

    将间隔字符串添加到 intervals 字段。

    参数

    • 开始 number | string | Date - 开始时间或者间隔字符串。
    • 结尾 number | string | Date - 结束时间。
    时间间隔( 间隔。)

    设置间隔。

    参数

    • 列表 string[] |.. .string - 间隔字符串列表。
    Query limitSpec ( 类型,限制,orderByColumns )

    设置LimitSpec字段。

    参数

    • 类型 string | object - 原始LimitSpec对象或者LimitSpec类型。
    • 限制 number - 返回记录的限制。
    • orderByColumns object[] | string[] - 订购规范 array。 规范可以是字符串或者 Query.orderBy()的结果。
    Query 合并( 值)

    设置 merge 字段值。

    参数

    • boolean - 将所有单独的分段元数据结果合并为单个结果。
    Query 度量( 类型,[args...] )

    设置由 metric 值标识的TopNMetricSpec

    参数

    • 键入 string | object - TopNMetricSpec 对象或者spec类型: alphaNumericlexicographicnumeric
    • args ...* - 特定于spec类型的参数。 下面描述了它们。

    Query#metric ('字母数字',[previousStop] )

    • previousStop string - 字典排序( 可选)的起始点。

    Query#metric ('字典',[previousStop] )

    • previousStop string - alpha数值排序( 可选)的起始点。

    Query#metric ('数字',公制)

    • 度量值 string - 实际的度量字段,结果将按。
    ( 类型,名,[args...] )

    postAggregations array 添加邮政聚合规范。

    参数

    • 类型 string | object - post聚合类型: arithmeticconstantfieldAccesshyperUniqueCardinalityjavascript。 它可以是post聚合对象本身。
    • 名称 string - post聚合输出名称。
    • args ...* - post聚合特定参数。 在 Query.postAggregation() 方法描述中读取有关参数的上面。
    Query postAggregations ( 列表。)

    设置 postAggregations 字段。

    参数

    • 列出 object[] | object... - 聚合规范的array。 它们可以是 Query.postAggregation() 或者原始JavaScript对象返回的。
    Query 查询( [type],值,区分大小写)

    设置SearchQuery规范( Query 字段)。

    参数

    • 键入 string | object - SearchQuery类型: insensitive_containsfragmentcontains。 也可以是 SearchQuerySpec 对象。
    • string | string[] - 要匹配的值。 如果 typefragment 值被视为 array。 如果类型为 insensitive_contains 值,则用作 string
    • 区分大小写的boolean - 是否应该将字符串作为区分大小写的大小写进行比较。 对类型 insensitive_contains 没有任何影响。
    Query queryType ( 类型)

    设置查询类型。只有在使用 Query 基类时,这里方法才应使用。 所有 Query 后代都自动设置 queryType 字段。

    参数

    • 键入 string - 有效查询类型: groupBysearchsegmentMetadatatimeBoundarytimeseriestopN
    Query searchDimensions ( 列表。)

    设置 searchDimensions 字段。

    参数

    • 列表 string[] |.. .string - 维度列表。
    Query 排序( 类型)

    设置 sort 字段。

    参数

    • 类型 string - 排序类型: lexicographic 或者 strlen
    Query 阈值( 值)

    设置 threshold 值。

    参数

    • number - 阈值值。
    Query toInclude ( 值)

    设置 toInclude 字段- 应在结果中返回的列。

    参数

    • string | string[] | object - allnone 或者 array 列名( 列表) 或者 toInclude 原始规范数据作为对象。

    查询

    ( druid。groupbyquery )

    http://druid.io/docs/0.6.121/GroupByQuery.html

    client
    . groupBy()
    . dataSource('sample_datasource')
    . granularity('day')
    . dimensions('dim1', 'dim2')
    . limitSpec('default', 5000, ['dim1', 'metric1'])
    . filter('and', [
     Query.filter('selector', 'sample_dimension1', 'sample_value1'),
     Query.filter('or', [
     Query.filter('selector', 'sample_dimension2', 'sample_value2'),
     Query.filter('selector', 'sample_dimension3', 'sample_value3')
     ])
     ])
    . aggregation('longSum', 'sample_name1', 'sample_fieldName1')
    . aggregation('doubleSum', 'sample_name2', 'sample_fieldName2')
    . postAggregation('arithmetic', 'sample_divide', '/', [
     Query.postAggregation('fieldAccess', 'sample_name1', 'sample_fieldName1'),
     Query.postAggregation('fieldAccess', 'sample_name2', 'sample_fieldName2')
     ])
    . intervals(newDate('2012-01-01T00:00:00.00'), newDate('2012-01-03T00:00:00.000'))
    . having('greaterThan', 'sample_name1', 0)
    . exec(/* result callback */)

    搜索( druid。)

    http://druid.io/docs/0.6.121/SearchQuery.html

    client
    . search()
    . dataSource('sample_datasource')
    . granularity('day')
    . searchDimensions('dim1', 'dim2')
    . query('insensitive_contains', 'Ke')
    . sort('lexicographic')
    . intervals(newDate('2013-01-01T00:00:00.000'), newDate('2013-01-03T00:00:00.000'))
    . exec(/* result callback */)

    段元数据( druid。segmentmetadataquery )

    http://druid.io/docs/0.6.121/SegmentMetadataQuery.html

    client
    . segmentMetadata()
    . dataSource('sample_datasource')
    . intervals(newDate('2013-01-01'), newDate('2014-01-01'))
    . exec(/* result callback */)

    时间边界( druid。timeboundaryquery )

    http://druid.io/docs/0.6.121/TimeBoundaryQuery.html

    client
    . timeBoundary()
    . dataSource('sample_datasource')
    . exec(/* result callback */)

    Timeseries ( druid。timeseriesquery )

    http://druid.io/docs/0.6.121/TimeseriesQuery.html

    client
    . timeseries()
    . dataSource('sample_datasource')
    . granularity('day')
    . filter('and', [
     Query.filter('selector', 'sample_dimension1', 'sample_value1'),
     Query.filter('or', [
     Query.filter('selector', 'sample_dimension2', 'sample_value2'),
     Query.filter('selector', 'sample_dimension3', 'sample_value3')
     ])
     ])
    . aggregation('longSum', 'sample_name1', 'sample_fieldName1')
    . aggregation('doubleSum', 'sample_name2', 'sample_fieldName2')
    . postAggregation('arithmetic', 'sample_divide', '/', [
     Query.postAggregation('fieldAccess', 'sample_name1', 'sample_fieldName1'),
     Query.postAggregation('fieldAccess', 'sample_name2', 'sample_fieldName2')
     ])
    . intervals(newDate('2013-01-01T00:00:00.000'), newDate('2013-01-03T00:00:00.000'))
    . exec(/* result callback */)

    TopN ( druid。topnquery )

    http://druid.io/docs/0.6.121/TopNQuery.html

    client
    . topN()
    . dataSource('sample_data')
    . dimension('sample_dim')
    . threshold(5)
    . metric('count')
    . granularity('all')
    . filter('and', [
     Query.filter('selector', 'dim1', 'some_value'),
     Query.filter('selector', 'dim2', 'some_other_val')
     ])
    . aggregation('longSum', 'count', 'count')
    . aggregation('doubleSum', 'some_metric', 'some_metric')
    . postAggregation('arithmetic', 'sample_divide', '/', [
     Query.postAggregation('fieldAccess', 'some_metric', 'some_metric'),
     Query.postAggregation('fieldAccess', 'count', 'count')
     ])
    . intervals(newDate('2013-08-31T00:00:00.000'), newDate('2013-09-03T00:00:00.000'))
    . exec(/* result callback */)

    待办事项

    • 更多测试

    许可证

    MIT


    HTTP  查询  druid  
    相关文章