Incremental Refresh
Incremental refresh is called through the Application API.
final TableUpdateDetail tableUpdateDetail =
TableUpdateDetail.create(
"SALES",
ChangeType.ADD_ROWS,
ConditionFactory.equal("DATE", LocalDate.of(2022, 4, 16)));
app.refresh(ChangeDescription.create(List.of(tableUpdateDetail)));
Here some change examples with their change description.
Multi table add rows
In this case, we have added some new sales for the seller google.
We have also added a new product.
sales
has a many-to-one relationship with product
.
Table sales
changes
date | product | seller | quantity |
---|---|---|---|
2024-01-01 | P1 | microsoft | 20 |
2024-01-01 | P2 | amazon | 30 |
2024-01-01 | P2 | amazon | 20 |
2024-01-01 | P1 | 20 | |
2024-01-01 | P2 | 30 | |
2024-01-01 | P3 | 20 |
Table products
changes
date | product | quantity |
---|---|---|
2024-01-01 | P1 | 10 |
2024-01-01 | P2 | 20 |
2024-01-01 | P3 | 30.0 |
Change description
Table Update Detail | sales | products |
---|---|---|
Change type | ADD_ROWS | ADD_ROWS |
Change Scope | sales.seller = 'google' | product.product = 'P3' |
final List<TableUpdateDetail> updateDetails =
List.of(
TableUpdateDetail.create(
"SALES", ChangeType.ADD_ROWS, ConditionFactory.equal("SELLER", "google")),
TableUpdateDetail.create(
"PRODUCTS", ChangeType.ADD_ROWS, ConditionFactory.equal("PRODUCT", "P3")));
app.refresh(ChangeDescription.create(updateDetails));
Multi table add rows using an unknown condition
In this case, we have added new rows in sales table.
All these new sales has a new seller which has been added in users table.
sales
has a many-to-one relationship with users
.
Table sales
changes
date | product | seller | quantity |
---|---|---|---|
2024-01-01 | P1 | microsoft | 20 |
2024-01-01 | P2 | amazon | 30 |
2024-01-01 | P2 | amazon | 20 |
2024-01-02 | P1 | 20 | |
2024-01-02 | P2 | alibaba | 30 |
2024-01-02 | P3 | ibm | 20 |
Table users
changes
id | warehouse |
---|---|
microsoft | nyo-1 |
amazon | chi-1 |
tor-1 | |
alibaba | bei-1 |
ibm | par-1 |
This change can be expressed with this description which could cumbersome to build because of the IN
condition.
Change description
Table Update Detail | sales | users |
---|---|---|
Change type | ADD_ROWS | ADD_ROWS |
Change Scope | sales.date = '2024-01-02' | users.id in ('google', 'alibaba','ibm') |
Here we managed to resolve a cumbersome condition looking at the data, but sometimes it is not possible to come up with a convenient condition.
In this case you can use the unknown condition.
Change description with an unknown condition
Table Update Detail | sales | users |
---|---|---|
Change type | ADD_ROWS | ADD_ROWS |
Change Scope | sales.date = '2024-01-02' | Unknown condition |
This solution could have adverse consequences.
If you have defined a factless hierarchy on user table, the missing link with the fact table forbid us to use the sales
table scope.
Connector will full refresh on this hierarchy stream.
final List<TableUpdateDetail> updateDetails =
List.of(
TableUpdateDetail.create(
"SALES",
ChangeType.ADD_ROWS,
ConditionFactory.equal("DATE", LocalDate.of(2024, 1, 2))),
TableUpdateDetail.create("PRODUCTS", ChangeType.ADD_ROWS, ConditionFactory.unknown()));
app.refresh(ChangeDescription.create(updateDetails));