From 976f549e587fce05ca3f9ee4501e74e30aa3ca5e Mon Sep 17 00:00:00 2001 From: Ilian Iliev Date: Mon, 19 May 2025 09:40:30 +0300 Subject: [PATCH 01/15] Improving documentation for data denormalization --- .../data-pipelines/data-denormalization.md | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 71d379b6c5..9057984774 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -35,9 +35,32 @@ called `InvoiceLineItems`: {{< image filename="/images/rdi/ingest/nest-flow.webp" width="500px" >}} -You configure normalization with a `nest` block in the child entities' RDI job, as shown in this example: + +When configuring normalization first you need to configure the parent entity to use JSON as the target data type. Add `data_type: json` to the parent job. Example: + +```yaml +# jobs/invoice.yaml +source: + server_name: chinook + schema: public + table: Invoice + +output: + - uses: redis.write + with: + # Setting the data type to json ensures that the parent object will be created in a way that supports nesting. + data_type: json + # Important: do not set a custom key for the parent entity. + # When nesting the child object under the parent, the parent key is automatically calculated based on + # the parent table name and the parent key field and if a custom key is set, it will cause a mismatch + # between the key used to write the parent and the key used to write the child. + +``` + +After that parent model is configured, it is time to configure the child entities. To do that use the `nest` block, as shown in this example: ```yaml +# jobs/invoice_line.yaml source: server_name: chinook schema: public @@ -52,6 +75,7 @@ output: table: Invoice nesting_key: InvoiceLineId # cannot be composite parent_key: InvoiceId # cannot be composite + child_key: InvoiceId # optional, if different from parent_key path: $.InvoiceLineItems # path must start from document root ($) structure: map # only map supported for now on_update: merge # only merge supported for now @@ -111,3 +135,4 @@ There are several important things to note when you use nesting: See the [Debezium PostgreSQL Connector Documentation](https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-replica-identity) for more information about this. +- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. From 51276c03b9c5faa08880db31c23f11a8e3d357fe Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Tue, 20 May 2025 20:00:34 +0300 Subject: [PATCH 02/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 9057984774..219a38e37b 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -36,7 +36,7 @@ called `InvoiceLineItems`: {{< image filename="/images/rdi/ingest/nest-flow.webp" width="500px" >}} -When configuring normalization first you need to configure the parent entity to use JSON as the target data type. Add `data_type: json` to the parent job. Example: +To configure normalization, you must first configure the parent entity to use JSON as the target data type. Add `data_type: json` to the parent job as shown in the example below: ```yaml # jobs/invoice.yaml From 309493dadea5e0ce6ac1dc109dc02b52dc2e69bb Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Tue, 20 May 2025 20:00:48 +0300 Subject: [PATCH 03/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 219a38e37b..397291699c 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -57,7 +57,7 @@ output: ``` -After that parent model is configured, it is time to configure the child entities. To do that use the `nest` block, as shown in this example: +When you have configured the parent model, you must also configure the child entities. To do this, use the `nest` block, as shown in this example: ```yaml # jobs/invoice_line.yaml From 2269a2cb14c399365bc496f56485ea94a3a9f00c Mon Sep 17 00:00:00 2001 From: Ilian Iliev Date: Tue, 27 May 2025 12:56:44 +0300 Subject: [PATCH 04/15] Addressing review comments --- .../data-pipelines/data-denormalization.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 397291699c..3b8d445060 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -73,8 +73,8 @@ output: # server_name: chinook # schema: public table: Invoice - nesting_key: InvoiceLineId # cannot be composite - parent_key: InvoiceId # cannot be composite + nesting_key: InvoiceLineId # the unique key in the composite structure under which the child data will be stored + parent_key: InvoiceId child_key: InvoiceId # optional, if different from parent_key path: $.InvoiceLineItems # path must start from document root ($) structure: map # only map supported for now @@ -91,10 +91,9 @@ The job must include the following attributes in the `nest` block: `schema` attributes. Note that this attribute refers to a Redis *key* that will be added to the target database, not to a table you can access from the pipeline. See [Using nesting](#using-nesting) below for the format of the key that is generated. -- `nesting_key`: The field of the child entity that stores the unique ID (primary key) of the child entity. -- `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. -- `child_key`: The field in the child entity that stores the unique ID (foreign key) of the parent entity. - You only need to add this attribute if the name of the child's foreign key field is different from the parent's. +- `nesting_key`: The unique key of each child entry in the json map that will be created under the path. +- `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. Can not be composite key. +- `child_key`: The field in the child entity that stores the unique ID (foreign key) to the parent entity. You only need to add this attribute if the name of the child's foreign key field is different from the parent's. Can not be composite key. - `path`: The [JSONPath](https://goessner.net/articles/JsonPath/) for the map where you want to store the child entities. The path must start with the `$` character, which denotes the document root. @@ -135,4 +134,4 @@ There are several important things to note when you use nesting: See the [Debezium PostgreSQL Connector Documentation](https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-replica-identity) for more information about this. -- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. +- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. This is a known limitation of the current implementation and is a subject to change in future versions. From 36962f48d6911384c3cc1711b8d6046bee3efcee Mon Sep 17 00:00:00 2001 From: Ilian Iliev Date: Tue, 27 May 2025 13:01:50 +0300 Subject: [PATCH 05/15] Addressing review comments --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 3b8d445060..bfeaa4a862 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -134,4 +134,4 @@ There are several important things to note when you use nesting: See the [Debezium PostgreSQL Connector Documentation](https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-replica-identity) for more information about this. -- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. This is a known limitation of the current implementation and is a subject to change in future versions. +- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. This is a known limitation of the current implementation and is subject to change in future versions. From 31516c9c4993258c506ffb933c00db0eefd02427 Mon Sep 17 00:00:00 2001 From: Ilian Iliev Date: Wed, 4 Jun 2025 15:11:56 +0300 Subject: [PATCH 06/15] Adding examples for one-to-one relations --- .../data-pipelines/data-denormalization.md | 96 +++++++++++++++++-- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index bfeaa4a862..2f72ec673f 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -25,13 +25,89 @@ at the expense of speed. A Redis cache, on the other hand, is focused on making *read* queries fast, so RDI provides data *denormalization* to help with this. -## Nest strategy +## Joining one-to-one relationships -*Nesting* is the strategy RDI uses to denormalize many-to-one relationships in the source database. -It does this by representing the -parent object (the "one") as a JSON document with the children (the "many") nested inside a JSON map -attribute in the parent. The diagram belows shows a nesting with the child objects in a map -called `InvoiceLineItems`: +You can join one-to-one relationships by making more than one job to write to the same Redis key. + +First, you must configure the parent entity to use `merge` as the `on_update`. + +```yaml +# jobs/customers.yaml +source: + table: customers + +output: + - uses: redis.write + with: + data_type: json + on_update: merge +``` + +Then, you can configure the child entity to write to the same Redis key as the parent entity. You can do this by using the `key` attribute in the `with` block of the job, as shown in this example: + +```yaml +# jobs/addresses.yaml +source: + table: addresses + +transform: + - uses: add_field + with: + field: customer_address + language: jmespath + # You can use the following JMESPath expression to create a JSON object and combine the address fields into a single object. + expression: | + { + "street": street, + "city": city, + "state": state, + "zip": zip + } + +output: + - uses: redis.write + with: + data_type: json + # We specify the key to write to the same key as the parent entity. + key: + expression: concat(['customers:id:', customer_id]) + language: jmespath + on_update: merge + mapping: + # You can specify one or more fields to write to the parent entity. + - customer_address: customer_address +``` + +The joined data will look like this in Redis: + +```json +{ + "id": "1", + "first_name": "John", + "last_name": "Doe", + "customer_address": { + "street": "123 Main St", + "city": "Anytown", + "state": "CA", + "zip": "12345" + } +} +``` + +{{< note >}} +Not setting `merge` as the `on_update` strategy for all jobs targeting the same key, will cause the entire parent record in Redis to be overwritten whenever any related record in the source database is updated, resulting in the loss of values written by other jobs. +{{< /note >}} + +When using this approach, you must ensure that the `key` expression in the child job matches the key expression in the parent job. If you use a different key expression, the child data will not be written to the same Redis key as the parent data. + +In the example above, the `addresses` jobs uses the default key pattern to write to the same Redis key as the `customers` job. You can find more information about the default key pattern [here]({{< relref "/integrate/redis-data-integration/data-pipelines/transform-examples/redis-set-key-name" >}}). + +You can also use custom keys for the parent entity, as long as you use the same key for all jobs that write to the same Redis key. + +## Joining one-to-many relationships + +To join one-to-many relationships you can use the *Nesting* strategy. +With it, the parent object (the "one") is represented as a JSON document with the children (the "many") nested inside a JSON map attribute in the parent. The diagram below shows a nesting with the child objects in a map called `InvoiceLineItems`: {{< image filename="/images/rdi/ingest/nest-flow.webp" width="500px" >}} @@ -57,7 +133,9 @@ output: ``` -When you have configured the parent model, you must also configure the child entities. To do this, use the `nest` block, as shown in this example: +Once you have configured the parent entity, you can then configure the child entities to be nested under the parent entity based on their relation type. + +After you have configured the parent model, you must also configure the child entities. To do this, use the `nest` block, as shown in this example: ```yaml # jobs/invoice_line.yaml @@ -91,7 +169,7 @@ The job must include the following attributes in the `nest` block: `schema` attributes. Note that this attribute refers to a Redis *key* that will be added to the target database, not to a table you can access from the pipeline. See [Using nesting](#using-nesting) below for the format of the key that is generated. -- `nesting_key`: The unique key of each child entry in the json map that will be created under the path. +- `nesting_key`: The unique key of each child entry in the JSON map that will be created under the path. - `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. Can not be composite key. - `child_key`: The field in the child entity that stores the unique ID (foreign key) to the parent entity. You only need to add this attribute if the name of the child's foreign key field is different from the parent's. Can not be composite key. - `path`: The [JSONPath](https://goessner.net/articles/JsonPath/) @@ -100,7 +178,7 @@ The job must include the following attributes in the `nest` block: - `structure`: (Optional) The type of JSON nesting structure for the child entities. Currently, only a JSON map is supported so if you supply this attribute then the value must be `map`. -## Using nesting +### Using nesting There are several important things to note when you use nesting: From 36b36d3ed3c6878670788e8b805496b036be45ab Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:51:54 +0300 Subject: [PATCH 07/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 2f72ec673f..e0d3dd7259 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -29,7 +29,7 @@ A Redis cache, on the other hand, is focused on making *read* queries fast, so R You can join one-to-one relationships by making more than one job to write to the same Redis key. -First, you must configure the parent entity to use `merge` as the `on_update`. +First, you must configure the parent entity to use `merge` as the `on_update` strategy. ```yaml # jobs/customers.yaml From ab36a1427d40483c752403d8cfe5e39d3dee301c Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:52:14 +0300 Subject: [PATCH 08/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index e0d3dd7259..1888e593a4 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -95,7 +95,7 @@ The joined data will look like this in Redis: ``` {{< note >}} -Not setting `merge` as the `on_update` strategy for all jobs targeting the same key, will cause the entire parent record in Redis to be overwritten whenever any related record in the source database is updated, resulting in the loss of values written by other jobs. +If you don't set `merge` as the `on_update` strategy for all jobs targeting the same key, the entire parent record in Redis will be overwritten whenever any related record in the source database is updated. This will result in the loss of values written by other jobs. {{< /note >}} When using this approach, you must ensure that the `key` expression in the child job matches the key expression in the parent job. If you use a different key expression, the child data will not be written to the same Redis key as the parent data. From 96c0caf94f00d9cfc54842b0ea18f77384923668 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:52:30 +0300 Subject: [PATCH 09/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 1888e593a4..d386a26d90 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -100,7 +100,7 @@ If you don't set `merge` as the `on_update` strategy for all jobs targeting the When using this approach, you must ensure that the `key` expression in the child job matches the key expression in the parent job. If you use a different key expression, the child data will not be written to the same Redis key as the parent data. -In the example above, the `addresses` jobs uses the default key pattern to write to the same Redis key as the `customers` job. You can find more information about the default key pattern [here]({{< relref "/integrate/redis-data-integration/data-pipelines/transform-examples/redis-set-key-name" >}}). +In the example above, the `addresses` job uses the default key pattern to write to the same Redis key as the `customers` job. You can find more information about the default key pattern [here]({{< relref "/integrate/redis-data-integration/data-pipelines/transform-examples/redis-set-key-name" >}}). You can also use custom keys for the parent entity, as long as you use the same key for all jobs that write to the same Redis key. From 756b7d4ba4b25c000369583a7572ba4cec22b846 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:52:44 +0300 Subject: [PATCH 10/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index d386a26d90..f71b0ce703 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -106,7 +106,7 @@ You can also use custom keys for the parent entity, as long as you use the same ## Joining one-to-many relationships -To join one-to-many relationships you can use the *Nesting* strategy. +To join one-to-many relationships, you can use the *Nesting* strategy. With it, the parent object (the "one") is represented as a JSON document with the children (the "many") nested inside a JSON map attribute in the parent. The diagram below shows a nesting with the child objects in a map called `InvoiceLineItems`: {{< image filename="/images/rdi/ingest/nest-flow.webp" width="500px" >}} From 6fa0bb647b51aa1aa1f621415f1a5a21574a4cc8 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:53:42 +0300 Subject: [PATCH 11/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index f71b0ce703..0dd7e8bc8c 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -107,7 +107,7 @@ You can also use custom keys for the parent entity, as long as you use the same ## Joining one-to-many relationships To join one-to-many relationships, you can use the *Nesting* strategy. -With it, the parent object (the "one") is represented as a JSON document with the children (the "many") nested inside a JSON map attribute in the parent. The diagram below shows a nesting with the child objects in a map called `InvoiceLineItems`: +With this, the parent object (the "one") is represented as a JSON document with the children (the "many") nested inside it as a JSON map attribute. The diagram below shows a nesting with the child objects in a map called `InvoiceLineItems`: {{< image filename="/images/rdi/ingest/nest-flow.webp" width="500px" >}} From a93a5205cf8aad49eddc4855edb6ce355b17fce9 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:53:59 +0300 Subject: [PATCH 12/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 0dd7e8bc8c..b7c9c58a2c 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -133,9 +133,7 @@ output: ``` -Once you have configured the parent entity, you can then configure the child entities to be nested under the parent entity based on their relation type. - -After you have configured the parent model, you must also configure the child entities. To do this, use the `nest` block, as shown in this example: +After you have configured the parent entity, you can then configure the child entities to be nested under it, based on their relation type. To do this, use the `nest` block, as shown in this example: ```yaml # jobs/invoice_line.yaml From 8344a8362aa935794560d4d0d1d236062034de2b Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:54:11 +0300 Subject: [PATCH 13/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index b7c9c58a2c..5de32acb86 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -168,7 +168,7 @@ The job must include the following attributes in the `nest` block: database, not to a table you can access from the pipeline. See [Using nesting](#using-nesting) below for the format of the key that is generated. - `nesting_key`: The unique key of each child entry in the JSON map that will be created under the path. -- `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. Can not be composite key. +- `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. This can't be a composite key. - `child_key`: The field in the child entity that stores the unique ID (foreign key) to the parent entity. You only need to add this attribute if the name of the child's foreign key field is different from the parent's. Can not be composite key. - `path`: The [JSONPath](https://goessner.net/articles/JsonPath/) for the map where you want to store the child entities. The path must start with the `$` character, which denotes From 245fe777d730af6dca566cd2f7645e6368e6d718 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:54:21 +0300 Subject: [PATCH 14/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 5de32acb86..8aa67ec36e 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -169,7 +169,7 @@ The job must include the following attributes in the `nest` block: for the format of the key that is generated. - `nesting_key`: The unique key of each child entry in the JSON map that will be created under the path. - `parent_key`: The field in the parent entity that stores the unique ID (foreign key) of the parent entity. This can't be a composite key. -- `child_key`: The field in the child entity that stores the unique ID (foreign key) to the parent entity. You only need to add this attribute if the name of the child's foreign key field is different from the parent's. Can not be composite key. +- `child_key`: The field in the child entity that stores the unique ID (foreign key) to the parent entity. You only need to add this attribute if the name of the child's foreign key field is different from the parent's. This can't be a composite key. - `path`: The [JSONPath](https://goessner.net/articles/JsonPath/) for the map where you want to store the child entities. The path must start with the `$` character, which denotes the document root. From 30df7bccd3052888746a322d874b6de576bf4997 Mon Sep 17 00:00:00 2001 From: ilianiliev-redis Date: Wed, 4 Jun 2025 15:55:23 +0300 Subject: [PATCH 15/15] Update content/integrate/redis-data-integration/data-pipelines/data-denormalization.md Co-authored-by: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> --- .../data-pipelines/data-denormalization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md index 8aa67ec36e..1e598bdfc6 100644 --- a/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md +++ b/content/integrate/redis-data-integration/data-pipelines/data-denormalization.md @@ -210,4 +210,4 @@ There are several important things to note when you use nesting: See the [Debezium PostgreSQL Connector Documentation](https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-replica-identity) for more information about this. -- Changing the foreign key value of a child object results in the child object being added to the new parent, but the old parent is not updated. This is a known limitation of the current implementation and is subject to change in future versions. +- If you change the foreign key of a child object, the child object will be added to the new parent, but the old parent will not be updated. This is a known limitation of the current implementation and is subject to change in future versions.