本文为您介绍Sensors Data Writer支持的数据类型、字段映射和数据源等参数及配置示例。

前提条件

配置Sensors Data Writer插件前,请确认数据源已配置完成,详情请参见:配置Sensors Data数据源

使用限制

版本使用限制如下:
  • 软件版本:神策数据2.3版本及以下。
  • 插件版本:ID Mapping 2.0版本及以下。

参数说明

参数 描述 是否必选 默认值
type 写入神策数据系统的数据类型,取值包括:trackuseritem,分别对应神策数据系统中的事件用户属性。type参数的取值,将影响数据类型的参数定义。
typetrack时,可选参数如下:
  • distinctIdColumn(可选):输入一个字段名称作为神策数据系统中事件的Distinct ID,并且该字段名称需要同时被定义在column参数中作为事件的属性,该属性值不能为空值。
  • eventName(可选):输入一个名称作为神策数据系统中事件的名称。
  • isLoginId(可选):输入true或false的布尔值来定义作为神策数据中事件Distinct ID的字段是否是登录ID,即用户的唯一标识。默认值为:true。
脚本示例如下:
"track": {  
"distinctIdColumn": "track_id",  
"eventName": "testEventName", 
"isLoginId": true
}
typeuser时,可选参数如下:
  • distinctIdColumn(可选):输入一个字段名称作为神策数据系统中用户的Distinct ID,并且该字段名称需要同时被定义在column参数作为用户的属性,该属性值不能为空值。
  • isLoginId(可选):输入true或false的布尔值来定义作为神策数据中事件Distinct ID的字段是否是登录ID,即用户的唯一标识。默认值为:true。
脚本示例如下:
"user": {
"distinctIdColumn": "user_id", 
"isLoginId": true
}
typeitem时,可选参数如下:
  • itemIdColumn(可选):输入一个字段名称作为神策数据系统中属性的Distinct ID,并且该字段名称需要同时被定义在column参数作为属性的属性,该属性值不能为空值。
  • itemType(可选):输入一个字段名称作为神策数据系统中属性的itemType,并且如果该字段名称被定义在了column参数中时,该字段不能存在空值并且typeIsColumn配置项应该为true,否则将以常量值作为神策itemType。
  • typeIsColumn(可选):输入true或false的布尔值来定义itemType配置项是否在column配置项的列表中。默认值为:true。
脚本示例如下:
"item": {
"itemIdColumn": "item_id", 
"itemType": "testItem",
"typeIsColumn": false
}
column 通过index和name参数,来定义来源表字段与目标表字段的映射关系。
  • name(必选):目标表的字段名称。
  • index(必选):来源表的字段顺序的下标值。例如,来源表中的首列字段,index值为0。
sdkDataAddress 数据存放路径,即Sensors Data接收数据的URL地址,该地址的格式为:http://localhost:8106/sa?project=default,该地址可从神策分析 > 基本设置 > 数据接入 > 服务端埋点 > 复制http数据接收地址来获取。

脚本开发介绍

使用脚本模式开发的详情请参见:通过脚本模式配置离线同步任务

脚本配置示例如下,具体参数填写请参见:参数说明

注意 实际运行时,请删除下述代码中的注释。
{
    "type": "job",
    "steps": [
        {
            "stepType": "mysql",
            "parameter": {},
            "name": "Reader",
            "category": "reader"
        },
        {
             "stepType": "sahistory", //插件名。
             "parameter": {
                "type": "item", //写入Sensors Data的数据类型,可取值有:track/user/item,分别对应神策系统中的事件/用户/属性。
                     "item": {       //因为type参数取值为item,因此此处需要定义item参数。
                    "itemType": "course", //定义item的类型为学生课程course
                    "typeIsColumn": false, //item的类型是否会出现在column参数中
                    "itemIdColumn": "course_id" //定义itemID的字段名称
                },
                "column": [     //定义来源表和目标表之间的字段映射关系
                    {
                        "name": "course_id",    //目标表的字段列名为course_id
                        "index": 0              //取来源表的第1列数据写入目标表的course_id列
                    },
                    {
                        "name": "course_name",  //目标表的字段列名为course_name
                        "index": 1              //取来源表的第2列数据写入目标表的course_name列
                    },
                    {
                        "name": "course_schedule",  //目标表的字段列名为course_schedule
                        "index": 2                  //取来源表的第3列数据写入目标表的course_schedule列
                        "dataConverters":[          //转换器,实现实现数据类型转换。
                               {
                                    "type": "Long2Date"   //转换器类型。
                                }
                          ]
                    }
                ],
                "sdkDataAddress": "http://bigdata-project.datasink.sensorsdata.cn/sa?project=default&token=1111111111111111", //数据存放路径,即Sensors Data接收数据的URL地址
                  },
            "name": "Writer",
            "category": "writer"
        }
    ],
    },
    "setting": {
        "errorLimit": {
            "record": "0" //错误记录数。
        },
        "speed": {
            "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                        "concurrent":2, //作业并发数。
                        "mbps":"12"//限流
        }
    }
}

其他参数介绍

