Skip to content

Commit 454e828

Browse files
authored
Develop ingest bugs (#188)
* Update code for bugs related to ingest module. * Update schema and connection references * Update delta path * Update metadata for additional configurations in ingest metadata
1 parent f213200 commit 454e828

9 files changed

Lines changed: 115 additions & 90 deletions

File tree

‎src/azure.databricks/python/notebooks/ingest/ingestpayload/CheckPayloadExecution.py‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
# COMMAND ----------
5050

51-
[table_name, load_type, load_action, load_action_text, version_number, raw_storage_name, raw_container_name, raw_secret, raw_last_load_date, raw_schema_name, raw_file_type, datetime_folder_hierarchy, cleansed_storage_name, cleansed_container_name, cleansed_secret, cleansed_last_load_date, cleansed_schema_name, filter_condition, pk_list, partition_list, columns_list, columns_type_list, columns_format_list, metadata_column_list, metadata_column_type_list, metadata_column_format_list, total_column_list, total_column_type_list, total_column_format_list] = get_merge_payload_variables(payload)
51+
[table_name,load_type,load_action,load_action_text,version_number,raw_storage_name,raw_container_name,raw_secret,raw_last_load_date,raw_connection_name,raw_file_type,raw_path,raw_name,datetime_folder_hierarchy,cleansed_storage_name,cleansed_container_name,cleansed_secret,cleansed_last_load_date,cleansed_connection_name,cleansed_path,cleansed_name,cleansed_folder,filter_condition,pk_list,partition_list,columns_list,columns_type_list,columns_format_list,metadata_column_list,metadata_column_type_list,metadata_column_format_list,total_column_list,total_column_type_list,total_column_format_list] = get_merge_payload_variables(payload)
5252

5353
# COMMAND ----------
5454

@@ -87,14 +87,6 @@
8787

8888
# COMMAND ----------
8989

90-
check_container_name(container_name = raw_container_name)
91-
92-
# COMMAND ----------
93-
94-
check_container_name(container_name = cleansed_container_name)
95-
96-
# COMMAND ----------
97-
9890
# MAGIC %md
9991
# MAGIC # Check: Storage accessibility
10092

@@ -113,7 +105,7 @@
113105

114106
# COMMAND ----------
115107

116-
schema_exists = check_exists_delta_schema(schema_name = cleansed_schema_name)
108+
schema_exists = check_exists_delta_schema(schema_name = cleansed_folder)
117109

118110
# COMMAND ----------
119111

@@ -122,7 +114,7 @@
122114

123115
# COMMAND ----------
124116

125-
cleansed_table_path = set_table_path(schema_name =cleansed_schema_name, table_name =table_name)
117+
cleansed_table_path = set_table_path(schema_name =cleansed_folder, table_name =table_name)
126118
print(cleansed_table_path)
127119

128120
# COMMAND ----------

‎src/azure.databricks/python/notebooks/ingest/ingestpayload/IngestExecution.py‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161

6262
# COMMAND ----------
6363

64-
[table_name, load_type, load_action, load_action_text, version_number, raw_storage_name, raw_container_name, raw_secret, raw_last_load_date, raw_schema_name, raw_file_type, datetime_folder_hierarchy, cleansed_storage_name, cleansed_container_name, cleansed_secret, cleansed_last_load_date, cleansed_schema_name, filter_condition, pk_list, partition_list, columns_list, columns_type_list, columns_format_list, metadata_column_list, metadata_column_type_list, metadata_column_format_list, total_column_list, total_column_type_list, total_column_format_list] = get_merge_payload_variables(payload)
64+
[table_name,load_type,load_action,load_action_text,version_number,raw_storage_name,raw_container_name,raw_secret,raw_last_load_date,raw_connection_name,raw_file_type,raw_path,raw_name,datetime_folder_hierarchy,cleansed_storage_name,cleansed_container_name,cleansed_secret,cleansed_last_load_date,cleansed_connection_name,cleansed_path,cleansed_name,cleansed_folder,filter_condition,pk_list,partition_list,columns_list,columns_type_list,columns_format_list,metadata_column_list,metadata_column_type_list,metadata_column_format_list,total_column_list,total_column_type_list,total_column_format_list] = get_merge_payload_variables(payload)
6565

6666

6767
# COMMAND ----------
@@ -94,7 +94,7 @@
9494
}
9595

