Druid配置——Ingestion Spec(摄取规范)

Ingestion Spec(摄取规范)

Apache Druid ingestion spec 由三个部分组成:

{
  "dataSchema" : {...},
  "ioConfig" : {...},
  "tuningConfig" : {...}
}
字段类型描述是否必须
dataSchemaJSON Object指定传入数据的Schema。所有Ingestion Spec都可以共享相同的dataSchema。
ioConfigJSON Object指定数据的来源和去向。此对象将随摄取方法而变化。
tuningConfigJSON Object指定如何调整各种摄取参数。此对象将随摄取方法而变化。

DataSchema

以下是一个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
}
字段类型描述是否必须
dataSourceString摄取数据源的名称。数据源可以被视为表。
parserJSON Object指定如何解析所摄取的数据。
metricsSpecJSON Object array聚合器列表。
granularitySpecJSON Object指定如何创建段和汇总数据。
transformSpecJSON Object指定如何过滤和转换输入数据。请参阅转换规范

Parser

如果type未包含,则解析器默认为string。有关其他数据格式,请参阅我们的扩展列表

String Parser

字段类型描述是否必须
typeString这应该是一般意义上的string,或者Hadoop索引作业中使用的hadoopyString
parseSpecJSON Object指定数据的格式,时间戳和维度。

ParseSpec

ParseSpecs有两个目的:

  • String Parser使用它们来确定传入行的格式(即JSON,CSV,TSV)。
  • 所有解析器都使用它们来确定传入行的时间戳和维度。

如果format未包含,则parseSpec默认为tsv

JSON ParseSpec

与String Parser一起使用它来加载JSON。

字段类型描述是否必须
formatString这里应该为json
timestampSpecJSON Object指定时间戳的列和格式。
dimensionsSpecJSON Object指定数据的维度。
flattenSpecJSON Object指定嵌套JSON数据的展平配置。有关详细信息,请参阅Flattening JSON
JSON Lowercase ParseSpec

_jsonLowercase_解析器已弃用,可能会在未来的Druid版本中删除。

这是JSON ParseSpec的一种特殊变体,它可以降低传入JSON数据中所有列名称的大小。如果您从Druid 0.6.x更新到Druid 0.7.x,直接使用混合大小写的列名称直接摄取JSON,没有任何ETL来小写这些列名称,并且想要进行查询,则需要此parseSpec包括使用0.6.x和0.7.x创建的数据。

字段类型描述是否必须
formatString这里应该为jsonLowercase
timestampSpecJSON Object指定时间戳的列和格式。
dimensionsSpecJSON Object指定数据的维度。
CSV ParseSpec

与String Parser一起使用它来加载CSV。使用com.opencsv库解析字符串。

字段类型描述是否必须
formatString这里应该为csv
timestampSpecJSON Object指定时间戳的列和格式。
dimensionsSpecJSON Object指定数据的维度。
listDelimiterString多值维度的自定义分隔符。否(默认== ctrl + A)
columnsJSON array指定数据的列。

TimestampSpec

字段类型描述是否必须
columnString时间戳的列。
formatStringiso,posix,millis,micro,nano,auto或任何Joda time格式。否(默认== ‘auto’)

DimensionsSpec

字段类型描述是否必须
dimensionsJSON arraydimension schema对象或维度名称的列表。提供名称相当于提供具有给定名称的String类型维度模式。如果这是一个空数组,Druid会将所有未出现在“dimensionExclusions”中的非时间戳,非度量列视为字符串类型的维列。
dimensionExclusionsJSON String array要从摄取中排除的维度的名称。否(默认== [])
spatialDimensionsJSON Object array一系列spatial dimensions否(默认== [])
Dimension Schema

维度模式指定要摄取的维度的类型和名称。

对于字符串列,维度模式还可用于通过设置createBitmapIndex布尔值来启用或禁用位图索引 。默认情况下,为所有字符串列启用位图索引。只有字符串列才能有位图索引; 数字列不支持它们。

例如,以下dimensionsSpec部分将dataSchema一列作为Long(countryNum),两列作为Float(userLatitudeuserLongitude),其他列作为字符串,并为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

metricsSpec是一个聚合器列表。如果在granularity specrollup为false,则metricsSpec应该是一个空列表,所有列应该在dimensionsSpec中定义(没有rollup,在获取时维度和度量之间没有真正的区别)。不过,这是可选的。

GranularitySpec

GranularitySpec定义了如何将数据源划分为时间块。默认granularitySpec是uniform,可以通过设置type字段来更改。目前,支持uniform类型和arbitrary类型。

Uniform Granularity Spec

此规范用于生成具有均匀间隔的段。

字段类型描述是否必须
segmentGranularitystring创建时间块的粒度。每个时间块可以创建多个段。例如,在“DAY”分段粒度的情况下,同一天的事件属于相同的时间块,可以根据其他配置和输入大小可选地进一步划分为多个段。有关支持的粒度,请参阅Granularity否(默认==‘DAY’)
queryGranularitystring能够查询结果的最小粒度以及段内数据的粒度。例如,“minute”值表示数据以每分钟的粒度聚合。也就是说,如果元组(分钟(时间戳)、维度)中存在冲突,那么它将使用聚合器将值聚合在一起,而不是存储单独的行。“NONE”的粒度表示毫秒粒度。有关支持的粒度,请参阅Granularity否(默认==‘NONE’)
rollupboolean汇总与不汇总否(默认== true)
intervalsJSON string array正在摄取的原始数据的间隔列表。忽略实时摄取。否,如果指定,Hadoop和本地非并行批处理摄取任务可能会跳过确定分区阶段,这将导致更快的摄取; 本机并行摄取任务可以预先请求所有锁,而不是逐个请求。批量摄取将丢弃任何没有在指定时间间隔内的数据。

Arbitrary Granularity Spec

此规范用于生成具有任意间隔的段(它试图创建大小均匀的段)。此规范不支持实时处理。

字段类型描述是否必须
queryGranularitystring能够查询结果的最小粒度以及段内数据的粒度。例如,“minute”值表示数据以每分钟的粒度聚合。也就是说,如果元组(分钟(时间戳)、维度)中存在冲突,那么它将使用聚合器将值聚合在一起,而不是存储单独的行。“NONE”的粒度表示毫秒粒度。有关支持的粒度,请参阅Granularity否(默认==‘NONE’)
rollupboolean汇总与不汇总否(默认== true)
intervalsJSON string array正在摄取的原始数据的间隔列表。忽略实时摄取。否,如果指定,Hadoop和本地非并行批处理摄取任务可能会跳过确定分区阶段,这将导致更快的摄取; 本机并行摄取任务可以预先请求所有锁,而不是逐个请求。批量摄取将丢弃任何没有在指定时间间隔内的数据。

Transform Spec(变换规格)

变换规范允许Druid在摄取期间转换和过滤输入数据。请参见 Transform specs

IO Config(IO配置)

IOConfig规范根据摄取任务类型而有所不同。

Tuning Config(调整配置)

TuningConfig规范根据摄取任务类型而有所不同。

Evaluating Timestamp, Dimensions and Metrics(评估时间戳,维度和指标)

Druid将按以下顺序解释维度,维度排除和指标:

  • 维度列表中列出的任何列都被视为维度。
  • 维度排除列表中列出的任何列都将作为维度排除。
  • 默认情况下会排除度量标准所需的时间戳列和列/字段名称。
  • 如果度量标准也列为维度,则度量标准必须具有与维度名称不同的名称。

原文链接

http://druid.apache.org/docs/latest/ingestion/ingestion-spec.html#dataschema

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值