本小节简要介绍一下索引数据的描述文件——Ingestion Spec 文件,更为详细的信息请参考 Apache Druid 官方文档。

Ingestion Spec(数据格式描述)是 Druid 对要索引数据的格式以及如何索引该数据格式的一个统一描述,它是一个 JSON 文件,一般由三部分组成:
{
    "dataSchema" : {...},
    "ioConfig" : {...},
    "tuningConfig" : {...}
}
格式 描述 是否必须
dataSchema JSON 对象 描述所要消费数据的schema信息。dataSchema 是固定的,不随数据消费方式改变。
ioConfig JSON 对象 描述所要消费数据的来源和消费去向。数据消费方式不同,ioConfig 也不相同。
tuningConfig JSON 对象 调节数据消费时的一些参数。数据消费方式不同,可调节的参数也不相同。

DataSchema

第一部分的 dataSchema 描述了数据的格式,如何解析该数据,典型结构如下:
{
    "dataSource": <name_of_dataSource>,
    "parser": {
        "type": <>,
        "parseSpec": {
            "format": <>,
            "timestampSpec": {},
            "dimensionsSpec": {}
        }
    },
    "metricsSpec": {},
    "granularitySpec": {}
}
格式 描述 是否必须
dataSource 字符串 数据源的名称
parser JSON 对象 数据的解析方式
metricsSpec JSON 对象数组 聚合器(aggregator)列表
granularitySpec JSON 对象 数据聚合设置,如创建segments,聚合粒度等等
  • parser

    parser 部分决定了您的数据如何被正确地解析,metricsSpec 定义了数据如何被聚集计算,granularitySpec 定义了数据分片的粒度、查询的粒度。

    对于parser,type 有两个选项:string 和 hadoopString,后者用于 Hadoop 索引的 job。parseSpec 是数据格式解析的具体定义。
    格式 描述 是否必须
    type 字符串 数据格式,可以是 “json”, “jsonLowercase”, “csv”, “tsv” 几种格式
    timestampSpec JSON 对象 时间戳和时间戳类型
    dimensionsSpec JSON 对象 数据的维度(包含哪些列)
    对于不同的数据格式,可能还有额外的 parseSpec 选项。下面的表是 timestampSpec 和 dimensionsSpec 的描述:
    格式 描述 是否必须
    column 字符串 时间戳对应的列
    format 字符串 时间戳类型,可选”iso”, “millis”, “posix”, “auto” 和 joda time 支持的类型
    格式 描述 是否必须
    dimensions JSON 数组 描述数据包含哪些维度。每个维度可以只是个字符串,或者可以额外指明维度的属性,比如 “dimensions”: [ “dimenssion1”, “dimenssion2”, “{“type”: “long”, “name”: “dimenssion3”} ],默认是 string类型。
    dimensionExclusions JSON 字符串数组 数据消费时要剔除的维度
    spatialDimensions JSON 对象数组 空间维度
  • metricsSpec
    metricsSpec 是一个 JSON 对象数组,定义了一些聚合器(aggregators)。聚合器通常有如下的结构:
    ```json
    {
        "type": <type>,
        "name": <output_name>,
        "fieldName": <metric_name>
    }
    ```
    官方提供了以下常用的聚合器:
    类型 type 可选
    count count
    sum longSum, doubleSum, floatSum
    min/max longMin/longMax, doubleMin/doubleMax, floatMin/floatMax
    first/last longFirst/longLast, doubleFirst/doubleLast, floatFirst/floatLast
    javascript javascript
    cardinality cardinality
    hyperUnique hyperUnique
    说明 后三个属于高级聚合器,您需要参考 Apache Druid 官方文档学习如何使用它们。
  • granularitySpec
    聚合支持两种聚合方式:uniform和 arbitrary,前者以一个固定的时间间隔聚合数据,后者尽量保证每个 segments 大小一致,时间间隔是不固定的。目前 uniform 是默认选项。
    格式 描述 是否必须
    segmentGranularity 字符串 segments 粒度。uniform 方式使用。默认为”DAY”
    queryGranularity 字符串 可供查询的最小数据聚合粒度,默认值为”true”。
    rollup bool值 是否聚合
    intervals 字符串 数据消费时间间隔 对于batch 是,对于 realtime 否

ioConfig

第二部分 ioConfig 描述了数据来源。以下是一个 Hadoop 索引的例子:
{
    "type": "hadoop",
    "inputSpec": {
        "type": "static",
        "paths": "hdfs://emr-header-1.cluster-6789:9000/druid/quickstart/wikiticker-2015-09-16-sampled.json"
    }
}
说明

对于通过 Tranquility 处理的流式数据,这部分是不需要的。

Tunning Config

Tuning Config 是指一些额外的设置。比如 Hadoop 对批量数据创建索引,可以在这里指定一些 MapReduce 参数。Tunning Config 的内容依赖于您的数据来源可能有不同的内容。详细的例子可参考本服务自带的示例文件或官方文档。