本文介绍索引数据的描述文件(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 和 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的内容依赖于您的数据来源可能有不同的内容。