Using SQL CASE
The CASE
statement allows you to specify conditions and return different values based on those conditions. You can use it both to create new fields or filter existing data.
Using SQL CASE to create a new field
The example below demonstrates how to use the CASE
statement to create a new field called Market
based on the value of the BillingCountry
field in the Invoice
table. The new field categorizes countries into regions such as "North America" and "Europe".
source:
table: Invoice
transform:
- uses: add_field
with:
field: "Market"
language: sql
expression: |
CASE
WHEN BillingCountry = 'USA' THEN 'North America'
WHEN BillingCountry = 'Canada' THEN 'North America'
WHEN BillingCountry = 'UK' THEN 'Europe'
WHEN BillingCountry = 'France' THEN 'Europe'
ELSE 'Other'
END
Using SQL CASE to filter data
You can also use the CASE
statement to filter data based on specific conditions. The example below demonstrates how to filter the Invoice
table to include only invoices from the USA and Canada that have a Total
value above their country-specific threshold.
Because the Total
field is a Decimal in the source table, it is represented as a string in Debezium and so you must cast it to REAL
to compare it numerically in the CASE
statement. Without this cast, it will be compared as a string value, which will give the wrong result.
source:
table: Invoice
transform:
- uses: filter
with:
language: sql
expression: |
CASE
WHEN BillingCountry = 'USA' AND CAST(Total AS REAL) > 11.99 THEN True
WHEN BillingCountry = 'Canada' AND CAST(Total AS REAL) > 9.99 THEN True
ELSE False
END