diff --git a/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/ConnectorArguments.java b/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/ConnectorArguments.java index a240284a9..6881b9000 100644 --- a/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/ConnectorArguments.java +++ b/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/ConnectorArguments.java @@ -943,6 +943,10 @@ public String getQueryLogEarliestTimestamp() { return getOptions().valueOf(optionQueryLogEarliestTimestamp); } + public boolean hasQueryLogEarliestTimestamp() { + return getOptions().valueOf(optionQueryLogEarliestTimestamp) != null; + } + @CheckForNull public Integer getQueryLogDays() { return getOptions().valueOf(optionQueryLogDays); diff --git a/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnector.java b/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnector.java index d6d4c8354..c2ae20a0f 100644 --- a/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnector.java +++ b/dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnector.java @@ -160,6 +160,15 @@ private TaskDescription( } } + @Override + public final void validate(ConnectorArguments arguments) { + super.validate(arguments); + + if (arguments.isAssessment() && arguments.hasQueryLogEarliestTimestamp()) { + throw unsupportedOption(ConnectorArguments.OPT_QUERY_LOG_EARLIEST_TIMESTAMP); + } + } + @Nonnull @Override public Class> getConnectorProperties() { @@ -281,8 +290,6 @@ private String createExtendedQueryFromAccountUsage(ConnectorArguments arguments) String overrideQuery = getOverrideQuery(arguments); if (overrideQuery != null) return overrideQuery; - String overrideWhere = getOverrideWhere(arguments); - @SuppressWarnings("OrphanedFormatString") StringBuilder queryBuilder = new StringBuilder( @@ -333,12 +340,8 @@ private String createExtendedQueryFromAccountUsage(ConnectorArguments arguments) + "WHERE end_time >= to_timestamp_ltz('%s')\n" + "AND end_time <= to_timestamp_ltz('%s')\n" + "AND is_client_generated_statement = FALSE\n"); - if (!StringUtils.isBlank(arguments.getQueryLogEarliestTimestamp())) - queryBuilder - .append("AND start_time >= ") - .append(arguments.getQueryLogEarliestTimestamp()) - .append("\n"); - if (overrideWhere != null) queryBuilder.append(" AND ").append(overrideWhere); + + queryBuilder.append(getOverrideWhere(arguments)); return queryBuilder.toString().replace('\n', ' '); } @@ -356,16 +359,25 @@ private String getOverrideQuery(@Nonnull ConnectorArguments arguments) return null; } - @CheckForNull + @Nonnull private String getOverrideWhere(@Nonnull ConnectorArguments arguments) throws MetadataDumperUsageException { - return arguments.getDefinition(SnowflakeLogConnectorProperties.OVERRIDE_WHERE); + ConnectorProperty property = SnowflakeLogConnectorProperties.OVERRIDE_WHERE; + String overrideWhere = arguments.getDefinition(property); + if (overrideWhere != null) { + return String.format(" AND %s", overrideWhere); + } else { + return ""; + } } @Override public final void addTasksTo( @Nonnull List> out, @Nonnull ConnectorArguments arguments) throws MetadataDumperUsageException { + + boolean isAssessment = arguments.isAssessment(); + out.add(new DumpMetadataTask(arguments, FORMAT_NAME)); out.add(new FormatTask(FORMAT_NAME)); @@ -380,7 +392,7 @@ public final void addTasksTo( arguments, rotationDuration, IntervalExpander.createBasedOnDuration(rotationDuration)); logger.info("Exporting query log for " + queryLogIntervals); - if (!arguments.isAssessment()) { + if (!isAssessment) { TaskDescription queryHistoryTask = new TaskDescription(ZIP_ENTRY_PREFIX, newQueryFormat(arguments), Header.class); queryLogIntervals.forEach(interval -> addJdbcTask(out, interval, queryHistoryTask)); @@ -413,6 +425,13 @@ private static void addJdbcTask( out.add(new JdbcSelectTask(file, query, task.taskCategory).withHeaderClass(task.headerClass)); } + private static MetadataDumperUsageException unsupportedOption(String option) { + String assessment = ConnectorArguments.OPT_ASSESSMENT; + String message = + String.format("Unsupported option used with --%s: please remove --%s", assessment, option); + return new MetadataDumperUsageException(message); + } + private String getOverrideableQuery( @Nullable String overrideQuery, @Nonnull String defaultSql, @Nonnull String whereField) { String sql = overrideQuery != null ? overrideQuery : defaultSql; diff --git a/dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnectorTest.java b/dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnectorTest.java index 4edf35f23..5d4f720dd 100644 --- a/dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnectorTest.java +++ b/dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/snowflake/SnowflakeLogsConnectorTest.java @@ -17,9 +17,13 @@ package com.google.edwmigration.dumper.application.dumper.connector.snowflake; import com.google.common.base.Predicates; +import com.google.edwmigration.dumper.application.dumper.ConnectorArguments; +import com.google.edwmigration.dumper.application.dumper.MetadataDumperUsageException; import com.google.edwmigration.dumper.plugin.lib.dumper.spi.SnowflakeLogsDumpFormat; import com.google.edwmigration.dumper.test.TestUtils; import java.io.File; +import java.io.IOException; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -41,4 +45,17 @@ public void testExecution() throws Exception { validator.run(outputFile); } + + @Test + public void validate_unsupportedOption_throwsException() throws IOException { + ConnectorArguments arguments = + new ConnectorArguments( + "--connector", + "snowflake-logs", + "--assessment", + "--" + ConnectorArguments.OPT_QUERY_LOG_EARLIEST_TIMESTAMP, + "2024"); + + Assert.assertThrows(MetadataDumperUsageException.class, () -> connector.validate(arguments)); + } }