Apache Druid ingestion spec 由三个部分组成:
{
"dataSchema" : {...},
"ioConfig" : {...},
"tuningConfig" : {...}
}
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
dataSchema | JSON Object | 指定传入数据的Schema。所有Ingestion Spec都可以共享相同的dataSchema。 | 是 |
ioConfig | JSON Object | 指定数据的来源和去向。此对象将随摄取方法而变化。 | 是 |
tuningConfig | JSON Object | 指定如何调整各种摄取参数。此对象将随摄取方法而变化。 | 否 |
以下是一个dataSchema的示例:
"dataSchema" : {
"dataSource" : "wikipedia",
"parser" : {
"type" : "string",
"parseSpec" : {
"format" : "json",
"timestampSpec" : {
"column" : "timestamp",
"format" : "auto"
},
"dimensionsSpec" : {
"dimensions": [
"page",
"language",
"user",
"unpatrolled",
"newPage",
"robot",
"anonymous",
"namespace",
"continent",
"country",
"region",
"city",
{
"type": "long",
"name": "countryNum"
},
{
"type": "float",
"name": "userLatitude"
},
{
"type": "float",
"name": "userLongitude"
}
],
"dimensionExclusions" : [],
"spatialDimensions" : []
}
}
},
"metricsSpec" : [{
"type" : "count",
"name" : "count"
}, {
"type" : "doubleSum",
"name" : "added",
"fieldName" : "added"
}, {
"type" : "doubleSum",
"name" : "deleted",
"fieldName" : "deleted"
}, {
"type" : "doubleSum",
"name" : "delta",
"fieldName" : "delta"
}],
"granularitySpec" : {
"segmentGranularity" : "DAY",
"queryGranularity" : "NONE",
"intervals" : [ "2013-08-31/2013-09-01" ]
},
"transformSpec" : null
}
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
dataSource | String | 摄取数据源的名称。数据源可以被视为表。 | 是 |
parser | JSON Object | 指定如何解析所摄取的数据。 | 是 |
metricsSpec | JSON Object array | 聚合器列表。 | 是 |
granularitySpec | JSON Object | 指定如何创建段和汇总数据。 | 是 |
transformSpec | JSON Object | 指定如何过滤和转换输入数据。请参阅转换规范。 | 否 |
如果type
未包含,则解析器默认为string
。有关其他数据格式,请参阅我们的扩展列表。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
type | String | 这应该是一般意义上的string ,或者Hadoop索引作业中使用的hadoopyString 。 |
否 |
parseSpec | JSON Object | 指定数据的格式,时间戳和维度。 | 是 |
ParseSpecs有两个目的:
如果format
未包含,则parseSpec默认为tsv
。
与String Parser一起使用它来加载JSON。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
format | String | 这里应该为json |
否 |
timestampSpec | JSON Object | 指定时间戳的列和格式。 | 是 |
dimensionsSpec | JSON Object | 指定数据的维度。 | 是 |
flattenSpec | JSON Object | 指定嵌套JSON数据的展平配置。有关详细信息,请参阅Flattening JSON。 | 否 |
_jsonLowercase_解析器已弃用,可能会在未来的Druid版本中删除。
这是JSON ParseSpec的一种特殊变体,它可以降低传入JSON数据中所有列名称的大小。如果您从Druid 0.6.x更新到Druid 0.7.x,直接使用混合大小写的列名称直接摄取JSON,没有任何ETL来小写这些列名称,并且想要进行查询,则需要此parseSpec包括使用0.6.x和0.7.x创建的数据。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
format | String | 这里应该为jsonLowercase |
是 |
timestampSpec | JSON Object | 指定时间戳的列和格式。 | 是 |
dimensionsSpec | JSON Object | 指定数据的维度。 | 是 |
与String Parser一起使用它来加载CSV。使用com.opencsv库解析字符串。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
format | String | 这里应该为csv |
是 |
timestampSpec | JSON Object | 指定时间戳的列和格式。 | 是 |
dimensionsSpec | JSON Object | 指定数据的维度。 | 是 |
listDelimiter | String | 多值维度的自定义分隔符。 | 否(默认== ctrl + A) |
columns | JSON array | 指定数据的列。 | 是 |
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
column | String | 时间戳的列。 | 是 |
format | String | iso,posix,millis,micro,nano,auto或任何Joda time格式。 | 否(默认== ‘auto’) |
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
dimensions | JSON array | dimension schema对象或维度名称的列表。提供名称相当于提供具有给定名称的String类型维度模式。如果这是一个空数组,Druid会将所有未出现在“dimensionExclusions”中的非时间戳,非度量列视为字符串类型的维列。 | 是 |
dimensionExclusions | JSON String array | 要从摄取中排除的维度的名称。 | 否(默认== []) |
spatialDimensions | JSON Object array | 一系列spatial dimensions | 否(默认== []) |
维度模式指定要摄取的维度的类型和名称。
对于字符串列,维度模式还可用于通过设置createBitmapIndex
布尔值来启用或禁用位图索引 。默认情况下,为所有字符串列启用位图索引。只有字符串列才能有位图索引; 数字列不支持它们。
例如,以下dimensionsSpec
部分将dataSchema
一列作为Long(countryNum
),两列作为Float(userLatitude
,userLongitude
),其他列作为字符串,并为comment
列禁用位图索引。
"dimensionsSpec" : {
"dimensions": [
"page",
"language",
"user",
"unpatrolled",
"newPage",
"robot",
"anonymous",
"namespace",
"continent",
"country",
"region",
"city",
{
"type": "string",
"name": "comment",
"createBitmapIndex": false
},
{
"type": "long",
"name": "countryNum"
},
{
"type": "float",
"name": "userLatitude"
},
{
"type": "float",
"name": "userLongitude"
}
],
"dimensionExclusions" : [],
"spatialDimensions" : []
}
metricsSpec
是一个聚合器列表。如果在granularity spec
中rollup
为false,则metricsSpec应该是一个空列表,所有列应该在dimensionsSpec
中定义(没有rollup,在获取时维度和度量之间没有真正的区别)。不过,这是可选的。
GranularitySpec定义了如何将数据源划分为时间块。默认granularitySpec是uniform
,可以通过设置type
字段来更改。目前,支持uniform
类型和arbitrary
类型。
此规范用于生成具有均匀间隔的段。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
segmentGranularity | string | 创建时间块的粒度。每个时间块可以创建多个段。例如,在“DAY”分段粒度的情况下,同一天的事件属于相同的时间块,可以根据其他配置和输入大小可选地进一步划分为多个段。有关支持的粒度,请参阅Granularity。 | 否(默认==‘DAY’) |
queryGranularity | string | 能够查询结果的最小粒度以及段内数据的粒度。例如,“minute”值表示数据以每分钟的粒度聚合。也就是说,如果元组(分钟(时间戳)、维度)中存在冲突,那么它将使用聚合器将值聚合在一起,而不是存储单独的行。“NONE”的粒度表示毫秒粒度。有关支持的粒度,请参阅Granularity。 | 否(默认==‘NONE’) |
rollup | boolean | 汇总与不汇总 | 否(默认== true) |
intervals | JSON string array | 正在摄取的原始数据的间隔列表。忽略实时摄取。 | 否,如果指定,Hadoop和本地非并行批处理摄取任务可能会跳过确定分区阶段,这将导致更快的摄取; 本机并行摄取任务可以预先请求所有锁,而不是逐个请求。批量摄取将丢弃任何没有在指定时间间隔内的数据。 |
此规范用于生成具有任意间隔的段(它试图创建大小均匀的段)。此规范不支持实时处理。
字段 | 类型 | 描述 | 是否必须 |
---|---|---|---|
queryGranularity | string | 能够查询结果的最小粒度以及段内数据的粒度。例如,“minute”值表示数据以每分钟的粒度聚合。也就是说,如果元组(分钟(时间戳)、维度)中存在冲突,那么它将使用聚合器将值聚合在一起,而不是存储单独的行。“NONE”的粒度表示毫秒粒度。有关支持的粒度,请参阅Granularity。 | 否(默认==‘NONE’) |
rollup | boolean | 汇总与不汇总 | 否(默认== true) |
intervals | JSON string array | 正在摄取的原始数据的间隔列表。忽略实时摄取。 | 否,如果指定,Hadoop和本地非并行批处理摄取任务可能会跳过确定分区阶段,这将导致更快的摄取; 本机并行摄取任务可以预先请求所有锁,而不是逐个请求。批量摄取将丢弃任何没有在指定时间间隔内的数据。 |
变换规范允许Druid在摄取期间转换和过滤输入数据。请参见 Transform specs
IOConfig规范根据摄取任务类型而有所不同。
TuningConfig规范根据摄取任务类型而有所不同。
Druid将按以下顺序解释维度,维度排除和指标:
http://druid.apache.org/docs/latest/ingestion/ingestion-spec.html#dataschema