Parser
parser
需要与parseSpec
共同组合配置完成接入数据不同格式的转换功能。不同的数据需要进行不同parser
/parseSpec
组合
1. Parser
1.1 stringParser
"parser":{
"type": "string",
"parseSpec": ParseSpec parseSpec,
"encoding": String encoding
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | string | string | 是 | - | 指定parser类型,固定值 |
parseSpec | 参考parseSpec 类型 |
json | 是 | - | 指定parseSpec,需要根据数据具体格式配置, 比如接入csv数据,可以配置csvParserSpec |
encoding | 自定义 | json | 否 | utf8 | 指定数据编码格式 |
1.2 standardParserSpec
"parser":{
"type": "standard",
"parseSpec": ParseSpec parseSpec,
"encoding": String encoding,
"excludeHead": Boolean excludeHead
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | standard | string | 是 | - | 指定parser类型,固定值。 用于解析base64加密后的数据,一般用于数果埋点数据 |
parseSpec | 参考parseSpec 类型 |
json | 是 | - | 指定parseSpec,需要根据数据具体格式配置 |
encoding | 自定义 | json | 否 | utf-8 | 指定数据编码格式 |
excludeHead | true/false | boolean | 否 | false | 指定是否排除Http-Header数据 如cookie,user_agent |
1.3 parquetParser
"parser":{
"type": "parquet",
"parseSpec": ParseSpec parseSpec,
"binaryAsString": Boolean excludeHead
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | parquet | string | 是 | - | 指定parser类型,固定值。 用于parquet格式数据 |
parseSpec | 参考parseSpec 类型 |
json | 是 | - | 指定parseSpec,需要根据数据具体格式配置, 一般与parquetParserSpec组合使用 |
binaryAsString | true/false | boolean | 否 | false | 指定是否把binary 类型数据读成string 类型 |
2. ParseSpec
parseSpec
用于配置说明接入数据的维度名称/类型/格式等信息
2.1 json
"parseSpec":{
"format":"json",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"flattenSpec":{
"useFieldDiscovery": Boolean useFieldDiscovery,
"fields": List<JSONPathFieldSpec> fields
}
"featureSpec":Map<String, Boolean> featureSpec
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | json | string | 是 | - | 指定格式类型, 固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明, 类似mysql的表定义 |
flattenSpec | 参考flattenSpec |
json | 否 | - | json数据的路径说明 |
featureSpec | key-value配置 | json | 否 | - | 设置com.fasterxml.jackson.databind.ObjectMapper转换器的参数 |
example
"parseSpec":{
"format":"json",
"dimensionsSpec":{
"dynamicDimension":true,
"dimensions":[]
},
"timestampSpec":{
"column":"d|place_time",
"format":"millis"
}
}
这个例子用动态维来接入json类型数据源,其中时间戳的维度名为 d|place_time
,格式为 millis
。
2.1.1 flattenSpec
{
"useFieldDiscovery": boolean,
"fields": {
"type": "PATH|ROOT",
"name": string,
"expr": string
}
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
useFieldDiscovery | true/false | boolean | 否 | true | 使用自动发现json根节点下的信息,如果配置为true,将自动解析到json数据的所有根节点.而不需要在fields中配置. |
fields | - | json | 否 | - | 提取嵌套json中的信息. |
fields.type | PATH/ROOT | string | 否 | - | PATH :jsonpath方式提取信息; ROOT: 从根节点提取信息,比如fromhost-ip. |
fields.name | - | string | 是 | - | json中的key |
fields.expr | 自定义 |
string | 否 | - | 当fields.type 为PATH时有效,具体格式可参考jsonpath,比如$.msg.EventTime. |
example
json数据为:
{
"fromhost-ip":"192.168.0.1",
"hostname":"test1.sugo.io",
"msg":{
"EventTime":"2019-01-01 12:30:00",
"Hostname":"ubuntu"
}
}
====================
对应的配置:
"flattenSpec": {
"useFieldDiscovery": false,
"fields": [{
"type": "ROOT",
"name": "fromhost-ip"
},{
"type": "PATH",
"name": "hostname",
"expr": "$.hostname"
},{
"type": "PATH",
"name": "EventTime",
"expr": "$.msg.EventTime"
},{
"type": "PATH",
"name": "Hostname1",
"expr": "$.msg.Hostname"
}
]
}
2.2 csv
"parseSpec":{
"format":"csv",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"listDelimiter": String listDelimiter,
"multiValueDelimiter": String multiValueDelimiter,
"columns": List<String> columns
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | csv | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
listDelimiter | 自定义 |
string | 否 | , |
列分隔符 |
multiValueDelimiter | 自定义 |
string | 否 | - | 多值列分隔符 |
columns | 自定义 |
list | 是 | - | 对行数据的列进行命名 |
example
"parser": {
"parseSpec": {
"format": "csv",
"timestampSpec":{
"column": "ts",
"format": "yy-MM-dd HH:mm:ss.SSS"
},
"dimensionsSpec": {
"dimensions": [
{
"name": "cardNum",
"type": "string"
},
{
"name": "level",
"type": "int"
},
{
"name": "create_time",
"type": "date",
"format":"yy-MM-dd HH:mm:ss.SSS"
}
]
},
"listDelimiter": ",",
"columns": ["ts","cardNum","level","create_time"]
}
}
这个例子接入csv类型数据,这个csv文件有四个维度分别和columns对应。
2.3 tsv
"parser": {
"parseSpec":{
"format":"tsv",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"delimiter": String delimiter,
"listDelimiter": String listDelimiter,
"columns": List<String> columns,
"nullFormat": String nullformat
}
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | tsv | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
delimiter | 自定义 |
string | 否 | \t |
列分隔符 |
listDelimiter | 自定义 |
string | 否 | \u0001 |
多值列分隔符 |
columns | 自定义 |
list | 是 | - | 对行数据的列进行命名 |
nullFormat | 自定义 |
string | 否 | '' |
null值格式 |
example
"parseSpec": {
"format": "tsv",
"timestampSpec": {"column": "myDate","format": "millis"},
"dimensionsSpec": {
"dimensions": [
{"name": "myStr1","type": "string"},
{"name": "myStr2","type": "string","hasMultipleValues":true }
]
},
"delimiter":"abc",
"listDelimiter": "!",
"columns": ["myDate","myStr1","myStr2"]
}
注意这个例子的行数据分隔符为多个字符"abc",不是常见的单字符分隔符如","
该例子对应的部分数据为:
1484839807587abcqq4hwfhh03abccvv904doqj!632124152
1490986198551abchaig2sabczufi!9733
对应的结果为:
__time | myStr1 | myStr2 |
---|---|---|
2017-01-19T15:30:07.587Z | qq4hwfhh03 | 632124152, cvv904doqj |
2017-03-31T18:49:58.551Z | haig2s | 9733, zufi |
2.4 jsonLowercase
"parseSpec":{
"format":"jsonLowercase",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | jsonLowercase | string | 是 | - | 指定格式类型,固定值;已废弃,不推荐使用 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
2.5 timeAndDims
"parseSpec":{
"format":"timeAndDims",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | timeAndDims | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
2.6 regex
"parseSpec":{
"format":"regex",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"listDelimiter": String listDelimiter,
"columns": List<String> columns,
"pattern": String pattern
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | regex | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
listDelimiter | 自定义 |
string | 否 | \u0001 |
多值列分隔符 |
columns | 自定义 |
list | 是 | - | 对行数据的列进行命名 |
pattern | 自定义 |
string | 是 | - | 分隔行数据的正则表达式 |
2.7 javascript
"parseSpec":{
"format":"javascript",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"function": String function
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | javascript | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
function | 自定义 |
string | 是 | - | javascript函数,要求:输入=string,输出=object |
2.8 parquet
"parseSpec":{
"format":"parquet",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | parquet | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
2.9 nested
"parseSpec":{
"format":"nested",
"timestampSpec":TimestampSpec timestampSpec,
"dimensionsSpec":DimensionsSpec dimensionsSpec,
"decollator":String decollato,
"parseSpec": ParseSpec parseSpec,
"dimensionParseSpec": Map<String, ParseSpec> dimensionParseSpec
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
format | nested | string | 是 | - | 指定格式类型,固定值 |
timestampSpec | 参考timestampSpec |
json | 是 | - | 时间维度说明 |
dimensionsSpec | 参考dimensionsSpec |
json | 是 | - | 事件维度说明,类似mysql的表结构定义 |
decollator | 自定义 | string | 否 | . | 指定嵌套维度分隔符。如果想将嵌套的数据打平,则此配置无效 |
parseSpec | 参考parseSpec 类型 |
json | 是 | - | 配置解析嵌套数据第一层的解析器. |
dimensionParseSpec | json | json | 否 | - | 配置内层数据解析器,格式为key-parseSpec ;若是打平数据,则不需要这个配置。 |
3. 维度说明
维度说明
用于定义Tindex的schema,包括维度的名称和类型。
3.1 timestampSpec
时间列定义
timestampSpec:{
"column": String timestampColumn,
"format": String format,
"timeZone": String timeZone,
"missingValue": DateTime missingValue,
"reNewTime": Boolean reNewTime,
"excludeTimeColumn": Boolean excludeTimeColumn,
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
column | 自定义 | string | 否 | timestamp | 时间戳的列名 |
format | - | string | 是 | - | 时间格式类型:推荐millis,详见时间格式支持 |
timeZone | 自定义 | string | 否 | Shanghai | 时区,默认东八区 |
missingValue | 自定义 | string | 否 | - | 时间戳的缺失值 |
reNewTime | true/false | boolean | 否 | false | 是否将时间戳更新为当前时间, 此时系统会自动生成时间列, 不要求数据中一定要有时间列; 适用于测试场景 |
excludeTimeColumn | true/false | boolean | 否 | false | 是否忽略时间列 |
3.1.1 时间格式支持
- yy-MM-dd HH:mm:ss.SSS: 自定义的时间格式
- auto: 自动识别时间,支持iso和millis格式
- iso: iso标准时间格式,如2016-08-03T12:53:51.999Z
- posix: 从1970年1月1日开始所经过的秒数,10位的数字
- millis: 从1970年1月1日开始所经过的毫秒数,13位数字
3.2 dimensionsSpec
事件维度列定义
dimensionsSpec:{
"dynamicDimension": Boolean dynamicDimension,
"defaultDynamicType": String defaultDynamicType,
"enableStored": Boolean enableStored,
"dimensions": List<DimensionSchema> dimensions,
"dimensionExclusions": List<String> dimensionExclusions,
"spatialDimensions": List<SpatialDimensionSchema> spatialDimensions
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
dynamicDimension | true/false | boolean | 否 | false | 是否为动态维,若为true,则不需要指定dimensions 参数 |
defaultDynamicType | 自定义 | string | 否 | string | 动态维默认的维度类型 |
enableStored | true/false | boolean | 否 | false | 有待补充 |
dimensions | 自定义 | list | 否 | - | 维度定义, 详见dimensionSchema |
dimensionExclusions | 自定义 | list |
否 | false | 要排除的维度 |
spatialDimensions | 自定义 | list | 否 | false | 空间维度定义 |
3.2.1 DimensionSchema
3.2.1.1 基本维度:
{
"type": String type,
"name": String name,
"hasMultipleValues": Boolean hasMultipleValues
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | 自定义 | string | 是 | - | 可选值:string/text/int/long/float/double |
name | 自定义 | string | 是 | - | 维度名 |
hasMultipleValues | true/false | boolean | 否 | false | 是否是多值列 |
3.2.1.2 时间维度:
{
"type": "date",
"name": String name,
"hasMultipleValues": Boolean hasMultipleValues,
"format": String format,
"timeZone": String timeZone
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | date | string | 是 | - | 指定类型 |
name | 自定义 | string | 是 | - | 维度名 |
hasMultipleValues | true/false | boolean | 否 | false | 是否是多值列 |
format | - | string | 是 | - | 时间格式类型:推荐millis,详见时间格式支持 |
timeZone | 自定义 | string | 否 | Asia/Shanghai | 时区 |
3.2.1.3 聚合维度
{
"type": "aggregator",
"name": String name,
"aggType": String aggType
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | aggregator | string | 是 | - | 指定类型 |
name | 自定义 | string | 是 | - | 维度名 |
aggType | 自定义 | string | 是 | - | 聚合类型 |