数据格式描述文件

本文介绍索引数据的描述文件(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”: [ “dimension1”, “dimension2”, “{“type”: “long”, “name”: “dimension3”} ],默认是STRING类型。

    dimensionExclusions

    JSON字符串数组

    数据消费时要剔除的维度。

    spatialDimensions

    JSON对象数组

    空间维度。

  • metricsSpec

    metricsSpec是一个JSON对象数组,定义了一些聚合器(aggregators)。聚合器通常有如下的结构。

    {
        "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是指一些额外的设置。

Tunning Config的内容依赖于您的数据来源。例如,Hadoop对批量数据创建索引,您可以指定MapReduce参数。