in ratatool-cli/src/main/scala/com/spotify/ratatool/tool/Ratatool.scala [26:71]
private def commandSet[T <: Command](xs: T*): Set[String] = xs.map(_.command).toSet
private val commands = commandSet(DirectSamplerParser, BigDiffy, BigSampler)
def main(args: Array[String]): Unit = {
val usage = """
| Ratatool - a tool for random data generation, sampling, and diff-ing
| Usage: ratatool [bigDiffy|bigSampler|directSampler] [args]
""".stripMargin
if (args.isEmpty || !commands.contains(args.head)) {
print(usage)
sys.exit(1)
} else {
args.head match {
case BigDiffy.command => BigDiffy.run(args.tail)
case BigSampler.command => BigSampler.run(args.tail)
case DirectSamplerParser.command =>
val opts = DirectSamplerParser.parse(args.tail)
if (opts.isEmpty) {
sys.exit(-1)
}
val o = opts.get
o.mode match {
case "avro" =>
val data = new AvroSampler(o.in).sample(o.n, o.head)
AvroIO.writeToFile(data, data.head.getSchema, o.out)
case "bigquery" =>
val sampler = new BigQuerySampler(BigQueryIO.parseTableSpec(o.in))
val data = sampler.sample(o.n, o.head)
if (o.out.nonEmpty) {
TableRowJsonIO.writeToFile(data, o.out)
}
if (o.tableOut.nonEmpty) {
val table = BigQueryIO.parseTableSpec(o.tableOut)
BigQueryIO.writeToTable(data, sampler.schema, table)
}
case "parquet" =>
val data = new ParquetSampler(o.in).sample(o.n, o.head)
ParquetIO.writeToFile(data, data.head.getSchema, o.out)
case _ =>
throw new NotImplementedError(s"${o.mode} not implemented")
}
}
}
}