We need to push data from CouchDb to PostgreSQL (already done using Couch2pg API).
The current utility of the data is as follows:
- Tabular format for use by project team members (Currently downloaded as csv, but json format)
- Materialized views for Superset dashboard (Tabular format)
The view runs, but returns null values in some fields, especially from the CIF form.
We did a join operation on couchdb table and raw_contacts view to get the missing fields, but still null result is returned.
I share updated code as below, which runs but doesn’t display all the fields, , which has our test results
SELECT couchdb.doc ->> ‘_id’::text AS uuid,
couchdb.doc ->> ‘_rev’::text AS rev,
couchdb.doc ->> ‘form’::text AS form,
couchdb.doc ->> ‘from’::text AS “from”,
couchdb.doc ->> ‘type’::text AS type1,
couchdb.doc #>> ‘{fields,lab,specimen_id}’::text[] AS specimen_id,
couchdb.doc #>> ‘{fields,lab,testing_lab}’::text[] AS testing_lab,
couchdb.doc #>> ‘{fields,lab,r_specimen_id}’::text[] AS r_specimen_id,
couchdb.doc #>> ‘{fields,lab,date_spec_coll}’::text[] AS date_spec_coll,
couchdb.doc #>> ‘{fields,lab,monotonic_counter}’::text[] AS monotonic_counter,
couchdb.doc #>> ‘{meta,instanceID}’::text[] AS instanceid,
couchdb.doc #>> ‘{inputs,meta,location,lat}’::text[] AS lat,
couchdb.doc #>> ‘{inputs,meta,location,long}’::text[] AS long,
couchdb.doc #>> ‘{inputs,meta,location,error}’::text[] AS error,
couchdb.doc #>> ‘{inputs,meta,location,message}’::text[] AS message,
couchdb.doc #>> ‘{inputs,meta,depracatedID}’::text[] AS depracatedid,
couchdb.doc #>> ‘{user,name}’::text[] AS name1,
couchdb.doc ->> ‘source’::text AS source,
couchdb.doc #>> ‘{contact,_id}’::text[] AS _id,
couchdb.doc #>> ‘{contact,sex}’::text[] AS sex1,
couchdb.doc #>> ‘{contact,name}’::text[] AS name2,
couchdb.doc #>> ‘{contact,role}’::text[] AS role,
couchdb.doc #>> ‘{contact,type}’::text[] AS type2,
couchdb.doc #>> ‘{Vaccine,covdose}’::text[] AS covdose,
couchdb.doc #>> ‘{Vaccine,covax}’::text[] AS covax,
couchdb.doc #>> ‘{Vaccine,vaxboost}’::text[] AS vaxboost,
couchdb.doc #>> ‘{Vaccine,vaxplace}’::text[] AS vaxplace,
couchdb.doc #>> ‘{testing,cov_dose}’::text[] AS cov_dose,
couchdb.doc #>> ‘{testing,tb_test}’::text[] AS tb_test,
couchdb.doc #>> ‘{screening,bi}’::text[] AS bi,
couchdb.doc #>> ‘{screening,tb}’::text[] AS tb,
couchdb.doc #>> ‘{screening,cov}’::text[] AS cov,
couchdb.doc #>> ‘{screening,biscreen}’::text[] AS biscreen,
couchdb.doc #>> ‘{screening,bi_suspect}’::text[] AS bi_suspect,
couchdb.doc #>> ‘{sampling_place,test_place}’::text[] AS test_place,
raw_contacts.doc #>> ‘{meta,created_by_place_uuid}’::text[] AS created_by_place_uuid,
raw_contacts.doc #>> ‘{meta,created_by_person_uuid}’::text[] AS created_by_person_uuid,
raw_contacts.doc ->> ‘type’::text AS type3,
raw_contacts.doc ->> ‘contact’::text AS contact,
raw_contacts.doc ->> ‘gender’::text AS gender,
raw_contacts.doc #>> ‘{parent,_id}’::text[] AS parent_uuid,
raw_contacts.doc #>> ‘{address,nhif}’::text[] AS nhif,
raw_contacts.doc #>> ‘{address,ward}’::text[] AS ward,
raw_contacts.doc #>> ‘{address,phone}’::text[] AS phone,
raw_contacts.doc #>> ‘{address,county}’::text[] AS county,
raw_contacts.doc #>> ‘{address,village}’::text[] AS village,
raw_contacts.doc #>> ‘{address,kin_name}’::text[] AS kin_name,
raw_contacts.doc #>> ‘{address,p_address}’::text[] AS p_address,
raw_contacts.doc #>> ‘{address,residence}’::text[] AS residence,
raw_contacts.doc #>> ‘{address,subcounty}’::text[] AS subcounty,
raw_contacts.doc #>> ‘{address,nationality}’::text[] AS nationality,
raw_contacts.doc #>> ‘{address,alternate_phone}’::text[] AS alternate_phone,
raw_contacts.doc #>> ‘{address,kin_phone_number}’::text[] AS kin_phone_number,
raw_contacts.doc #>> ‘{address,kin_relationship}’::text[] AS kin_relationship,
raw_contacts.doc #>> ‘{address,address_delimiter}’::text[] AS address_delimiter,
raw_contacts.doc #>> ‘{address,link_health_facility}’::text[] AS link_health_facility,
raw_contacts.doc #>> ‘{address,n_next_of_kin_details}’::text[] AS next_of_kin_details,
raw_contacts.doc #>> ‘{medical,m_exam}’::text[] AS m_exam,
raw_contacts.doc #>> ‘{medical,info_tb}’::text[] AS info_tb,
raw_contacts.doc #>> ‘{medical,tbaware}’::text[] AS tbaware,
raw_contacts.doc #>> ‘{medical,info_cov}’::text[] AS info_cov,
raw_contacts.doc #>> ‘{medical,covidaware}’::text[] AS covidaware,
raw_contacts.doc #>> ‘{per_info,sex}’::text[] AS sex2,
raw_contacts.doc #>> ‘{per_info,name}’::text[] AS name3,
raw_contacts.doc #>> ‘{per_info,f_name}’::text[] AS f_name,
raw_contacts.doc #>> ‘{per_info,o_name}’::text[] AS o_name,
raw_contacts.doc #>> ‘{per_info,s_name}’::text[] AS s_name,
raw_contacts.doc #>> ‘{per_info,case_id}’::text[] AS case_id,
raw_contacts.doc #>> ‘{per_info,dob_known}’::text[] AS dob_known,
raw_contacts.doc #>> ‘{per_info,education}’::text[] AS education,
raw_contacts.doc #>> ‘{per_info,dob_approx}’::text[] AS dob_approx,
raw_contacts.doc #>> ‘{per_info,national_id}’::text[] AS national_id,
raw_contacts.doc #>> ‘{per_info,age_in_years}’::text[] AS age_in_years,
raw_contacts.doc #>> ‘{per_info,dob_calendar}’::text[] AS dob_calendar,
raw_contacts.doc #>> ‘{per_info,id_delimiter}’::text[] AS id_delimiter,
raw_contacts.doc #>> ‘{per_info,n_id_numbers}’::text[] AS n_id_numbers,
raw_contacts.doc #>> ‘{per_info,patient_name}’::text[] AS patient_name,
raw_contacts.doc #>> ‘{per_info,p_national_id}’::text[] AS p_nattional_id,
raw_contacts.doc #>> ‘{per_info,marital_status}’::text[] AS marital_status,
raw_contacts.doc #>> ‘{per_info,n_demographics}’::text[] AS n_demographics,
raw_contacts.doc #>> ‘{per_info,ephemeral_years}’::text[] AS ephemeral_years,
raw_contacts.doc #>> ‘{per_info,type_of_identifier}’::text[] AS type_of_identifier,
raw_contacts.doc #>> ‘{per_info,demographics_delimiter}’::text[] AS demographics_delimiter,
raw_contacts.doc ->> ‘place_id’::text AS place_id,
raw_contacts.doc ->> ‘id_number’::text AS id_number,
raw_contacts.doc #>> ‘{consenting,icf}’::text[] AS icf,
raw_contacts.doc #>> ‘{consenting,consent1}’::text[] AS consent1,
raw_contacts.doc #>> ‘{consenting,consent2}’::text[] AS consent2,
raw_contacts.doc #>> ‘{eligibility,c1}’::text[] AS c1,
raw_contacts.doc #>> ‘{eligibility,c5}’::text[] AS c5,
raw_contacts.doc #>> ‘{eligibility,elig}’::text[] AS elig,
raw_contacts.doc #>> ‘{eligibility,p_elig}’::text[] AS p_elig,
raw_contacts.doc #>> ‘{eligibility,eligible}’::text[] AS eligible,
raw_contacts.doc ->> ‘patient_age’::text AS patient_age,
raw_contacts.doc ->> ‘contact_type’::text AS contact_type,
raw_contacts.doc ->> ‘introduction’::text AS introduction,
raw_contacts.doc ->> ‘phone_number’::text AS phone_number,
raw_contacts.doc ->> ‘date_of_birth’::text AS date_of_birth,
raw_contacts.doc ->> ‘reported_date’::text AS reported_date,
raw_contacts.doc ->> ‘relationship_delimiter’::text AS relationship_delimiter,
raw_contacts.doc ->> ‘notes’::text AS notes
FROM couchdb
LEFT JOIN raw_contacts ON (couchdb.doc ->> ‘_id’::text) = (raw_contacts.doc ->> ‘_id’::text);
We created a view to join the two tables and got the error below, indicating issues with custom view refresh:
@jkuester, @diana, please review and advise, we thought we would find all the report data on the couchdb table after using the API, which isn’t the case now