Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
project-collie
project-collie
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 5
    • Issues 5
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • Operations
    • Operations
    • Incidents
  • Analytics
    • Analytics
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • granite
  • project-collieproject-collie
  • Wiki
    • Udms
    • Sync_mysql_new
  • table_explode

table_explode · Changes

Page history
调整文档结构,增加图片 authored Apr 26, 2020 by 吴一博's avatar 吴一博
Hide whitespace changes
Inline Side-by-side
Showing with 97 additions and 6 deletions
+97 -6
  • udms/sync_mysql_new/table_explode.md udms/sync_mysql_new/table_explode.md +97 -6
  • No files found.
udms/sync_mysql_new/table_explode.md
View page @ 77aea9c0
## 展开子表
该功能用于处理一对多关系的数据。这种数据通常被设计为存储在两个关联的表中。
## 一对多关系的子表入库
该功能用于处理一对多关系的数据。 这种数据通常被设计为存储在两个关联的表中。
主表用于存储基本信息,关联表用于存储详情。主表与关联表为一对多关系。
如下图的所展示的。记录了团队(team)及其成员(member)。
该功能可以实现将一条涉及主表及关联表的数据,一次性完成所有相关表的入库操作。
如下图的所展示的表结构用于存储团队(team)及其成员(member)。
![tb_team及tb_members](table_explode_er.png)
......@@ -29,7 +33,7 @@ tb_team --|{ tb_members
@enduml
```
例如希望得到如下入表后的结果
通过本模块对如下记录进行入表操作。
tb_team
......@@ -45,7 +49,7 @@ tb_members
|2|1|Spider Man|
数据包需要按如下结构组装:
需要按如下结构组装数据包作为输入传给本模块:
```json
{
......@@ -64,11 +68,98 @@ tb_members
"sync_condition": {
"data_type": "teams",
"operation":"upsert",
"operation":"upsert"
}
}
```
### 数据展开(table_explode)
table_explode是data_type的子配置项,用于指明将输入数据的特定字段内容展开到相应的数据表中。
```yaml
table_explode: #(3)
- table: "tb_members" #(4)
explode_field: "members" #(5)
attach_fields: #(6)
- field: "team_id"
refer: "id"
overwrite: #(7)
foreign_keys: #(8)
- field: "team_id"
refer: "id"
logical_delete: True #(9)
deleted_field: "deleted"
deleted_field_value: 1,
```
|配置项目|说明|
|----|----|
|explode_field|指定需要展开的数据字段。该字段必需为数据类型,且数组的元素为字典。|
|table|展开的数据需要入的数据库表。|
|attach_fields|定义展开的数据中,需要附加输入数据中的哪些字段。|
|overwrite|覆盖更新参数|
#### 子表需要附加主表的一些数据(attach_fields)
#### 覆盖更新(overwrite)
在数据维护中会有一种场景:需要把子表中相关记录整体替换为输入数据中的内容。如前面的例子中:
marvel团队原来的团队成员为:
* Iron Man
* Spider Man
输入数据如下:
```json
{
"id": 1,
"name": "marvel",
"members": [
{
"id": 2,
"member_name": "Spider Man"
},
{
"id": 3,
"member_name": "Bat Man"
}
]
}
```
希望更新后Iron Man被删除. 团队成员变为:
* Spider Man
* Bat Man
实现覆盖更新需要在配置使用overwrite选项来完成。
|配置项目|说明|
|----|----|
|foreign_keys|指明用于筛选子表中相关数据的字段|
|logical_delete|是否是逻辑删除|
|deleted_field|逻辑删除标志字段的字段名|
|deleted_field_value| 表款逻辑删除含义的字段值|
```yaml
table_explode: #(3)
- table: "tb_members" #(4)
explode_field: "members" #(5)
attach_fields: #(6)
- field: "team_id"
refer: "id"
overwrite: #(7)
foreign_keys: #(8)
- field: "team_id"
refer: "id"
logical_delete: True #(9)
deleted_field: "deleted"
deleted_field_value: 1,
```
### 配置文件示例
配置文件中,名为teams的data_type定义如下:
```yaml
......
Clone repository
  • README
  • data_pump
    • data_pump
    • filters
    • filters
      • bloom
    • readers
    • readers
      • file
      • kafka
      • mongodb
      • sql
    • writers
    • writers
      • file
  • dev_guide
  • dev_manual
  • Home
  • ops
    • ansible
View All Pages