SilverStreamingApplication 1.8__tar.gz → 1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/PKG-INFO +3 -2
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/Operations.py +4 -69
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/SilverMerge.py +10 -21
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/WorkflowBuilder.py +45 -33
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/setup.py +1 -1
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/silverstreamingapplication.egg-info/PKG-INFO +3 -2
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/Maintenance.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/PartitionAnalyzer.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/PerfAnalyzer.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/__init__.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/logging.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/sparksession.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/utils.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/utilsDatabricksAPI.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/OperationsTest.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/__init__.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/main_test.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/utils_test.py +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/setup.cfg +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/silverstreamingapplication.egg-info/SOURCES.txt +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/silverstreamingapplication.egg-info/dependency_links.txt +0 -0
- {silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/silverstreamingapplication.egg-info/top_level.txt +0 -0
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/Operations.py
RENAMED
|
@@ -2,10 +2,6 @@ from pyspark.sql.utils import AnalysisException
|
|
|
2
2
|
from com.phida.main.sparksession import spark
|
|
3
3
|
from pyspark.sql.functions import col
|
|
4
4
|
from pyspark.sql.types import _parse_datatype_string, StructType, StructField
|
|
5
|
-
#Importing dbutils as it is used in file movement.
|
|
6
|
-
from pyspark.dbutils import DBUtils
|
|
7
|
-
|
|
8
|
-
dbutils = DBUtils(spark.sparkContext)
|
|
9
5
|
|
|
10
6
|
|
|
11
7
|
def tableExists(dbName, tblName):
|
|
@@ -57,30 +53,14 @@ def getKeyCols(dbName, tblName):
|
|
|
57
53
|
"""
|
|
58
54
|
|
|
59
55
|
try:
|
|
60
|
-
|
|
61
|
-
# To achive Below Logic:
|
|
62
|
-
#If Both HVR and DSP -> DSP Wins -> __timestamp
|
|
63
|
-
#IF Only HVR Or DSP -> Particluar wins
|
|
64
|
-
table = spark.read.table(f"{dbName}.{tblName}")
|
|
65
|
-
existing_cols = table.columns
|
|
66
|
-
|
|
67
|
-
# Determine the best column to order by
|
|
68
|
-
order_cols = [c for c in ["src_commit_time", "__timestamp"] if c in existing_cols]
|
|
69
|
-
|
|
70
|
-
if order_cols:
|
|
71
|
-
keyCols = (table
|
|
72
|
-
.orderBy(*order_cols, ascending=False)
|
|
73
|
-
.select("src_key_cols")
|
|
74
|
-
.limit(1)
|
|
75
|
-
.collect()[0][0]
|
|
76
|
-
)
|
|
77
|
-
else:
|
|
78
|
-
keyCols = (table
|
|
56
|
+
keyCols = (spark.read.table(dbName + "." + tblName)
|
|
79
57
|
.select("src_key_cols")
|
|
80
58
|
.limit(1)
|
|
81
59
|
.collect()[0][0]
|
|
82
60
|
)
|
|
83
61
|
return keyCols
|
|
62
|
+
|
|
63
|
+
|
|
84
64
|
except Exception:
|
|
85
65
|
raise Exception(
|
|
86
66
|
f"the column src_key_cols is not present in the given table {dbName}.{tblName}")
|
|
@@ -530,49 +510,4 @@ def buildJoinCondition(keyColsList):
|
|
|
530
510
|
for column in keyColsList:
|
|
531
511
|
condition = condition + "t.`" + column + "` <=> " + "s.`" + column + "` AND "
|
|
532
512
|
|
|
533
|
-
return condition[:-5]
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
# A Function for moving files from DSP to Bronze for the given source table.
|
|
537
|
-
# Since, DSP Writes into two Folders "initial" and "delta", .parquet files from these two folders are recursively
|
|
538
|
-
# moved into Bronze Table Location.
|
|
539
|
-
def move_dsp_to_bronze(srcDatabaseName, srcTableName, src_dsp_path, src_table_path):
|
|
540
|
-
dsp_path = src_dsp_path
|
|
541
|
-
bronze_path = src_table_path
|
|
542
|
-
num_files = 0
|
|
543
|
-
|
|
544
|
-
print(f"Recursively copying all files from {dsp_path} to {bronze_path} (flattened, no hierarchy, source not deleted)")
|
|
545
|
-
|
|
546
|
-
def list_all_files(path):
|
|
547
|
-
files = []
|
|
548
|
-
for item in dbutils.fs.ls(path):
|
|
549
|
-
if item.isDir():
|
|
550
|
-
files.extend(list_all_files(item.path))
|
|
551
|
-
else:
|
|
552
|
-
files.append(item.path)
|
|
553
|
-
return files
|
|
554
|
-
|
|
555
|
-
try:
|
|
556
|
-
all_files = list_all_files(dsp_path)
|
|
557
|
-
for src_file in all_files:
|
|
558
|
-
file_name = src_file.split("/")[-1]
|
|
559
|
-
if ".sap." in file_name:
|
|
560
|
-
dest_file = f"{bronze_path}/{file_name}"
|
|
561
|
-
dbutils.fs.cp(src_file, dest_file)
|
|
562
|
-
#num_files += 1
|
|
563
|
-
else:
|
|
564
|
-
dest_file = f"{bronze_path}/{file_name}"
|
|
565
|
-
dbutils.fs.mv(src_file, dest_file)
|
|
566
|
-
num_files += 1
|
|
567
|
-
except Exception as e:
|
|
568
|
-
print(f"Failed to copy files: {e}")
|
|
569
|
-
|
|
570
|
-
if num_files > 0:
|
|
571
|
-
print(f"Copied {num_files} files from {dsp_path} to {bronze_path}, refreshing table {srcDatabaseName}.{srcTableName}")
|
|
572
|
-
spark.sql(f"REFRESH TABLE {srcDatabaseName}.{srcTableName}")
|
|
573
|
-
print(f"Table {srcDatabaseName}.{srcTableName} is Refreshed")
|
|
574
|
-
else:
|
|
575
|
-
print(f"No files were copied from {dsp_path} to {bronze_path}, so skipping refresh of {srcDatabaseName}.{srcTableName}")
|
|
576
|
-
|
|
577
|
-
# spark.sql(f"REFRESH TABLE {srcDatabaseName}.{srcTableName}")
|
|
578
|
-
# print(f"Table {srcDatabaseName}.{srcTableName} is Refreshed")
|
|
513
|
+
return condition[:-5]
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/SilverMerge.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from datetime import date, timedelta
|
|
2
2
|
from com.phida.main.sparksession import spark, logger
|
|
3
|
-
from com.phida.main.Operations import describe_table_to_schema,
|
|
3
|
+
from com.phida.main.Operations import describe_table_to_schema, tableExists, addDerivedColumns, createDeltaTable, alterDeltaTable, \
|
|
4
4
|
dropColumns, getDerivedColumnsList, schemaDiff, getKeyCols, buildJoinCondition, buildColumnsDict, hiveDDL, schemaDataTypeDiff, hasColumn
|
|
5
5
|
from com.phida.main.utils import pathExists, convertStrToList
|
|
6
6
|
from pyspark.sql.functions import row_number, col, broadcast,expr, max as spark_max, lit, when, coalesce
|
|
@@ -28,11 +28,8 @@ class SilverMerge:
|
|
|
28
28
|
cluster_table_path: String - Path to the cluster table
|
|
29
29
|
enable_delete_filter: String - Flag to enable/disable filtering of deleted records (default: 'N')
|
|
30
30
|
use_auto_loader: String - Flag to enable/disable use of autoloader for reading source table (default: 'N')
|
|
31
|
-
is_dsp_kernel: String - Flag to indicate if the kernel is a DSP kernel, which requires file movement from DSP to Bronze (default: 'N')
|
|
32
|
-
src_dsp_path: String - The DSP path to read from if it's a DSP kernel (optional, only needed if is_dsp_kernel is 'Y')
|
|
33
31
|
|
|
34
32
|
methods:
|
|
35
|
-
move_dsp_to_bronze
|
|
36
33
|
silverCleansing
|
|
37
34
|
prepareTarget
|
|
38
35
|
upsertToDelta
|
|
@@ -42,12 +39,12 @@ class SilverMerge:
|
|
|
42
39
|
from com.phida.SilverMerge import SilverMerge
|
|
43
40
|
silverMergeObj = SilverMerge(srcDatabaseName, srcTableName, tgtDatabaseName, tgtTableName,
|
|
44
41
|
tgtCheckpoint, tgtTablePath, tgtPartitionColumns, derivedColExpr,
|
|
45
|
-
triggerOnce, dropColumnStr, pruneColumn, cluster_table_path, enable_delete_filter, use_auto_loader
|
|
42
|
+
triggerOnce, dropColumnStr, pruneColumn, cluster_table_path, enable_delete_filter, use_auto_loader)
|
|
46
43
|
|
|
47
44
|
"""
|
|
48
45
|
def __init__(self, srcDatabaseName, srcTableName, tgtDatabaseName, tgtTableName,
|
|
49
46
|
tgtCheckpoint, tgtTablePath, tgtPartitionColumns, derivedColExpr,
|
|
50
|
-
triggerOnce, dropColumnStr, pruneColumn, cluster_table_path, enable_delete_filter, use_auto_loader, modified_after=None, backfill_interval=None
|
|
47
|
+
triggerOnce, dropColumnStr, pruneColumn, cluster_table_path, enable_delete_filter, use_auto_loader, modified_after=None, backfill_interval=None):
|
|
51
48
|
"""
|
|
52
49
|
desc:
|
|
53
50
|
Initialize the required class variables
|
|
@@ -67,8 +64,6 @@ class SilverMerge:
|
|
|
67
64
|
cluster_table_path: String - Path to the cluster table
|
|
68
65
|
enable_delete_filter: String - Flag to enable/disable filtering of deleted records (default: 'N')
|
|
69
66
|
use_auto_loader: String - Flag to enable/disable use of autoloader for reading source table (default: 'N')
|
|
70
|
-
is_dsp_kernel: String - Flag to indicate if the kernel is a DSP kernel, which requires file movement from DSP to Bronze (default: 'N')
|
|
71
|
-
src_dsp_path: String - The DSP path to read from if it's a DSP kernel (optional, only needed if is_dsp_kernel is 'Y')
|
|
72
67
|
"""
|
|
73
68
|
|
|
74
69
|
logger.info("phida_log: Initialising class variables")
|
|
@@ -90,16 +85,7 @@ class SilverMerge:
|
|
|
90
85
|
self.enable_delete_filter = enable_delete_filter.strip().upper() if enable_delete_filter else 'N'
|
|
91
86
|
self.use_auto_loader = use_auto_loader.strip().upper() if use_auto_loader and use_auto_loader.strip().upper() in ('Y') else 'N'
|
|
92
87
|
self.modified_after = modified_after.strip() if modified_after else (date.today() - timedelta(days=15)).strftime('%Y-%m-%d')
|
|
93
|
-
self.backfill_interval = backfill_interval if backfill_interval else "1
|
|
94
|
-
self.is_dsp_kernel = is_dsp_kernel.strip().upper() if is_dsp_kernel else 'N' #To determine if Kernel is loaded via Datasphere
|
|
95
|
-
self.src_dsp_path = src_dsp_path if src_dsp_path else None
|
|
96
|
-
|
|
97
|
-
#Run file movement between DSP and Bronze only if it's a DSP kernel, to ensure we don't have unnecessary file movements for non-DSP kernels
|
|
98
|
-
if self.is_dsp_kernel == 'Y':
|
|
99
|
-
src_table_path = spark.sql(f"DESCRIBE DETAIL {self.srcDatabaseName}.{self.srcTableName}").collect()[0]['location']
|
|
100
|
-
logger.info(f"phida_log: File movement between DSP and Bronze")
|
|
101
|
-
print(f"[SilverMerge] File movement between DSP and Bronze")
|
|
102
|
-
move_dsp_to_bronze(self.srcDatabaseName ,self.srcTableName, self.src_dsp_path, src_table_path)
|
|
88
|
+
self.backfill_interval = backfill_interval if backfill_interval else "1 week"
|
|
103
89
|
|
|
104
90
|
logger.info(f"phida_log: Check if source table {self.srcDatabaseName}.{self.srcTableName} exists")
|
|
105
91
|
|
|
@@ -204,8 +190,10 @@ class SilverMerge:
|
|
|
204
190
|
|
|
205
191
|
silverDerivedColumns = silverDerivedColumns.drop("__timestamp")
|
|
206
192
|
logger.info("phida_log: Mapped DSP __timestamp to src_commit_time")
|
|
193
|
+
print("[SilverMerge] Mapped DSP __timestamp to src_commit_time")
|
|
207
194
|
else:
|
|
208
195
|
logger.info("phida_log: HVR data; src_commit_time already present")
|
|
196
|
+
print("[SilverMerge] HVR data; src_commit_time already present")
|
|
209
197
|
|
|
210
198
|
# Convert all column names to lower case to ensure
|
|
211
199
|
# the target Delta table is created and maintained with lower-case column names.
|
|
@@ -404,8 +392,9 @@ class SilverMerge:
|
|
|
404
392
|
microBatchOutputDF = hvr_preprocessed_df.unionByName(dsp_df, allowMissingColumns=True)
|
|
405
393
|
|
|
406
394
|
# Convert all column names to lower case just before writing to Silver
|
|
407
|
-
lower_cols = [c.lower() for c in microBatchOutputDF.columns]
|
|
408
|
-
microBatchOutputDF = microBatchOutputDF.toDF(*lower_cols)
|
|
395
|
+
#lower_cols = [c.lower() for c in microBatchOutputDF.columns]
|
|
396
|
+
#microBatchOutputDF = microBatchOutputDF.toDF(*lower_cols)
|
|
397
|
+
"Commenting above column lowering as it is already done in silverCleansing() method"
|
|
409
398
|
|
|
410
399
|
# Compatible ordering across all modes.
|
|
411
400
|
# Do not infer mode from column presence because unionByName(allowMissingColumns=True)
|
|
@@ -419,7 +408,7 @@ class SilverMerge:
|
|
|
419
408
|
|
|
420
409
|
if has_hvr_key and not has_dsp_op:
|
|
421
410
|
# HVR-only table (no DSP column at all): deduplicate by integ_key descending — highest key = latest change.
|
|
422
|
-
windowSpec = Window.partitionBy(self.keyColsList).orderBy(col("hvr_integ_key").
|
|
411
|
+
windowSpec = Window.partitionBy(self.keyColsList).orderBy(col("hvr_integ_key").desc())
|
|
423
412
|
else:
|
|
424
413
|
# Mixed or DSP path: build ordering dynamically based on which recency columns actually exist.
|
|
425
414
|
order_exprs = []
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/WorkflowBuilder.py
RENAMED
|
@@ -60,7 +60,9 @@ class WorkflowBuilder:
|
|
|
60
60
|
('dbr_version', ['10.4.x-scala2.12', '10.4.x-scala2.12']),
|
|
61
61
|
('driver_type', ['Standard_E8ds_v4', 'Standard_E8ds_v4']),
|
|
62
62
|
('worker_type', ['Standard_E8ds_v4', 'Standard_E8ds_v4']),
|
|
63
|
-
('num_workers', ['4', '4'])])
|
|
63
|
+
# ('num_workers', ['4', '4'])])
|
|
64
|
+
('min_workers', ['1', '1']),
|
|
65
|
+
('max_workers', ['4', '4'])])
|
|
64
66
|
# example of library argument: "SilverStreamingApplication==1.0"
|
|
65
67
|
|
|
66
68
|
|
|
@@ -72,7 +74,7 @@ class WorkflowBuilder:
|
|
|
72
74
|
@staticmethod
|
|
73
75
|
def createTask(taskKey, jobClusterKey, notebookPath, srcDatabaseName, srcTableName, tgtDatabaseName, tgtTableName,
|
|
74
76
|
tgtCheckpoint, tgtTablePath, tgtPartitionColumns, derivedColExpr, triggerOnce, dropColumnStr,
|
|
75
|
-
pruneColumn, cluster_table_path, enable_delete_filter, enable_autoloader, modified_after, backfill_interval,
|
|
77
|
+
pruneColumn, cluster_table_path, enable_delete_filter, enable_autoloader, modified_after, backfill_interval, library):
|
|
76
78
|
"""
|
|
77
79
|
desc:
|
|
78
80
|
A method for creating the dict/json for a single task
|
|
@@ -141,9 +143,7 @@ class WorkflowBuilder:
|
|
|
141
143
|
"enable_delete_filter": str(enable_delete_filter),
|
|
142
144
|
"enable_autoloader": enable_autoloader,
|
|
143
145
|
"modified_after": modified_after,
|
|
144
|
-
"backfill_interval": backfill_interval
|
|
145
|
-
"is_dsp_kernel": is_dsp_kernel,
|
|
146
|
-
"src_dsp_path": src_dsp_path
|
|
146
|
+
"backfill_interval": backfill_interval
|
|
147
147
|
}
|
|
148
148
|
},
|
|
149
149
|
"timeout_seconds": timeout_seconds,
|
|
@@ -162,7 +162,7 @@ class WorkflowBuilder:
|
|
|
162
162
|
return taskDict
|
|
163
163
|
|
|
164
164
|
@staticmethod
|
|
165
|
-
def createJobCluster(jobClusterKey, DBRVersion, clusterPolicyId,
|
|
165
|
+
def createJobCluster(jobClusterKey, DBRVersion, clusterPolicyId, autoscaleFlag, minWorkers, maxWorkers):
|
|
166
166
|
"""
|
|
167
167
|
desc:
|
|
168
168
|
A method for creating the reusable job cluster
|
|
@@ -171,7 +171,9 @@ class WorkflowBuilder:
|
|
|
171
171
|
jobClusterKey - a key for uniquely identifying a job cluster
|
|
172
172
|
DBRVersion - the version of the databricks release to be used
|
|
173
173
|
clusterPolicyId - Define the Id for the cluster policy for which table will be created in JSON
|
|
174
|
-
|
|
174
|
+
autoscaleFlag - 'Y' for an autoscaling cluster, 'N' for a fixed size cluster
|
|
175
|
+
minWorkers - Minimum workers when autoscaling (ignored when autoscaleFlag is N)
|
|
176
|
+
maxWorkers - Maximum workers when autoscaling, or the fixed worker count when autoscaleFlag is N
|
|
175
177
|
|
|
176
178
|
|
|
177
179
|
return:
|
|
@@ -181,20 +183,34 @@ class WorkflowBuilder:
|
|
|
181
183
|
createTask("task1", "job_cluster_1", "/users/usr/notebook", "/opt/db","<source database name>", "<target database name>", "vbuk")
|
|
182
184
|
|
|
183
185
|
tip:
|
|
184
|
-
|
|
185
|
-
Either, enter numWorkers or autoScale as Y. Do no enter both
|
|
186
|
-
When autoScale is Y, make sure that minWorkers and maxWorkers are present too
|
|
186
|
+
Autoscaling requires both minWorkers and maxWorkers.
|
|
187
187
|
Either enter workerType and driverType or driverInstancePoolId and instancePoolId.
|
|
188
188
|
Do not enter values for all 4 parameters mentioned above.
|
|
189
189
|
"""
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
"
|
|
195
|
-
"
|
|
190
|
+
|
|
191
|
+
if str(autoscaleFlag).strip().upper() == "N":
|
|
192
|
+
numWorkers = int(maxWorkers)
|
|
193
|
+
jobClusterDict = {
|
|
194
|
+
"job_cluster_key": jobClusterKey,
|
|
195
|
+
"new_cluster": {
|
|
196
|
+
"spark_version": DBRVersion,
|
|
197
|
+
"policy_id": clusterPolicyId,
|
|
198
|
+
"num_workers": numWorkers
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else:
|
|
202
|
+
minWorkers = int(minWorkers or 1)
|
|
203
|
+
maxWorkers = int(maxWorkers)
|
|
204
|
+
if minWorkers > maxWorkers:
|
|
205
|
+
raise ValueError(f"{jobClusterKey}: min_workers cannot be greater than max_workers")
|
|
206
|
+
jobClusterDict = {
|
|
207
|
+
"job_cluster_key": jobClusterKey,
|
|
208
|
+
"new_cluster": {
|
|
209
|
+
"spark_version": DBRVersion,
|
|
210
|
+
"policy_id": clusterPolicyId,
|
|
211
|
+
"autoscale": {"min_workers": minWorkers, "max_workers": maxWorkers}
|
|
212
|
+
}
|
|
196
213
|
}
|
|
197
|
-
}
|
|
198
214
|
|
|
199
215
|
return jobClusterDict
|
|
200
216
|
|
|
@@ -295,17 +311,21 @@ class WorkflowBuilder:
|
|
|
295
311
|
for jobCluster in jobClusterList:
|
|
296
312
|
jobClusterKey = jobCluster['job_cluster_key']
|
|
297
313
|
DBRVersion = jobCluster['dbr_version']
|
|
298
|
-
try:
|
|
299
|
-
numWorkers = jobCluster['num_workers']
|
|
300
|
-
except:
|
|
301
|
-
numWorkers = None
|
|
302
|
-
|
|
303
314
|
try:
|
|
304
315
|
clusterPolicyId = jobCluster['policy_id']
|
|
305
316
|
except:
|
|
306
317
|
clusterPolicyId = None
|
|
307
|
-
|
|
308
|
-
|
|
318
|
+
autoscaleFlag = jobCluster.get('autoscaleFlag', jobCluster.get('autoscale_flag'))
|
|
319
|
+
minWorkers = jobCluster['min_workers']
|
|
320
|
+
maxWorkers = jobCluster['max_workers']
|
|
321
|
+
jobClusterTemp = self.createJobCluster(
|
|
322
|
+
jobClusterKey,
|
|
323
|
+
DBRVersion,
|
|
324
|
+
clusterPolicyId,
|
|
325
|
+
autoscaleFlag,
|
|
326
|
+
minWorkers,
|
|
327
|
+
maxWorkers
|
|
328
|
+
)
|
|
309
329
|
|
|
310
330
|
jobClusters.append(jobClusterTemp)
|
|
311
331
|
|
|
@@ -362,19 +382,11 @@ class WorkflowBuilder:
|
|
|
362
382
|
backfill_interval = task['backfill_interval']
|
|
363
383
|
except:
|
|
364
384
|
backfill_interval = ""
|
|
365
|
-
try:
|
|
366
|
-
is_dsp_kernel = task['is_dsp_kernel']
|
|
367
|
-
except:
|
|
368
|
-
is_dsp_kernel = ""
|
|
369
|
-
try:
|
|
370
|
-
src_dsp_path = task['src_dsp_path']
|
|
371
|
-
except:
|
|
372
|
-
src_dsp_path = ""
|
|
373
385
|
|
|
374
386
|
taskTemp = self.createTask(taskKey, jobClusterKey, notebookPath, srcDatabaseName, srcTableName,
|
|
375
387
|
tgtDatabaseName, tgtTableName, tgtCheckpoint, tgtTablePath,
|
|
376
388
|
tgtPartitionColumns, derivedColExpr, triggerOnce, dropColumnStr,
|
|
377
|
-
pruneColumn, cluster_table_path, enable_delete_filter, enable_autoloader, modified_after, backfill_interval,
|
|
389
|
+
pruneColumn, cluster_table_path, enable_delete_filter, enable_autoloader, modified_after, backfill_interval, self.library)
|
|
378
390
|
|
|
379
391
|
tasks.append(taskTemp)
|
|
380
392
|
if jobId is None:
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/Maintenance.py
RENAMED
|
File without changes
|
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/PerfAnalyzer.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/__init__.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/logging.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/main/sparksession.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/OperationsTest.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/__init__.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/main_test.py
RENAMED
|
File without changes
|
{silverstreamingapplication-1.8 → silverstreamingapplication-1.10}/com/phida/tests/utils_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|