Skip to content

Commit e301ca9

Browse files
authored
[b/441876236] Refactor: don't "partially format" in Assessment flow (#956)
1 parent b4ffb89 commit e301ca9

File tree

2 files changed

+56
-48
lines changed

2 files changed

+56
-48
lines changed

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeMetadataConnector.java

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -287,67 +287,71 @@ public final void addTasksTo(
287287

288288
if (isAssessment) {
289289
for (AssessmentQuery item : planner.generateAssessmentQueries()) {
290-
String formatString =
291-
item.needsOverride
292-
? getOverrideableQuery(arguments, item.formatString, TABLE_STORAGE_METRICS)
293-
: item.formatString;
294-
String whereCondition;
295-
// Check whether the overrides changed anything.
296-
if (formatString.equals(item.formatString)) {
297-
// Overrides either not applied or equal to default values.
298-
whereCondition =
299-
" WHERE deleted = FALSE AND schema_dropped IS NULL AND table_dropped IS NULL";
300-
} else {
301-
whereCondition = "";
302-
}
303-
// The condition is always passed to String.format. SHOW queries simply ignore it.
304-
String query = String.format(formatString, ACCOUNT_USAGE_SCHEMA_NAME, whereCondition);
290+
String query = queryForAssessment(item, arguments);
305291
Task<?> task =
306292
new JdbcSelectTask(item.zipEntryName, query, TaskCategory.REQUIRED, TaskOptions.DEFAULT)
307293
.withHeaderTransformer(item.transformer());
308294
out.add(task);
309295
}
310-
} else {
311-
if (!arguments.getDatabases().isEmpty()) {
312-
TaskOptions taskOptions = TaskOptions.DEFAULT;
313-
for (String database : arguments.getDatabases()) {
314-
String formatString =
315-
String.format(
316-
"%s IN DATABASE %s",
317-
SnowflakePlanner.SHOW_EXTERNAL_TABLES.formatString, databaseNameQuoted(database));
318-
addAssessmentQuery(
319-
SnowflakePlanner.SHOW_EXTERNAL_TABLES.withFormatString(formatString),
320-
out,
321-
arguments,
322-
ACCOUNT_USAGE_SCHEMA_NAME,
323-
taskOptions);
324-
// Next tasks will append to the same file.
325-
taskOptions = taskOptions.withWriteMode(WriteMode.APPEND_EXISTING);
326-
}
327-
} else {
328-
addAssessmentQuery(
329-
SnowflakePlanner.SHOW_EXTERNAL_TABLES,
330-
out,
331-
arguments,
332-
ACCOUNT_USAGE_SCHEMA_NAME,
333-
TaskOptions.DEFAULT);
334-
}
296+
return;
297+
}
298+
ImmutableList<String> databases = arguments.getDatabases();
299+
300+
if (databases.isEmpty()) {
301+
AssessmentQuery query = SnowflakePlanner.SHOW_EXTERNAL_TABLES;
302+
Task<?> task = convertAssessmentQuery(query, arguments, TaskOptions.DEFAULT);
303+
out.add(task);
304+
return;
305+
}
306+
307+
TaskOptions taskOptions = TaskOptions.DEFAULT;
308+
309+
for (String item : databases) {
310+
String quotedName = databaseNameQuoted(item);
311+
AssessmentQuery baseQuery = SnowflakePlanner.SHOW_EXTERNAL_TABLES;
312+
313+
String formatString = String.format("%s IN DATABASE %s", baseQuery.formatString, quotedName);
314+
AssessmentQuery query = baseQuery.withFormatString(formatString);
315+
Task<?> task = convertAssessmentQuery(query, arguments, taskOptions);
316+
out.add(task);
317+
// Next tasks will append to the same file.
318+
taskOptions = taskOptions.withWriteMode(WriteMode.APPEND_EXISTING);
319+
}
320+
}
321+
322+
private String queryForAssessment(AssessmentQuery item, ConnectorArguments arguments) {
323+
MetadataView view = TABLE_STORAGE_METRICS;
324+
String schema = ACCOUNT_USAGE_SCHEMA_NAME;
325+
if (!item.needsOverride) {
326+
return item.substitute(schema, "");
327+
}
328+
329+
ConnectorProperty propertyQuery = PropertyAction.QUERY.toProperty(view);
330+
String overrideQuery = arguments.getDefinition(propertyQuery);
331+
if (overrideQuery != null) {
332+
return String.format(overrideQuery, schema, "");
335333
}
334+
335+
ConnectorProperty propertyWhere = PropertyAction.WHERE.toProperty(view);
336+
String overrideWhere = arguments.getDefinition(propertyWhere);
337+
if (overrideWhere != null) {
338+
return item.substitute(schema, overrideWhere);
339+
}
340+
341+
String whereCondition =
342+
" WHERE deleted = FALSE AND schema_dropped IS NULL AND table_dropped IS NULL";
343+
return item.substitute(schema, whereCondition);
336344
}
337345

338-
private void addAssessmentQuery(
346+
private Task<?> convertAssessmentQuery(
339347
@Nonnull AssessmentQuery item,
340-
@Nonnull List<? super Task<?>> out,
341348
@Nonnull ConnectorArguments arguments,
342-
@Nonnull String AU,
343349
@Nonnull TaskOptions taskOptions) {
344350
String formatString = overrideFormatString(item, arguments);
345-
String query = String.format(formatString, AU, EMPTY_WHERE_CONDITION);
351+
String query = String.format(formatString, ACCOUNT_USAGE_SCHEMA_NAME, EMPTY_WHERE_CONDITION);
346352
String zipName = item.zipEntryName;
347-
Task<?> task =
348-
new JdbcSelectTask(zipName, query, TaskCategory.REQUIRED, taskOptions)
349-
.withHeaderTransformer(item.transformer());
350-
out.add(task);
353+
return new JdbcSelectTask(zipName, query, TaskCategory.REQUIRED, taskOptions)
354+
.withHeaderTransformer(item.transformer());
351355
}
352356

353357
private String overrideFormatString(AssessmentQuery query, ConnectorArguments arguments) {

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakePlanner.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ static AssessmentQuery createShow(String view, Format zipFormat, CaseFormat case
147147
ResultSetTransformer<String[]> transformer() {
148148
return HeaderTransformerUtil.toCamelCaseFrom(caseFormat);
149149
}
150+
151+
String substitute(String schema, String whereCondition) {
152+
return String.format(formatString, schema, whereCondition);
153+
}
150154
}
151155

152156
Task<?> eventStateTask() {

0 commit comments

Comments
 (0)