本小節簡要介紹一下索引資料的描述檔案——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的內容依賴於您的資料來源可能有不同的內容。