本文介紹索引資料的描述檔案(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參數。