9696
#different options for specifying, based on how we save abfss folder hierarchy.
97-
file_full_path = f"{raw_abfss_path}/{raw_schema_name}/{table_name}/version={version_number}/{load_action_text}/{datetime_folder_hierarchy}/{table_name}.{raw_file_type}"
97+
file_full_path = f"{raw_abfss_path}/{raw_connection_name}/{table_name}/version={version_number}/{load_action_text}/{datetime_folder_hierarchy}/{table_name}.{raw_file_type}"
9898
print(file_full_path)
9999

100100
# assuming json,csv, parquet
@@ -104,7 +104,7 @@
104104
.load(file_full_path)
105105

106106
elif raw_file_type == "delta":
107-
file_full_path = f"{raw_abfss_path}/{raw_schema_name}/{table_name}"
107+
file_full_path = f"{raw_abfss_path}/{raw_path}/{raw_name}"
108108
df = spark.read.format("delta").load(file_full_path)
109109

110110
# apply incremental loading filter
@@ -185,32 +185,32 @@
185185

186186
# check Delta Objects exist (import check functions)
187187
# check schema exists
188-
schema_exists = check_exists_delta_schema(schema_name=cleansed_schema_name)
188+
schema_exists = check_exists_delta_schema(schema_name=cleansed_folder)
189189

190190
# create schema, if required
191191
if schema_exists == False:
192-
create_schema(container_name=cleansed_container_name, schema_name=cleansed_schema_name)
192+
create_schema(container_name=cleansed_container_name, schema_name=cleansed_folder)
193193

194194
# COMMAND ----------
195195

196196
# check Delta Objects exist (import check functions)
197197
# set Delta Table file path
198-
location = set_delta_table_location(schema_name=cleansed_schema_name, table_name=table_name, abfss_path=cleansed_abfss_path)
198+
location = set_delta_table_location(schema_name=cleansed_folder, table_name=table_name, abfss_path=cleansed_abfss_path)
199199

200200
# check Delta table exists
201-
cleansed_table_path = set_table_path(schema_name =cleansed_schema_name, table_name =table_name)
201+
cleansed_table_path = set_table_path(schema_name =cleansed_folder, table_name =table_name)
202202
table_exists = check_exists_delta_table(table_path = cleansed_table_path, load_action = load_action, load_type = load_type)
203203

204204
# Create Delta table, if required
205205
table_created = False
206206

207207
if table_exists == False:
208208
columns_string = format_columns_sql(total_column_list, total_column_type_list)
209-
create_table(container_name=cleansed_container_name, schema_name=cleansed_schema_name, table_name=table_name,location=location, partition_fields_sql=partition_fields_sql, columns_string=columns_string)
209+
create_table(container_name=cleansed_container_name, schema_name=cleansed_folder, table_name=table_name,location=location, partition_fields_sql=partition_fields_sql, columns_string=columns_string)
210210
table_created = True
211211

212212
# get operations metrics
213-
output = get_operation_metrics(schema_name=cleansed_schema_name, table_name=table_name, output=output)
213+
output = get_operation_metrics(schema_name=cleansed_folder, table_name=table_name, output=output)
214214

215215

216216
# COMMAND ----------
@@ -224,13 +224,13 @@
224224
else:
225225
raise Exception("load_action not supported.")
226226

227-
target_delta = get_target_delta_table(schema_name = cleansed_schema_name, table_name=table_name)
227+
target_delta = get_target_delta_table(schema_name = cleansed_connection_name, table_name=table_name)
228228

