-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate_datavault_for_sprint.py
More file actions
130 lines (117 loc) · 8.22 KB
/
generate_datavault_for_sprint.py
File metadata and controls
130 lines (117 loc) · 8.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
def notifyMessage ( module, method, severity, message ):
print ( module + " - " + method + " - " + repr(severity) + " - " + message )
return
#Starting point
modutils = Modelio.getInstance().getModuleService().getPeerModule("ModelioUtils")
excelutils = Modelio.getInstance().getModuleService().getPeerModule("ExcelUtils")
cartomgr = Modelio.getInstance().getModuleService().getPeerModule("CartographyManager")
diagcol = Modelio.getInstance().getModuleService().getPeerModule("DiagramColorizer")
mn = modutils.getMessageNotifier ()
mn.subscribeListener ( notifyMessage )
#Below the type mapping for Snowflake, feel free to adapt it for your own databae techno
tm = modutils.createTypeMapper ()
td = tm.getTargetDatabaseFromString ( "Snowflake" ) # allowed types => PostGre, Snowflake, BigQuery, Synapse
ti = tm.getDatabaseTypeInfos ( td )
print "Start generate DataVault objects"
genpath = modutils.createFile ( modutils.markFileNameDate ( str(modutils.getWorkspacePath().getAbsolutePath()) + "\\datavault_generated\\retail_Finance_Sprint1" ) )
genpath.mkdirs()
useCases = modutils.createPairList ()
useCases.add ( modutils.createPair ( "Retail", "Sprint1") )
#You may add as many datamesh/dataproduct/sprints you want
#useCases.add ( modutils.createPair ( "Finance", "Sprint1") )
mas = cartomgr.getArtefactsForUseCases ( useCases )
print genpath
for c in mas.getClasses():
sthubname = modutils.getStereotypeInstValueString ( c.cls, modutils.getProjectStereotype ( "HUB_NAME" ), "Name" )
hubname = tm.transformDatabaseIdentifierCase ( c.cls.getName (), ti.cas )
if modutils.isNullOrEmptyString ( sthubname ) == False: hubname = sthubname
f = modutils.createFile ( genpath.getAbsolutePath () + "\\HUB_" + hubname + ".ddl" )
sb = modutils.createStringBuilder ()
sb.append ( "create or replace TABLE HUB_" + hubname + " (\n" )
sb.append ( " HUB_" + hubname + "_HK VARCHAR(32),\n" )
sb.append ( " HUB_" + hubname + "_BK VARCHAR(32),\n" )
sb.append ( " HUB_LOAD_DTS TIMESTAMP_NTZ(9) NOT NULL COMMENT 'Load Time',\n" )
sb.append ( " HUB_REC_SRC VARCHAR(50) NOT NULL COMMENT 'Application Source',\n" )
sb.append ( " constraint PK_HUB_" + hubname + " primary key (HUB_" + hubname + "_HK)\n" )
sb.append ( ")" )
desc = modutils.getDescription ( c.cls )
if modutils.isNullOrEmptyString ( desc ) == False: sb.append ( " COMMENT = '" + modutils.cleanForSqlComment ( desc ) + "'" )
sb.append ( ";\n" )
modutils.writeTextFile ( f, sb );
print "HUB => " + f.getAbsolutePath ()
if mas.getMotherClass ( c.cls ) :
mother = mas.getMotherClass ( c.cls )
linkname = c.cls.getName () .upper () + "_" + mother.cls.getName () .upper () + "_CHILD"
hubtargetname = tm.transformDatabaseIdentifierCase ( mother.cls.getName (), ti.cas )
f = modutils.createFile ( genpath.getAbsolutePath () + "\\LINK_" + linkname + ".ddl" )
sb = modutils.createStringBuilder ()
sb.append ( "create or replace TABLE LINK_" + linkname + " (\n" )
sb.append ( " LINK_" + linkname + "_HK VARCHAR(32),\n" )
sb.append ( " LINK_" + linkname + "_BK VARCHAR(32),\n" )
sb.append ( " LINK_LOAD_DTS TIMESTAMP_NTZ(9) NOT NULL COMMENT 'Load Time',\n" )
sb.append ( " LINK_REC_SRC VARCHAR(50) NOT NULL COMMENT 'Application Source',\n" )
sb.append ( " HUB_" + hubname + "_HK VARCHAR(32),\n" )
sb.append ( " HUB_" + hubtargetname + "_HK VARCHAR(32),\n" )
sb.append ( " constraint PK_LINK_" + linkname + " primary key (LINK_" + linkname + "_HK),\n" )
sb.append ( " constraint FK_LINK_" + linkname + "_HUB_" + hubname + " foreign key (HUB_" + hubname + "_HK) references HUB_" + hubname + "(HUB_" + hubname + "_HK),\n" )
sb.append ( " constraint FK_LINK_" + linkname + "_HUB_" + hubtargetname + " foreign key (HUB_" + hubtargetname + "_HK) references HUB_" + hubtargetname + "(HUB_" + hubtargetname + "_HK)\n" )
sb.append ( "" )
sb.append ( ")" )
desc = modutils.getDescription ( a )
if modutils.isNullOrEmptyString ( desc ) == False: sb.append ( " COMMENT '" + modutils.cleanForSqlComment ( desc ) + "'" )
sb.append ( ";\n" )
modutils.writeTextFile ( f, sb );
print "LINK => " + f.getAbsolutePath ()
stsatnames = modutils.createBasicEMap ()
stsatnames.put ( '', None )
for a in mas.getAttributesFromClass ( c.cls ):
satname = modutils.getStereotypeInstValueString ( a, modutils.getProjectStereotype ( "SatelliteName" ), "Name" )
if modutils.isNullOrEmptyString ( satname ) == False and stsatnames.get ( satname ) == None:
stsatnames.put ( satname, None )
for stsatname in stsatnames.entrySet ():
satname = hubname
if modutils.isNullOrEmptyString ( stsatname.getKey () ) == False:
satname = satname + '_' + tm.transformDatabaseIdentifierCase ( stsatname.getKey (), ti.cas )
f = modutils.createFile ( genpath.getAbsolutePath () + "\\SAT_" + satname + ".ddl" )
sb = modutils.createStringBuilder ()
sb.append ( "create or replace TABLE SAT_" + satname + " (\n" )
sb.append ( " HUB_" + hubname + "_HK VARCHAR(32),\n" )
sb.append ( " SAT_LOAD_DTS TIMESTAMP_NTZ(9) NOT NULL COMMENT 'Load Time',\n" )
sb.append ( " SAT_REC_SRC VARCHAR(50) NOT NULL COMMENT 'Application Source',\n" )
sb.append ( " SAT_HASH_DIFF VARCHAR(32) NOT NULL,\n" )
for a in mas.getAttributesFromClass ( c.cls ):
stsatname_ = modutils.getStereotypeInstValueString ( a, modutils.getProjectStereotype ( "SatelliteName" ), "Name" )
if ( stsatname_ == stsatname.getKey () ) or ( modutils.isNullOrEmptyString ( stsatname_ ) and modutils.isNullOrEmptyString ( stsatname.getKey () ) ):
colname = tm.transformDatabaseIdentifierCase ( a.getName (), ti.cas )
sb.append ( " " + colname + " " + tm.getDatabaseTypeFromUml ( a.getType().getName(), td ) )
desc = modutils.getDescription ( a )
if modutils.isNullOrEmptyString ( desc ) == False: sb.append ( " COMMENT '" + modutils.cleanForSqlComment ( desc ) + "'" )
sb.append ( ",\r" )
sb.append ( " constraint PK_SAT_" + satname + " primary key (HUB_" + hubname + "_HK, SAT_LOAD_DTS),\n" )
sb.append ( " constraint FK_SAT_" + satname + " foreign key (HUB_" + hubname + "_HK) references HUB_" + hubname + "(HUB_" + hubname + "_HK)\n" )
sb.append ( ");\n" )
modutils.writeTextFile ( f, sb );
print "SAT => " + f.getAbsolutePath ()
for a in c.associations:
linkname = c.cls.getName () .upper () + "_" + a.getTarget ().getName () .upper () + "_" + a.getName () .upper ()
hubtargetname = tm.transformDatabaseIdentifierCase ( a.getTarget () .getName (), ti.cas )
f = modutils.createFile ( genpath.getAbsolutePath () + "\\LINK_" + linkname + ".ddl" )
sb = modutils.createStringBuilder ()
sb.append ( "create or replace TABLE LINK_" + linkname + " (\n" )
sb.append ( " LINK_" + linkname + "_HK VARCHAR(32),\n" )
sb.append ( " LINK_" + linkname + "_BK VARCHAR(32),\n" )
sb.append ( " LINK_LOAD_DTS TIMESTAMP_NTZ(9) NOT NULL COMMENT 'Load Time',\n" )
sb.append ( " LINK_REC_SRC VARCHAR(50) NOT NULL COMMENT 'Application Source',\n" )
sb.append ( " HUB_" + hubname + "_HK VARCHAR(32),\n" )
sb.append ( " HUB_" + hubtargetname + "_HK VARCHAR(32),\n" )
sb.append ( " constraint PK_LINK_" + linkname + " primary key (LINK_" + linkname + "_HK),\n" )
sb.append ( " constraint FK_LINK_" + linkname + "_HUB_" + hubname + " foreign key (HUB_" + hubname + "_HK) references HUB_" + hubname + "(HUB_" + hubname + "_HK),\n" )
sb.append ( " constraint FK_LINK_" + linkname + "_HUB_" + hubtargetname + " foreign key (HUB_" + hubtargetname + "_HK) references HUB_" + hubtargetname + "(HUB_" + hubtargetname + "_HK)\n" )
sb.append ( "" )
sb.append ( ")" )
desc = modutils.getDescription ( a )
if modutils.isNullOrEmptyString ( desc ) == False: sb.append ( " COMMENT '" + modutils.cleanForSqlComment ( desc ) + "'" )
sb.append ( ";\n" )
modutils.writeTextFile ( f, sb );
print "LINK => " + f.getAbsolutePath ()
print "End generate DataVault objects"