本文介绍索引数据的描述文件(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)。聚合器通常有如下的结构。
{ "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参数。