O Data Integration do DataWorks permite gravar dados no Sensors Data usando o Sensors Data Writer. Esse writer aceita três tipos de dados — eventos, usuários e itens — e oferece conversão opcional de tipos de dados no nível do campo antes da gravação.
Limites
É possível adicionar uma fonte de dados do Sensors Data apenas na região China (Shenzhen). O suporte a outras regiões estará disponível em breve.
Não é possível ler dados diretamente do Sensors Data. Use um plugin como Hive ou HDFS para ler os dados, conforme o tipo de armazenamento da sua instância do Sensors Data.
Adicionar uma fonte de dados do Sensors Data
Antes de configurar uma tarefa de sincronização, adicione o Sensors Data como fonte de dados no DataWorks. Siga as etapas em Gerenciamento de fontes de dados. As descrições dos parâmetros estão disponíveis no console do DataWorks durante a adição da fonte de dados.
Configure uma tarefa de sincronização
O Sensors Data Writer aceita três tipos de dados, cada um mapeado para uma entidade do Sensors Data:
|
**Valor de |
Entidade do Sensors Data |
|
|
Evento |
|
|
Usuário |
|
|
Item (propriedade) |
O valor de type define quais subparâmetros são obrigatórios na etapa do writer. Configure o writer usando o editor de código e mapeie as colunas de origem para os campos de destino com o parâmetro column.
Para obter o procedimento de configuração da tarefa, consulte Configurar uma tarefa no editor de código.
Exemplo de script e referência de parâmetros
Exemplo de script do writer
O exemplo a seguir grava dados de item (um catálogo de cursos) de uma fonte MySQL no Sensors Data. Os mapeamentos de campos usam índices de coluna baseados em zero da tabela de origem.
{
"type": "job",
"steps": [
{
"stepType": "mysql",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "sahistory",
"parameter": {
"type": "item",
"item": {
"itemType": "course",
"typeIsColumn": false,
"itemIdColumn": "course_id"
},
"column": [
{
"name": "course_id",
"index": 0
},
{
"name": "course_name",
"index": 1
},
{
"name": "course_schedule",
"index": 2,
"dataConverters": [
{
"type": "Long2Date"
}
]
}
],
"sdkDataAddress": "http://bigdata-project.datasink.sensorsdata.cn/sa?project=default&token=1111111111111111"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 2,
"mbps": "12"
}
}
}
Parâmetros de nível superior do writer
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Tipo de dado a ser gravado no Sensors Data. Valores válidos: |
Sim |
Nenhum |
|
|
Mapeamentos de campos entre as tabelas de origem e de destino. Cada entrada exige |
Sim |
Nenhum |
|
|
URL que o Sensors Data usa para receber dados. Formato: |
Sim |
Nenhum |
Subparâmetros quando type é track
Use estes parâmetros para configurar dados de eventos.
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Nome do campo de origem a ser usado como Distinct ID do evento no Sensors Data. Também deve constar na lista |
Opcional |
Nenhum |
|
|
Nome do evento no Sensors Data. |
Opcional |
Nenhum |
|
|
Indica se o campo Distinct ID é um ID de login (identificador único de usuário). Valores válidos: |
Opcional |
|
Exemplo:
"track": {
"distinctIdColumn": "track_id",
"eventName": "testEventName",
"isLoginId": true
}
Subparâmetros quando type é user
Use estes parâmetros para configurar dados de usuários.
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Nome do campo de origem a ser usado como Distinct ID do usuário no Sensors Data. Também deve constar na lista |
Opcional |
Nenhum |
|
|
Indica se o campo Distinct ID é um ID de login (identificador único de usuário). Valores válidos: |
Opcional |
|
Exemplo:
"user": {
"distinctIdColumn": "user_id",
"isLoginId": true
}
Subparâmetros quando type é item
Use estes parâmetros para configurar dados de itens (propriedades).
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Nome do campo de origem a ser usado como Distinct ID do item no Sensors Data. Também deve constar na lista |
Opcional |
Nenhum |
|
|
Nome do tipo de item no Sensors Data. Se este campo aparecer em |
Opcional |
Nenhum |
|
|
Define se |
Opcional |
|
Exemplo:
"item": {
"itemIdColumn": "item_id",
"itemType": "testItem",
"typeIsColumn": false
}
Conversores de dados
O Sensors Data Writer permite converter tipos de dados antes de gravá-los no destino. Adicione um array dataConverters a uma entrada de campo em column e especifique o type do conversor.
|
Tipo de conversor |
Converte de |
Converte para |
Parâmetros |
|
|
Date |
String |
|
|
|
Date |
Long |
Nenhum |
|
|
Numérico |
String |
Nenhum |
|
|
String |
Long |
Nenhum |
|
|
String |
Date |
|
|
|
BigInt |
Date |
Nenhum |
|
|
String |
Int |
Nenhum |
|
|
String |
Double |
Nenhum |
|
|
String |
BigDecimal |
Nenhum |
|
|
— |
— |
|
|
|
— |
— |
Nenhum. Converte qualquer valor de campo não nulo para nulo. |
|
|
— |
— |
Consulte Parâmetros do IfElse. |
|
|
— |
— |
|
Parâmetros do IfElse
O IfElse avalia uma expressão condicional JavaScript e retorna um de dois valores com base no resultado.
|
Parâmetro |
Descrição |
|
|
Uma expressão JavaScript que deve retornar um valor booleano. Tem acesso a |
|
|
Valor retornado quando |
|
|
Valor retornado quando |
|
|
Um escopo JavaScript compartilhado. Variáveis e constantes definidas aqui ficam acessíveis em |
Exemplo — validar o formato de um número de identificação e definir o campo como nulo se a verificação falhar:
"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\") == 'ID_Card'){ 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)\";"
}
}
]
Exemplo de IfNull2Default
O exemplo a seguir trata um campo de timestamp nulo: defina o valor como "2021-07-01", converte a string para Date e, em seguida, converte o Date para Long (milissegundos).
"dataConverters": [
{
"type": "IfNull2Default",
"param": {
"default": "2021-07-01",
"dataConverters": [
{
"type": "Str2Date",
"param": {
"pattern": "yyyy-MM-dd"
}
},
{
"type": "Date2Long"
}
]
}
}
]