# Remove fields from a key

```json metadata
{
  "schema_version": 2,
  "title": "Remove fields from a key",
  "description": "",
  "categories": ["docs","integrate","rs","rdi"],
  "group": "di",
  "tableOfContents": {"sections":[{"id":"remove-a-single-field","title":"Remove a single field"},{"id":"remove-multiple-fields","title":"Remove multiple fields"},{"id":"using-remove_field-with-add_field","title":"Using remove_field with add_field"}]}

,
  "codeExamples": []
}
```


By default, RDI adds fields to
[hash](https://redis.io/docs/latest/develop/data-types/hashes) or
[JSON](https://redis.io/docs/latest/develop/data-types/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`](https://redis.io/docs/latest/integrate/redis-data-integration/1.19.1/reference/data-transformation/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`](https://github.com/Redislabs-Solution-Architects/rdi-quickstart-postgres)
database (the optional `db` field here corresponds to the
`sources.<source-name>.connection.database` field defined in
[`config.yaml`](https://redis.io/docs/latest/integrate/redis-data-integration/1.19.1/data-pipelines/pipeline-config)).

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:

```yaml
name: Remove hiredate from employee
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`](https://redis.io/docs/latest/develop/tools/cli), you would
see something like the following:

```bash
> 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:

```bash
 > 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: 

```yaml
name: Remove multiple date fields from employee
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:

```bash
> 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`](https://redis.io/docs/latest/integrate/redis-data-integration/1.19.1/data-pipelines/transform-examples/redis-add-field-example).
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`](https://redis.io/docs/latest/integrate/redis-data-integration/1.19.1/data-pipelines/transform-examples/redis-add-field-example#using-add_field-with-remove_field)
for an example of how to do this.

