本文介绍索引数据的描述文件(Ingestion Spec文件)。

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表的描述如下。
    格式 描述 是否必须
    column 字符串 时间戳对应的列。
    format 字符串 时间戳类型,可选”iso”、 “millis”、 “posix”、“auto”和joda time支持的类型。
    dimensionsSpec表的描述如下。
    格式 描述 是否必须
    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的内容依赖于您的数据来源可能有不同的内容。