diff --git a/dbt_coves/tasks/generate/sources.py b/dbt_coves/tasks/generate/sources.py index 6915d799..221fb7fc 100644 --- a/dbt_coves/tasks/generate/sources.py +++ b/dbt_coves/tasks/generate/sources.py @@ -317,7 +317,8 @@ def get_nested_keys(self, json_cols, relation): config_db = "" _, data = self.adapter.execute( f"SELECT {', '.join(json_cols)} FROM {config_db}{relation.schema}.{relation.name} \ - limit 1", + WHERE {' IS NOT NULL AND '.join([' CAST(' + sub + ' AS VARCHAR) ' for sub in json_cols])} \ + IS NOT NULL limit 1", fetch=True, ) result = dict() @@ -325,11 +326,13 @@ def get_nested_keys(self, json_cols, relation): for idx, json_col in enumerate(json_cols): value = data.columns[idx] try: - nested_key_names = list(json.loads(value[0]).keys()) - result[json_col] = {} - for key_name in nested_key_names: - result[json_col][key_name] = self.get_default_metadata_item(key_name) - self.add_metadata_to_nested(relation, result, json_col) + nested_object = json.loads(value[0]) + if type(nested_object) is dict: + nested_key_names = list(nested_object.keys()) + result[json_col] = {} + for key_name in nested_key_names: + result[json_col][key_name] = self.get_default_metadata_item(key_name) + self.add_metadata_to_nested(relation, result, json_col) except TypeError: console.print( f"Column {json_col} in relation {relation.name} contains invalid JSON.\n"