in ratatool-sampling/src/main/scala/com/spotify/ratatool/samplers/BigSamplerBigQuery.scala [97:124]
private[samplers] def getTableRowField(
r: TableRow,
fieldStr: String,
tblSchema: Seq[TableFieldSchema]
): Any = {
val subfields = fieldStr.split(BigSampler.fieldSep)
val field = tblSchema.find(_.getName == subfields.head).getOrElse {
throw new NoSuchElementException(s"Can't find field `$fieldStr` in the schema $tblSchema")
}
val v = r.get(subfields.head)
if (v == null) {
log.debug(
s"Field `${field.getName}` of type ${field.getType} and mode ${field.getMode}" +
s" is null - won't account for hash"
)
} else {
field.getType match {
case "RECORD" if fieldStr.nonEmpty =>
// v is a LinkedHashMap
getTableRowField(
TableRow(v.asInstanceOf[java.util.Map[String, AnyRef]].asScala.toList: _*),
subfields.tail.mkString(BigSampler.fieldSep.toString),
field.getFields.asScala.toList
)
case _ => v
}
}
}