Sensors Data Writer支持在脚本中对要写入目标数据源的字段,通过添加数据转换器(dataConverters),并定义转换器类型(type),实现要写入目标数据源字段的类型转换,转换器类型及参数示例如下表所示。
转换器类型 功能描述 示例 参数说明
Date2Str 将Date时间类型的数据转换为String字符串类型。
//示例
"dataConverters":[
    {
        "type": "Date2Str",
        "param": {
            "pattern":"yyyy-MM-dd"
        }
    }
]
pattern(可选):将Date数据转换为String类型数据后,String类型数据的时间格式。
Date2Long 将Date时间类型的数据转换为Long长整型类型。
"dataConverters":[
    {
        "type": "Date2Long"
    }
]
Number2Str 将Number数值类型的数据转换为String字符串类型。
//示例
"dataConverters":[
    {
        "type": "Number2Str"
    }
]
Str2Long 将String字符串类型的数据转换为Long长整型类型。
//示例
"dataConverters":[
    {
        "type": "Str2Long"
    }
]
Str2Date 将String字符串类型的数据转换为Date时间类型。
//示例
"dataConverters":[
    {
        "type": "Str2Date",
        "param": {
            "pattern":"yyyy-MM-dd",
            "formats":["yyyyMMdd","yyyyMMddHHmmss"]
        }
    }
]
  • pattern(可选):转换后Date数据的时间格式,内置时间格式包括:yyyy-MM-ddyyyy-MM-dd HH:mm:ssyyyy-MM-dd HH:mm:ss.SSSyyyy-MMyyyyMMyyyyMMddHHmmssyyyyMMddHHmmssSSS
  • formats(可选):其他格式的字符串时间数组(数据来源的时间格式可能存在多种,可以弥补pattern的不足)。
BigInt2Date 将BigInt大整数类型的数据转换为Date时间类型。
//示例
"dataConverters":[
    {
        "type": "BigInt2Date"
    }
]
Str2Int 将String字符串类型的数据转换为Int整数类型。
//示例
"dataConverters":[
    {
        "type": "Str2Int"
    }
]
Str2Double 将String字符串类型的数据转换为Double双精度数值类型。
//示例
"dataConverters":[
    {
        "type": "Str2Double"
    }
]
Str2BigDecimal 将String字符串类型的数据转换为BigDecimal高精度数值类型。
//示例
"dataConverters":[
    {
        "type": "Str2BigDecimal"
    }
]
IfNull2Default 当字段值为null时,将字段值设置为default参数中定义的常量值,并支持根据IfNull2Default转换器中嵌套的转换器类型,进一步将字段常量值转换为目标数据类型。
//示例
//如果该列的值为null或者空字符串,那么设置该值为字符串类型的2021-07-01,并且将该字符串转换为yyyy-MM-dd格式的时间,再将该时间转换为long型的毫秒值。
"dataConverters":[
    {
        "type": "IfNull2Default",
        "param": {
            "default": "2021-07-01",
            "dataConverters": [
                {
                    "type": "Str2Date",
                    "param": {
                        "pattern":"yyyy-MM-dd"
                    }
                },
                {
                    "type": "Date2Long"
                }
            ]
        }
    }
]
dataConverters:数据转换器,将default参数的默认值转换为type中定义的类型。实现多次数据转换,多个dataConverters可嵌套使用。
NotNull2Null 如果字段值为非null的值,可以将字段值转换为null。
//示例
"dataConverters":[
    {
        "type": "NotNull2Null"
    }
]
IfElse if条件表达式,判断字段值是否满足条件,当if条件表达式成立时,在value中定义满足条件时的字段返回值,当if条件表达式不成立时,在else中定义不满足条件时的字段返回值。
//示例
"dataConverters":[
                  {
                    "type": "IfElse",
                    "param": {
                      "if": "return true;",
                      "value":"if(resolvedValues.get(\"check_card_type\") == 'NAN' && value == null ){return true;} if(resolvedValues.get(\"check_card_type\") == '身份证'){  if(java.util.regex.Pattern.compile(regEx).matcher(value).find() && java.lang.Integer.parseInt(value.substring(6, 10)) >=1900 && java.lang.Integer.parseInt(value.substring(6, 10)) <= nowYear){return true;}} return null;",
                      "sharedPool":"var nowYear = java.time.LocalDate.now().getYear(); var regEx = \"(110|120|310|510|150|650|540|640|450|230|220|210|120|140|630|370|410|320|340|320|340|330|350|360|430|420|440|460|620|610|520|530)\\\\d{7}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\\\d{3}(\\\\d|X)\"; "
                    }
                  }
                ]
  • if:if条件表达式,使用JavaScript引擎解析,确保返回值为boolean类型。导入神策数据的当前字段,和当前插件获取到的value值,dataConverters下配置的param参数,以及已解析的列(map结构),会传递到if表达式中,可通过targetColumnName、value、param、resolvedValues分别获取对应的值。
  • value:if条件表达式成立时,返回转换后的值,使用JavaScript引擎解析,导入神策数据的当前字段,和当前插件获取到的value值,dataConverters下配置的param参数,以及已解析的列(map结构),会传递到value表达式中,可通过targetColumnName、value、param、resolvedValues分别获取对应的值。
  • else:if条件表达式不成立时,返回转换后的值,使用JavaScript引擎解析,导入神策数据的当前字段,和当前插件获取到的value值,dataConverters下配置的param参数,以及已解析的列(map结构),会传递到else表达式中,可通过targetColumnName、value、param、resolvedValues分别获取对应的值。
  • sharedPool:共享区,使用JavaScript引擎解析,该值定义的变量或常量在if、value、else中都能使用。
IfNull2Column 如果字段值为null,则转向取targetColumnName配置项的值,作为当前字段的值。
//示例
"dataConverters": [
    {
        "type": "IfNull2Column",
        "param": {
            "targetColumnName":"age1"
        }
    }
]
targetColumnName:导入神策数据的列名。
注意 targetColumnName配置的列需要在应用IfNull2Column转换器的列之前配置。