Remove fields from a key
By default, RDI adds fields to
hash or
JSON objects in the target
database for each of the columns of the source table.
The examples below show how to omit some of those fields from the target data with the
remove_field transformation.
Remove a single field
The first example removes a single field from the data.
The source section selects the employee table of the
chinook
database (the optional db field here corresponds to the
sources.<source-name>.connection.database field defined in
config.yaml).
In the transform section, the remove_field transformation removes the
hiredate field.
The output section specifies hash as the data_type to write to the target, which
overrides the default setting of target_data_type defined in config.yaml. Also, the
output.with.key section specifies a custom key format of the form emp:<employeeid>.
Note that any fields you remove in the transform section are not available for
the key calculation in the output section.
The full example is shown below:
source:
db: chinook
table: employee
transform:
- uses: remove_field
with:
field: hiredate
output:
- uses: redis.write
with:
connection: target
data_type: hash
key:
expression: concat(['emp:', employeeid])
language: jmespath
If you queried the generated target data from the default transformation
using redis-cli, you would
see something like the following:
> hgetall emp:8
1) "employeeid"
2) "8"
3) "lastname"
4) "Callahan"
5) "firstname"
6) "Laura"
7) "title"
8) "IT Staff"
9) "reportsto"
10) "6"
11) "birthdate"
12) "-62467200000000"
13) "hiredate"
14) "1078358400000000"
15) "address"
16) "923 7 ST NW"
.
.
Using the job file above, the data omits the hiredate field:
> hgetall emp:8
1) "employeeid"
2) "8"
3) "lastname"
4) "Callahan"
5) "firstname"
6) "Laura"
7) "title"
8) "IT Staff"
9) "reportsto"
10) "6"
11) "birthdate"
12) "-62467200000000"
13) "address"
14) "923 7 ST NW"
.
.
Remove multiple fields
The remove_field transformation can also remove multiple fields at the same time
if you specify them under a fields subsection. The example below is similar
to the previous one but also removes the birthdate field:
source:
db: chinook
table: employee
transform:
- uses: remove_field
with:
fields:
- field: hiredate
- field: birthdate
output:
- uses: redis.write
with:
connection: target
data_type: hash
key:
expression: concat(['emp:', employeeid])
language: jmespath
If you query the data, you can see that it also omits the
birthdate field:
> hgetall emp:8
1) "employeeid"
2) "8"
3) "lastname"
4) "Callahan"
5) "firstname"
6) "Laura"
7) "title"
8) "IT Staff"
9) "reportsto"
10) "6"
11) "address"
12) "923 7 ST NW"
.
.
Using remove_field with add_field
The remove_field transformation is very useful in combination with
add_field.
For example, if you use add_field to concatenate a person's first
and last names, you may not need separate firstname and lastname
fields, so you can use remove_field to omit them.
See Using add_field with remove_field
for an example of how to do this.