Sensors Data(神策)数据源

DataWorks数据集成支持使用Sensors Data Writer将数据写至Sensors Data,本文为您介绍DataWorks的Sensors Data数据同步的能力支持情况。

使用限制

  • 目前仅华南1(深圳)地域支持绑定Sensors Data数据源,其他地域会陆续支持,敬请期待!

  • 不支持直接读取SensorsData中的数据,需要根据神策数据存储类型选择Hive、HDFS等插件来读取数据。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源详细的配置参数解释可在配置界面查看对应参数的文案提示

数据同步任务开发

数据同步任务的配置入口和通用配置流程可参见下文的配置指导。

单表离线同步任务配置指导

附录一:脚本Demo与参数说明

离线任务脚本配置方式

如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。

Writer脚本Demo

{
    "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"//限流,此处1mbps = 1MB/s。
        }
    }
}

Writer脚本参数

参数

描述

是否必选

默认值

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数据接收地址来获取。

附录二:其他参数介绍

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转换器的列之前配置。