本文介紹索引數據的描述文件(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參數。