in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/cmd/AntiPatternCommandParser.java [123:345]
public Options getOptions() {
Options options = new Options();
Option query =
Option.builder(QUERY_OPTION_NAME)
.argName(QUERY_OPTION_NAME)
.hasArg()
.required(false)
.desc("set query")
.build();
options.addOption(query);
Option filePath =
Option.builder(FILE_PATH_OPTION_NAME)
.argName(FILE_PATH_OPTION_NAME)
.hasArg()
.required(false)
.desc("set file path")
.build();
options.addOption(filePath);
Option folderPath =
Option.builder(FOLDER_PATH_OPTION_NAME)
.argName(FOLDER_PATH_OPTION_NAME)
.hasArg()
.required(false)
.desc("set file path")
.build();
options.addOption(folderPath);
Option useInfoSchemaFlag =
Option.builder(READ_FROM_INFO_SCHEMA_FLAG_NAME)
.argName(READ_FROM_INFO_SCHEMA_FLAG_NAME)
.required(false)
.desc("flag specifying if the queries should be read from INFORMATION_SCHEMA")
.build();
options.addOption(useInfoSchemaFlag);
Option rewriteSQLFlag =
Option.builder(REWRITE_SQL_FLAG_NAME)
.argName(REWRITE_SQL_FLAG_NAME)
.required(false)
.desc("flag specifying if the queries should be rewritten using an LLM")
.build();
options.addOption(rewriteSQLFlag);
Option llmStrictValidation =
Option.builder(LLM_STRICT_VALIDATION_FLAG_NAME)
.argName(LLM_STRICT_VALIDATION_FLAG_NAME)
.required(false)
.desc(
"flag specifying that LLM results will be discarded if the validation fails (Syntactically "
+ "invalid or antipattern still present)")
.build();
options.addOption(llmStrictValidation);
Option llmRetriesSQL =
Option.builder(LLM_RETRIES_NAME)
.argName(LLM_RETRIES_NAME)
.hasArg()
.required(false)
.desc(
"number of retries when the LLM generates an incorrect SQL "
+ "query (Syntactically invalid or antipattern still present)")
.build();
options.addOption(llmRetriesSQL);
Option procesingProjectOption =
Option.builder(PROCESSING_PROJECT_ID_OPTION_NAME)
.argName(PROCESSING_PROJECT_ID_OPTION_NAME)
.hasArg()
.required(false)
.desc("project where the solution will execute")
.build();
options.addOption(procesingProjectOption);
Option outputTableOption =
Option.builder(OUTPUT_TABLE_OPTION_NAME)
.argName(OUTPUT_TABLE_OPTION_NAME)
.hasArg()
.required(false)
.desc("project with the table to which output will be written")
.build();
options.addOption(outputTableOption);
Option outputFileOption =
Option.builder(OUTPUT_FILE_OPTION_NAME)
.argName(OUTPUT_FILE_OPTION_NAME)
.hasArg()
.required(false)
.desc("path to csv file for result output")
.build();
options.addOption(outputFileOption);
Option inputCsvFileOption =
Option.builder(INPUT_CSV_FILE_OPTION_NAME)
.argName(INPUT_CSV_FILE_OPTION_NAME)
.hasArg()
.required(false)
.desc("path to csv file with input queries")
.build();
options.addOption(inputCsvFileOption);
Option inputBqOption =
Option.builder(INPUT_BQ_TABLE_OPTION_NAME)
.argName(INPUT_BQ_TABLE_OPTION_NAME)
.hasArg()
.required(false)
.desc("name of bigquery table to pull queries from")
.build();
options.addOption(inputBqOption);
Option infoSchemaDays =
Option.builder(READ_FROM_INFO_SCHEMA_DAYS_OPTION_NAME)
.argName(READ_FROM_INFO_SCHEMA_DAYS_OPTION_NAME)
.hasArg()
.required(false)
.desc("Specifies how many days back should INFORMATION SCHEMA be queried for")
.build();
options.addOption(infoSchemaDays);
Option infoSchemaStartTime =
Option.builder(READ_FROM_INFO_SCHEMA_START_TIME_OPTION_NAME)
.argName(READ_FROM_INFO_SCHEMA_START_TIME_OPTION_NAME)
.hasArg()
.required(false)
.desc("Specifies start timestamp INFORMATION SCHEMA be queried for")
.build();
options.addOption(infoSchemaStartTime);
Option infoSchemaEndTime =
Option.builder(READ_FROM_INFO_SCHEMA_END_TIME_OPTION_NAME)
.argName(READ_FROM_INFO_SCHEMA_END_TIME_OPTION_NAME)
.hasArg()
.required(false)
.desc("Specifies end timestamp INFORMATION SCHEMA be queried for")
.build();
options.addOption(infoSchemaEndTime);
Option infoSchemaTimeoutSecs =
Option.builder(READ_FROM_INFO_SCHEMA_TIMEOUT_IN_SECS_OPTION_NAME)
.argName(READ_FROM_INFO_SCHEMA_TIMEOUT_IN_SECS_OPTION_NAME)
.hasArg()
.required(false)
.desc("Specifies timeout (in secs) to query INFORMATION SCHEMA")
.build();
options.addOption(infoSchemaTimeoutSecs);
Option infoSchemaSlotmsMin =
Option.builder(INFO_SCHEMA_MIN_SLOTMS)
.argName(INFO_SCHEMA_MIN_SLOTMS)
.hasArg()
.required(false)
.desc(
"Specifies the minimum number of slotms for a query in INFORMATION_SCHEMA to be"
+ "selected for processing. Defaults to 0 (all queries are processed)")
.build();
options.addOption(infoSchemaSlotmsMin);
Option infoSchemaTable =
Option.builder(READ_FROM_INFO_SCHEMA_TABLE_OPTION_NAME)
.argName(READ_FROM_INFO_SCHEMA_TABLE_OPTION_NAME)
.hasArg()
.required(false)
.desc("Specifies the table INFORMATION SCHEMA be queried for")
.build();
options.addOption(infoSchemaTable);
Option useAnalyzerFlag =
Option.builder(USE_ANALYZER_FLAG_NAME)
.argName(USE_ANALYZER_FLAG_NAME)
.required(false)
.desc("flag specifying if the analyzer should be used")
.build();
options.addOption(useAnalyzerFlag);
Option anaLyzerDefaultProjectId =
Option.builder(ANALYZER_DEFAULT_PROJECT_ID_OPTION_NAME)
.argName(ANALYZER_DEFAULT_PROJECT_ID_OPTION_NAME)
.hasArg()
.required(false)
.desc("project id used by analyzer by default")
.build();
options.addOption(anaLyzerDefaultProjectId);
Option ISTopNPercentageJobs =
Option.builder(IS_TOP_N_PERC_JOBS_OPTION_NAME)
.argName(IS_TOP_N_PERC_JOBS_OPTION_NAME)
.hasArg()
.required(false)
.desc("Top % of jobs by slot_ms to read from INFORMATION_SCHEMA")
.build();
options.addOption(ISTopNPercentageJobs);
Option region =
Option.builder(INFO_SCHEMA_REGION)
.argName(INFO_SCHEMA_REGION)
.hasArg()
.required(false)
.desc("region")
.build();
options.addOption(region);
Option info_schema_project =
Option.builder(INFO_SCHEMA_PROJECT)
.argName(INFO_SCHEMA_PROJECT)
.hasArg()
.required(false)
.desc(
"project for which information schema will be read. This is the "
+ "project with the queries that you want to optimize")
.build();
options.addOption(info_schema_project);
Option service_account_keyfile_path =
Option.builder(SERVICE_ACCOUNT_KEYFILE_PATH)
.argName(SERVICE_ACCOUNT_KEYFILE_PATH)
.hasArg()
.required(false)
.desc("path to service account keyfile")
.build();
options.addOption(service_account_keyfile_path);
return options;
}