229-
write_to_delta_executor(write_mode=write_mode, target_df=target_delta, df=df, schema_name=cleansed_schema_name, table_name=table_name, pk_fields=pk_list, columns_list=total_column_list, partition_fields=partition_list)
229+
write_to_delta_executor(write_mode=write_mode, target_df=target_delta, df=df, schema_name=cleansed_folder, table_name=table_name, pk_fields=pk_list, columns_list=total_column_list, partition_fields=partition_list)
230230

231231
# COMMAND ----------
232232

233-
output = get_operation_metrics(schema_name=cleansed_schema_name, table_name=table_name, output=output)
233+
output = get_operation_metrics(schema_name=cleansed_folder, table_name=table_name, output=output)
234234
print(output)
235235

236236
# COMMAND ----------

‎src/azure.databricks/python/notebooks/ingest/utils/ConfigurePayloadVariables.py‎

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,41 @@ def get_merge_payload_variables(payload: dict()) -> list():
1111
raw_secret = payload["RawStorageAccessKey"]
1212
raw_last_load_date = payload["RawLastLoadDate"]
1313

14-
raw_schema_name = payload["RawSchemaName"]
15-
raw_file_type = payload["RawFileType"]
14+
raw_connection_name = payload["RawConnectionName"] # connection name of data source
15+
raw_file_type = payload["RawFileType"]
16+
raw_path = payload["RawPath"] # physical path in raw container
17+
raw_name = payload["RawName"] # file name in raw container
18+
1619
datetime_folder_hierarchy = payload["DateTimeFolderHierarchy"]
1720

1821
cleansed_storage_name = payload["CleansedStorageName"]
1922
cleansed_container_name = payload["CleansedContainerName"]
2023
cleansed_secret = payload["CleansedStorageAccessKey"]
2124
cleansed_last_load_date = payload["CleansedLastLoadDate"]
2225

23-
cleansed_schema_name = payload["CleansedSchemaName"]
26+
cleansed_connection_name = payload["CleansedConnectionName"] # connection name of data source
27+
cleansed_path = payload["CleansedPath"] # desired physical path in cleansed container
28+
cleansed_name = payload["CleansedName"] # desired file name in cleansed container
29+
30+
cleansed_folder = cleansed_path if raw_file_type == "delta" else cleansed_connection_name
2431

2532
filter_condition = payload["FilterCondition"]
2633

2734
# Semantic checks for these required in the IngestChecks notebook?
28-
pk_list = payload["CleansedPkList"].split(",")
29-
partition_list = payload["CleansedPartitionFields"].split(",") if payload["CleansedPartitionFields"] != "" else []
35+
pk_list = payload["CleansedPkList"].split("|")
36+
partition_list = payload["CleansedPartitionFields"].split("|") if payload["CleansedPartitionFields"] != "" else []
3037

31-
columns_list = payload["CleansedColumnsList"].split(",")
32-
columns_type_list = payload["CleansedColumnsTypeList"].split(",")
33-
columns_format_list = payload["CleansedColumnsFormatList"].split(",")
38+
columns_list = payload["CleansedColumnsList"].split("|")
39+
columns_type_list = payload["CleansedColumnsTypeList"].split("|")
40+
columns_format_list = payload["CleansedColumnsFormatList"].split("|")
3441
metadata_column_list = ["PipelineRunId","PipelineExecutionDateTime"]
3542
metadata_column_type_list = ["STRING","TIMESTAMP"]
3643
metadata_column_format_list = ["","yyyy-MM-dd HH:mm:ss"]
3744

38-
# metadata_column_list = payload["cleansedMetadataColumnList"].split(",")
39-
# metadata_column_type_list = payload["cleansedMetadataColumnTypeList"].split(",")
40-
# metadata_column_format_list = payload["cleansedMetadataColumnFormatList"].split(",")
41-
4245
total_column_list = columns_list + metadata_column_list
4346
total_column_type_list = columns_type_list + metadata_column_type_list
4447
total_column_format_list = columns_format_list + metadata_column_format_list
4548

