本小節簡要介紹一下索引資料的描述檔案——Ingestion Spec檔案,更為詳細的資訊請參考Druid官方文檔。
Ingestion Spec(資料格式描述)是Druid對要索引資料的格式以及如何索引該資料格式的一個統一描述,它是一個JSON檔案,一般由三部分組成:
{
"dataSchema" : {...},
"ioConfig" : {...},
"tuningConfig" : {...}
}
鍵 | 格式 | 描述 | 是否必須 |
---|---|---|---|
dataSchema | JSON 對象 | 描述所要消費資料的schema資訊。dataSchema是固定的,不隨資料消費方式改變 | 是 |
ioConfig | JSON 對象 | 描述所要消費資料的來源和消費去向。資料消費方式不同,ioConfig也不相同 | 是 |
tuningConfig | JSON 對象 | 調節資料消費時的一些參數。資料消費方式不同,可調節的參數也不相同 | 否 |
DataSchema
第一部分的dataSchema描述了資料的格式,如何解析該資料,典型結構如下:
{
"dataSrouce": <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 和 dimensionsSpec 的描述:鍵 格式 描述 是否必須 column 字串 時間戳記對應的列 是 format 字串 時間戳記類型,可選”iso”, “millis”, “posix”, “auto” 和 joda time 支援的類型 是 鍵 格式 描述 是否必須 dimensions JSON 數組 描述資料包含哪些維度。每個維度可以只是個字串,或者可以額外指明維度屬性,比如 “dimensions”: [ “dimenssion1”, “dimenssion2”, “{“type”: “long”, “name”: “dimenssion3”} ],預設是 string類型。 是 dimensionExclusions JSON 字串數組 資料消費時要剔除的維度 否 spatialDimensions JSON 對象數組 空間維度 否 - metricsSpec
metricsSpec是一個JSON對象數組,定義了一些彙總器(aggregators)。彙總器通常有如下的結構:
```json { "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 说明 後三個屬於進階彙總器,您需要參见 Druid 官方文檔學習如何使用它們。 - granularitySpec
彙總支援兩種彙總方式:uniform和 arbitrary,前者以一個固定的時間間隔彙總資料,後者盡量保證每個segments大小一致,時間間隔是不固定的。目前uniform是預設選項。
鍵 格式 描述 是否必須 segmentGranularity 字串 segments 粒度。uniform方式使用。 否,預設是”DAY” queryGranularity 字串 可供查詢的最小資料彙總粒度 否 rollup bool值 是否彙總 否,預設值為”true” 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是指一些額外的設定。比如Hadoop對批量資料建立索引,可以在這裡指定一些MapReduce參數。Tunning Config的內容依賴於您的資料來源可能有不同的內容。