Skip to content

Commit 64da4ad

Browse files
authored
Add columns for Teradata logs dumping with '--assessment' flag (#92)
1 parent e754e6d commit 64da4ad

File tree

2 files changed

+278
-3
lines changed

2 files changed

+278
-3
lines changed

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/teradata/TeradataLogsConnector.java

Lines changed: 153 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.google.common.base.Predicates;
2323
import com.google.common.base.Strings;
2424
import com.google.common.io.ByteSink;
25+
import com.google.edwmigration.dumper.application.dumper.annotations.RespectsArgumentAssessment;
2526
import com.google.errorprone.annotations.ForOverride;
2627
import java.sql.Connection;
2728
import java.sql.SQLException;
@@ -68,6 +69,7 @@
6869
@RespectsArgumentQueryLogDays
6970
@RespectsArgumentQueryLogStart
7071
@RespectsArgumentQueryLogEnd
72+
@RespectsArgumentAssessment
7173
public class TeradataLogsConnector extends AbstractTeradataConnector implements LogsConnector, TeradataLogsDumpFormat {
7274

7375
private static final Logger LOG = LoggerFactory.getLogger(TeradataLogsConnector.class);
@@ -143,7 +145,8 @@ protected static class TeradataLogsJdbcTask extends AbstractJdbcTask<Void> {
143145
protected final String condition;
144146
protected final ZonedInterval interval;
145147

146-
public TeradataLogsJdbcTask(@Nonnull String targetPath, SharedState state, String logTable, String queryTable, String condition, ZonedInterval interval) {
148+
public TeradataLogsJdbcTask(@Nonnull String targetPath, SharedState state, String logTable,
149+
String queryTable, String condition, ZonedInterval interval) {
147150
super(targetPath);
148151
this.state = Preconditions.checkNotNull(state, "SharedState was null.");
149152
this.logTable = logTable;
@@ -178,11 +181,14 @@ private String getSql(@Nonnull JdbcHandle handle) {
178181
@ForOverride
179182
@Nonnull
180183
/* pp */ String getSql(@Nonnull Predicate<? super String> predicate) {
184+
return getSql(predicate, EXPRESSIONS);
185+
}
186+
/* pp */ String getSql(Predicate<? super String> predicate, String[] expressions) {
181187
StringBuilder buf = new StringBuilder("SELECT ");
182188

183189
String separator = "";
184190
boolean queryTableIncluded = false;
185-
for (String expression : EXPRESSIONS) {
191+
for (String expression : expressions) {
186192
buf.append(separator);
187193
if (predicate.test(expression)) {
188194
buf.append(expression);
@@ -243,6 +249,143 @@ public String toString() {
243249
}
244250
}
245251

252+
protected static class TeradataAssessmentLogsJdbcTask extends TeradataLogsJdbcTask {
253+
254+
static final String[] EXPRESSIONS_FOR_ASSESSMENT = new String[]{
255+
"ST.QueryID",
256+
"ST.SQLRowNo",
257+
"ST.SQLTextInfo",
258+
"L.AbortFlag",
259+
"L.AcctString",
260+
"L.AcctStringDate",
261+
"L.AcctStringHour",
262+
"L.AcctStringTime",
263+
"L.AMPCPUTime",
264+
"L.AMPCPUTimeNorm",
265+
"L.AppID",
266+
"L.CacheFlag",
267+
"L.CalendarName",
268+
"L.CallNestingLevel",
269+
"L.CheckpointNum",
270+
"L.ClientAddr",
271+
"L.ClientID",
272+
"L.CollectTimeStamp AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS \"CollectTimeStamp\"",
273+
"L.CPUDecayLevel",
274+
"L.DataCollectAlg",
275+
"L.DBQLStatus",
276+
"L.DefaultDatabase",
277+
"L.DelayTime",
278+
"L.DisCPUTime",
279+
"L.DisCPUTimeNorm",
280+
"L.ErrorCode",
281+
"L.EstMaxRowCount",
282+
"L.EstMaxStepTime",
283+
"L.EstProcTime",
284+
"L.EstResultRows",
285+
"L.ExpandAcctString",
286+
"L.FirstRespTime AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS \"FirstRespTime\"",
287+
"L.FirstStepTime AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS \"FirstStepTime\"",
288+
"L.FlexThrottle",
289+
"L.ImpactSpool",
290+
"L.InternalRequestNum",
291+
"L.IODecayLevel",
292+
"L.IterationCount",
293+
"L.KeepFlag",
294+
"L.LastRespTime",
295+
"L.LockDelay",
296+
"L.LockLevel",
297+
"L.LogicalHostID",
298+
"L.LogonDateTime AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS \"LogonDateTime\"",
299+
"L.LogonSource",
300+
"L.LSN",
301+
"L.MaxAMPCPUTime",
302+
"L.MaxAMPCPUTimeNorm",
303+
"L.MaxAmpIO",
304+
"L.MaxCPUAmpNumber",
305+
"L.MaxCPUAmpNumberNorm",
306+
"L.MaxIOAmpNumber",
307+
"L.MaxNumMapAMPs",
308+
"L.MaxOneMBRowSize",
309+
"L.MaxStepMemory",
310+
"L.MaxStepsInPar",
311+
"L.MinAmpCPUTime",
312+
"L.MinAmpCPUTimeNorm",
313+
"L.MinAmpIO",
314+
"L.MinNumMapAMPs",
315+
"L.MinRespHoldTime",
316+
"L.NumFragments",
317+
"L.NumOfActiveAMPs",
318+
"L.NumRequestCtx",
319+
"L.NumResultOneMBRows",
320+
"L.NumResultRows",
321+
"L.NumSteps",
322+
"L.NumStepswPar",
323+
"L.ParamQuery",
324+
"L.ParserCPUTime",
325+
"L.ParserCPUTimeNorm",
326+
"L.ParserExpReq",
327+
"L.PersistentSpool",
328+
"L.ProcID",
329+
"L.ProfileID",
330+
"L.ProfileName",
331+
"L.ProxyRole",
332+
"L.ProxyUser",
333+
"L.ProxyUserID",
334+
"L.QueryBand",
335+
"L.QueryRedriven",
336+
"L.QueryText",
337+
"L.ReDriveKind",
338+
"L.RemoteQuery",
339+
"L.ReqIOKB",
340+
"L.ReqPhysIO",
341+
"L.ReqPhysIOKB",
342+
"L.RequestMode",
343+
"L.RequestNum",
344+
"L.SeqRespTime",
345+
"L.SessionID",
346+
"L.SessionTemporalQualifier",
347+
"L.SpoolUsage",
348+
"L.StartTime AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS \"StartTime\"",
349+
"L.StatementGroup",
350+
"L.Statements",
351+
"L.StatementType",
352+
"L.SysDefNumMapAMPs",
353+
"L.TacticalCPUException",
354+
"L.TacticalIOException",
355+
"L.TDWMEstMemUsage",
356+
"L.ThrottleBypassed",
357+
"L.TotalFirstRespTime",
358+
"L.TotalIOCount",
359+
"L.TotalServerByteCount",
360+
"L.TTGranularity",
361+
"L.TxnMode",
362+
"L.TxnUniq",
363+
"L.UnitySQL",
364+
"L.UnityTime",
365+
"L.UsedIota",
366+
"L.UserID",
367+
"L.UserName",
368+
"L.UtilityByteCount",
369+
"L.UtilityInfoAvailable",
370+
"L.UtilityRowCount",
371+
"L.VHLogicalIO",
372+
"L.VHLogicalIOKB",
373+
"L.VHPhysIO",
374+
"L.VHPhysIOKB",
375+
"L.WarningOnly",
376+
"L.WDName"
377+
};
378+
379+
public TeradataAssessmentLogsJdbcTask(@Nonnull String targetPath, SharedState state, String logTable, String queryTable, String condition, ZonedInterval interval) {
380+
super(targetPath, state, logTable, queryTable, condition, interval);
381+
}
382+
383+
@Nonnull
384+
@Override
385+
String getSql(@Nonnull Predicate<? super String> predicate) {
386+
return getSql(predicate, EXPRESSIONS_FOR_ASSESSMENT);
387+
}
388+
}
246389
@Override
247390
public void addTasksTo(List<? super Task<?>> out, @Nonnull ConnectorArguments arguments) throws MetadataDumperUsageException {
248391
out.add(new DumpMetadataTask(arguments, FORMAT_NAME));
@@ -273,9 +416,16 @@ public void addTasksTo(List<? super Task<?>> out, @Nonnull ConnectorArguments ar
273416
ZonedIntervalIterable intervals = ZonedIntervalIterable.forConnectorArguments(arguments);
274417
LOG.info("Exporting query log for " + intervals);
275418
SharedState state = new SharedState();
419+
boolean isAssessment = arguments.isAssessment();
276420
for (ZonedInterval interval : intervals) {
277421
String file = ZIP_ENTRY_PREFIX + DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(interval.getStartUTC()) + ".csv";
278-
out.add(new TeradataLogsJdbcTask(file, state, logTable, queryTable, condition, interval).withHeaderClass(Header.class));
422+
if (isAssessment) {
423+
out.add(new TeradataAssessmentLogsJdbcTask(file, state, logTable, queryTable, condition, interval)
424+
.withHeaderClass(HeaderForAssessment.class));
425+
} else {
426+
out.add(new TeradataLogsJdbcTask(file, state, logTable, queryTable, condition, interval)
427+
.withHeaderClass(Header.class));
428+
}
279429
}
280430
}
281431
}

dumper/lib-dumper-spi/src/main/java/com/google/edwmigration/dumper/plugin/lib/dumper/spi/TeradataLogsDumpFormat.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,131 @@ enum Header {
5454

5555
}
5656

57+
enum HeaderForAssessment {
58+
QueryID,
59+
SQLRowNo,
60+
SQLTextInfo,
61+
AbortFlag,
62+
AcctString,
63+
AcctStringDate,
64+
AcctStringHour,
65+
AcctStringTime,
66+
AMPCPUTime,
67+
AMPCPUTimeNorm,
68+
AppID,
69+
CacheFlag,
70+
CalendarName,
71+
CallNestingLevel,
72+
CheckpointNum,
73+
ClientAddr,
74+
ClientID,
75+
CollectTimeStamp,
76+
CPUDecayLevel,
77+
DataCollectAlg,
78+
DBQLStatus,
79+
DefaultDatabase,
80+
DelayTime,
81+
DisCPUTime,
82+
DisCPUTimeNorm,
83+
ErrorCode,
84+
EstMaxRowCount,
85+
EstMaxStepTime,
86+
EstProcTime,
87+
EstResultRows,
88+
ExpandAcctString,
89+
FirstRespTime,
90+
FirstStepTime,
91+
FlexThrottle,
92+
ImpactSpool,
93+
InternalRequestNum,
94+
IODecayLevel,
95+
IterationCount,
96+
KeepFlag,
97+
LastRespTime,
98+
LockDelay,
99+
LockLevel,
100+
LogicalHostID,
101+
LogonDateTime,
102+
LogonSource,
103+
LSN,
104+
MaxAMPCPUTime,
105+
MaxAMPCPUTimeNorm,
106+
MaxAmpIO,
107+
MaxCPUAmpNumber,
108+
MaxCPUAmpNumberNorm,
109+
MaxIOAmpNumber,
110+
MaxNumMapAMPs,
111+
MaxOneMBRowSize,
112+
MaxStepMemory,
113+
MaxStepsInPar,
114+
MinAmpCPUTime,
115+
MinAmpCPUTimeNorm,
116+
MinAmpIO,
117+
MinNumMapAMPs,
118+
MinRespHoldTime,
119+
NumFragments,
120+
NumOfActiveAMPs,
121+
NumRequestCtx,
122+
NumResultOneMBRows,
123+
NumResultRows,
124+
NumSteps,
125+
NumStepswPar,
126+
ParamQuery,
127+
ParserCPUTime,
128+
ParserCPUTimeNorm,
129+
ParserExpReq,
130+
PersistentSpool,
131+
ProcID,
132+
ProfileID,
133+
ProfileName,
134+
ProxyRole,
135+
ProxyUser,
136+
ProxyUserID,
137+
QueryBand,
138+
QueryRedriven,
139+
QueryText,
140+
ReDriveKind,
141+
RemoteQuery,
142+
ReqIOKB,
143+
ReqPhysIO,
144+
ReqPhysIOKB,
145+
RequestMode,
146+
RequestNum,
147+
SeqRespTime,
148+
SessionID,
149+
SessionTemporalQualifier,
150+
SpoolUsage,
151+
StartTime,
152+
StatementGroup,
153+
Statements,
154+
StatementType,
155+
SysDefNumMapAMPs,
156+
TacticalCPUException,
157+
TacticalIOException,
158+
TDWMEstMemUsage,
159+
ThrottleBypassed,
160+
TotalFirstRespTime,
161+
TotalIOCount,
162+
TotalServerByteCount,
163+
TTGranularity,
164+
TxnMode,
165+
TxnUniq,
166+
UnitySQL,
167+
UnityTime,
168+
UsedIota,
169+
UserID,
170+
UserName,
171+
UtilityByteCount,
172+
UtilityInfoAvailable,
173+
UtilityRowCount,
174+
VHLogicalIO,
175+
VHLogicalIOKB,
176+
VHPhysIO,
177+
VHPhysIOKB,
178+
WarningOnly,
179+
WDName
180+
}
181+
57182
enum HeaderLSql {
58183
CollectTimeStamp,
59184
SQLRowNo, // 1,2,... All SQLTextInfo to be concated based on this.

0 commit comments

Comments
 (0)