-
Notifications
You must be signed in to change notification settings - Fork 0
06. Dari beam ETL labels table
jmesi edited this page Aug 8, 2024
·
1 revision
When using the new Dari beam ETL connector, the labels table is stored as a registry in the db. The script below helps in extracting the json object into the normal table we use for left joining of labels.
-- Extract the json column we want, limit by 1 row since the data has a row for each filled record.
with dd as
(
select
json -> 'xform:choices' as data
from public.job_ism_form1_registry
limit 1
),
-- Strip down the json to the columns we want, question and label details (this includes the language(s) in the form).
unnest_1 as (
select
js.key as question,
js.value as label_details
from dd, jsonb_each(dd.data) as js
),
-- Strip down the json further this time getting the code (name column in the xlsform)
unnest_2 as (
select unnest_1.question,
js1.key as code, js1.value as language
from unnest_1, jsonb_each(unnest_1.label_details) as js1
)
-- Since the data has a slash(/) sperator for the choices question, we are reversing the order then get the first object before the first slash then reverse it back.
select
reverse(split_part(reverse(unnest_2.question), '/', 1)) question,
unnest_2.code,
-- Since languages are dynamic,we add this manually for each of the languages used ("und" is when no language has been specified on the form)
unnest_2.language ->> 'und' AS und_label
from unnest_2