46-
# totalColumnList = columns_list
47-
# totalColumnTypeList = columnsTypeList
48-
# totalColumnFormatList = columnsFormatList
49-
50-
output = [table_name, load_type, load_action, load_action_text, version_number, raw_storage_name, raw_container_name, raw_secret, raw_last_load_date, raw_schema_name, raw_file_type, datetime_folder_hierarchy, cleansed_storage_name, cleansed_container_name, cleansed_secret, cleansed_last_load_date, cleansed_schema_name, filter_condition, pk_list, partition_list, columns_list, columns_type_list, columns_format_list, metadata_column_list, metadata_column_type_list, metadata_column_format_list, total_column_list, total_column_type_list, total_column_format_list]
49+
output = [table_name,load_type,load_action,load_action_text,version_number,raw_storage_name,raw_container_name,raw_secret,raw_last_load_date,raw_connection_name,raw_file_type,raw_path,raw_name,datetime_folder_hierarchy,cleansed_storage_name,cleansed_container_name,cleansed_secret,cleansed_last_load_date,cleansed_connection_name,cleansed_path,cleansed_name,cleansed_folder,filter_condition,pk_list,partition_list,columns_list,columns_type_list,columns_format_list,metadata_column_list,metadata_column_type_list,metadata_column_format_list,total_column_list,total_column_type_list,total_column_format_list]
5150

5251
return output

‎src/azure.databricks/python/notebooks/transform/utils/ConfigurePayloadVariables.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ def get_transform_payload_variables(payload: dict()) -> list():
99

1010
curated_schema_name = payload["SchemaName"]
1111
curated_dataset_name = payload["DatasetName"]
12-
columns_list = payload["ColumnsList"].split(",")
13-
column_type_list = payload["ColumnTypeList"].split(",")
12+
columns_list = payload["ColumnsList"].split("|")
13+
column_type_list = payload["ColumnTypeList"].split("|")
1414

15-
bk_list = payload["BkAttributesList"].split(",")
16-
partition_list = payload["PartitionByAttributesList"].split(",") if payload["PartitionByAttributesList"] != "" else []
15+
bk_list = payload["BkAttributesList"].split("|")
16+
partition_list = payload["PartitionByAttributesList"].split("|") if payload["PartitionByAttributesList"] != "" else []
1717

1818
surrogate_key = payload["SurrogateKey"]
1919

‎src/azure.databricks/python/tests/test_CreateMergeQuery.py‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,20 @@ def test_select_sql_columns_format_string_timestamp_format_type2(self):
6767
actual1 = select_sql_columns_format_string(['time'],['timestamp'], ['yyyy-MM-ddTHH:mm:ss.SSSSSSSZ'])
6868
expected1 = "to_timestamp(time) as time"
6969
assert actual1 == expected1
70+
71+
def test_select_sql_columns_format_string_decimal(self):
72+
actual1 = select_sql_columns_format_string(['value'],['decimal(10,2)'], [''])
73+
expected1 = "cast(value as decimal(10,2)) as value"
74+
actual2 = select_sql_columns_format_string(['value'],['decimal(10)'], [''])
75+
expected2 = "cast(value as decimal(10)) as value"
7076

77+
assert actual1 == expected1
78+
assert actual2 == expected2
79+
80+
def test_select_sql_columns_format_string_decimal2(self):
81+
actual1 = select_sql_columns_format_string(['value', 'conversion_rate'],['decimal(10,2)', 'decimal(10,4)'], ['',''])
82+
expected1 = "cast(value as decimal(10,2)) as value, cast(conversion_rate as decimal(10,4)) as conversion_rate"
83+
assert actual1 == expected1
7184

7285
# def test_select_sql_columns_format_string_timestamp_long_format(self):
7386
# with self.assertRaises(Exception) as context:

0 commit comments

Comments
 (0)