in athena-federation-sdk-tools/src/main/java/com/amazonaws/athena/connector/validation/ConnectorValidator.java [464:547]
static TestConfig fromArgs(String[] args) throws ParseException
{
log.info("Received arguments: {}", args);
requireNonNull(args);
Options options = new Options();
options.addOption("f", LAMBDA_METADATA_FUNCTION_ARG, true,
"The name of the Lambda function to be validated. "
+ "Uses your configured default AWS region.");
options.addOption("r", LAMBDA_RECORD_FUNCTION_ARG, true,
"The name of the Lambda function to be used to read data records. "
+ "If not provided, this defaults to the value provided for lambda-func. "
+ "Uses your configured default AWS region.");
options.addOption("c", CATALOG_ID_ARG, true,
"The catalog name to pass to the Lambda function to be validated.");
options.addOption("s", SCHEMA_ID_ARG, true,
"The schema name to be used when validating the Lambda function. "
+ "If not provided, a random existing schema will be chosen.");
options.addOption("t", TABLE_ID_ARG, true,
"The table name to be used when validating the Lambda function. "
+ "If not provided, a random existing table will be chosen.");
options.addOption("c", CONSTRAINTS_ARG, true,
"A comma-separated list of field/value pair constraints to be applied "
+ "when reading metadata and records from the Lambda function to be validated");
options.addOption("p", PLANNING_ONLY_ARG, false,
"If this option is set, then the validator will not attempt to read"
+ " any records after calling GetSplits.");
options.addOption("e", ALLOW_EMPTY_SHOW_TABLES, false,
"Allows empty show tables results without considering it a failure.");
options.addOption("h", HELP_ARG, false, "Prints usage information.");
DefaultParser argParser = new DefaultParser();
CommandLine parsedArgs = argParser.parse(options, args);
if (parsedArgs.hasOption(HELP_ARG)) {
new HelpFormatter().printHelp(150, "./validate_connector.sh --" + LAMBDA_METADATA_FUNCTION_ARG
+ " lambda_func [--" + LAMBDA_RECORD_FUNCTION_ARG
+ " record_func] [--" + CATALOG_ID_ARG
+ " catalog] [--" + SCHEMA_ID_ARG
+ " schema [--" + TABLE_ID_ARG
+ " table [--" + CONSTRAINTS_ARG
+ " constraints]]] [--" + PLANNING_ONLY_ARG + "]"
+ " [--" + ALLOW_EMPTY_SHOW_TABLES + "]"
+ " [--" + HELP_ARG + "]",
null,
options,
null);
System.exit(0);
}
checkArgument(parsedArgs.hasOption(LAMBDA_METADATA_FUNCTION_ARG),
"Lambda function must be provided via the --lambda-func or -l args!");
String metadataFunction = parsedArgs.getOptionValue(LAMBDA_METADATA_FUNCTION_ARG);
checkArgument(metadataFunction.equals(metadataFunction.toLowerCase()),
"Lambda function name must be lowercase.");
if (parsedArgs.hasOption(TABLE_ID_ARG)) {
checkArgument(parsedArgs.hasOption(SCHEMA_ID_ARG),
"The --schema argument must be provided if the --table argument is provided.");
}
if (parsedArgs.hasOption(CONSTRAINTS_ARG)) {
checkArgument(parsedArgs.hasOption(TABLE_ID_ARG),
"The --table argument must be provided if the --constraints argument is provided.");
}
String catalog = metadataFunction;
if (parsedArgs.hasOption(CATALOG_ID_ARG)) {
catalog = parsedArgs.getOptionValue(CATALOG_ID_ARG);
checkArgument(catalog.equals(catalog.toLowerCase()),
"Catalog name must be lowercase.");
}
return new TestConfig(metadataFunction,
parsedArgs.hasOption(LAMBDA_RECORD_FUNCTION_ARG)
? parsedArgs.getOptionValue(LAMBDA_RECORD_FUNCTION_ARG)
: metadataFunction,
catalog,
Optional.ofNullable(parsedArgs.getOptionValue(SCHEMA_ID_ARG)),
Optional.ofNullable(parsedArgs.getOptionValue(TABLE_ID_ARG)),
Optional.ofNullable(parsedArgs.getOptionValue(CONSTRAINTS_ARG)),
parsedArgs.hasOption(PLANNING_ONLY_ARG),
parsedArgs.hasOption(ALLOW_EMPTY_SHOW_TABLES));
}