@@ -589,6 +589,8 @@ def get_view_lineage(self) -> Iterable[MetadataWorkUnit]:
589
589
generate_operations = False ,
590
590
)
591
591
for dataset_name in self ._view_definition_cache .keys ():
592
+ # TODO: Ensure that the lineage generated from the view definition
593
+ # matches the dataset_name.
592
594
view_definition = self ._view_definition_cache [dataset_name ]
593
595
result = self ._run_sql_parser (
594
596
dataset_name ,
@@ -1094,6 +1096,20 @@ def loop_views(
1094
1096
exc = e ,
1095
1097
)
1096
1098
1099
+ def _get_view_definition (self , inspector : Inspector , schema : str , view : str ) -> str :
1100
+ try :
1101
+ view_definition = inspector .get_view_definition (view , schema )
1102
+ if view_definition is None :
1103
+ view_definition = ""
1104
+ else :
1105
+ # Some dialects return a TextClause instead of a raw string,
1106
+ # so we need to convert them to a string.
1107
+ view_definition = str (view_definition )
1108
+ except NotImplementedError :
1109
+ view_definition = ""
1110
+
1111
+ return view_definition
1112
+
1097
1113
def _process_view (
1098
1114
self ,
1099
1115
dataset_name : str ,
@@ -1112,7 +1128,10 @@ def _process_view(
1112
1128
columns = inspector .get_columns (view , schema )
1113
1129
except KeyError :
1114
1130
# For certain types of views, we are unable to fetch the list of columns.
1115
- self .warn (logger , dataset_name , "unable to get schema for this view" )
1131
+ self .report .warning (
1132
+ message = "Unable to get schema for a view" ,
1133
+ context = f"{ dataset_name } " ,
1134
+ )
1116
1135
schema_metadata = None
1117
1136
else :
1118
1137
schema_fields = self .get_schema_fields (dataset_name , columns , inspector )
@@ -1126,19 +1145,12 @@ def _process_view(
1126
1145
if self ._save_schema_to_resolver ():
1127
1146
self .schema_resolver .add_schema_metadata (dataset_urn , schema_metadata )
1128
1147
self .discovered_datasets .add (dataset_name )
1148
+
1129
1149
description , properties , _ = self .get_table_properties (inspector , schema , view )
1130
- try :
1131
- view_definition = inspector .get_view_definition (view , schema )
1132
- if view_definition is None :
1133
- view_definition = ""
1134
- else :
1135
- # Some dialects return a TextClause instead of a raw string,
1136
- # so we need to convert them to a string.
1137
- view_definition = str (view_definition )
1138
- except NotImplementedError :
1139
- view_definition = ""
1140
- properties ["view_definition" ] = view_definition
1141
1150
properties ["is_view" ] = "True"
1151
+
1152
+ view_definition = self ._get_view_definition (inspector , schema , view )
1153
+ properties ["view_definition" ] = view_definition
1142
1154
if view_definition and self .config .include_view_lineage :
1143
1155
self ._view_definition_cache [dataset_name ] = view_definition
1144
1156
@@ -1170,15 +1182,14 @@ def _process_view(
1170
1182
entityUrn = dataset_urn ,
1171
1183
aspect = SubTypesClass (typeNames = [DatasetSubTypes .VIEW ]),
1172
1184
).as_workunit ()
1173
- if "view_definition" in properties :
1174
- view_definition_string = properties ["view_definition" ]
1175
- view_properties_aspect = ViewPropertiesClass (
1176
- materialized = False , viewLanguage = "SQL" , viewLogic = view_definition_string
1177
- )
1178
- yield MetadataChangeProposalWrapper (
1179
- entityUrn = dataset_urn ,
1180
- aspect = view_properties_aspect ,
1181
- ).as_workunit ()
1185
+
1186
+ view_properties_aspect = ViewPropertiesClass (
1187
+ materialized = False , viewLanguage = "SQL" , viewLogic = view_definition
1188
+ )
1189
+ yield MetadataChangeProposalWrapper (
1190
+ entityUrn = dataset_urn ,
1191
+ aspect = view_properties_aspect ,
1192
+ ).as_workunit ()
1182
1193
1183
1194
if self .config .domain and self .domain_registry :
1184
1195
yield from get_domain_wu (
0 commit comments