全部產品
Search
文件中心

DataWorks:Sensors Data(神策)資料來源

更新時間:Oct 24, 2024

DataWorksData Integration支援使用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或者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轉換器的列之前配置。