in src/main/scala/com/amazon/deequ/repository/AnalysisResultSerde.scala [223:357]
override def serialize(analyzer: Analyzer[_ <: State[_], _ <: Metric[_]], t: Type,
context: JsonSerializationContext): JsonElement = {
val result = new JsonObject()
analyzer match {
case size: Size =>
result.addProperty(ANALYZER_NAME_FIELD, "Size")
result.addProperty(WHERE_FIELD, size.where.orNull)
case completeness: Completeness =>
result.addProperty(ANALYZER_NAME_FIELD, "Completeness")
result.addProperty(COLUMN_FIELD, completeness.column)
result.addProperty(WHERE_FIELD, completeness.where.orNull)
case compliance: Compliance =>
result.addProperty(ANALYZER_NAME_FIELD, "Compliance")
result.addProperty(WHERE_FIELD, compliance.where.orNull)
result.addProperty("instance", compliance.instance)
result.addProperty("predicate", compliance.predicate)
case patternMatch: PatternMatch =>
result.addProperty(ANALYZER_NAME_FIELD, "PatternMatch")
result.addProperty(COLUMN_FIELD, patternMatch.column)
result.addProperty(WHERE_FIELD, patternMatch.where.orNull)
result.addProperty("pattern", patternMatch.pattern.toString())
case sum: Sum =>
result.addProperty(ANALYZER_NAME_FIELD, "Sum")
result.addProperty(COLUMN_FIELD, sum.column)
result.addProperty(WHERE_FIELD, sum.where.orNull)
case mean: Mean =>
result.addProperty(ANALYZER_NAME_FIELD, "Mean")
result.addProperty(COLUMN_FIELD, mean.column)
result.addProperty(WHERE_FIELD, mean.where.orNull)
case minimum: Minimum =>
result.addProperty(ANALYZER_NAME_FIELD, "Minimum")
result.addProperty(COLUMN_FIELD, minimum.column)
result.addProperty(WHERE_FIELD, minimum.where.orNull)
case maximum: Maximum =>
result.addProperty(ANALYZER_NAME_FIELD, "Maximum")
result.addProperty(COLUMN_FIELD, maximum.column)
result.addProperty(WHERE_FIELD, maximum.where.orNull)
case countDistinct: CountDistinct =>
result.addProperty(ANALYZER_NAME_FIELD, "CountDistinct")
result.add(COLUMNS_FIELD, context.serialize(countDistinct.columns.asJava,
new TypeToken[JList[String]]() {}.getType))
case distinctness: Distinctness =>
result.addProperty(ANALYZER_NAME_FIELD, "Distinctness")
result.add(COLUMNS_FIELD, context.serialize(distinctness.columns.asJava))
case entropy: Entropy =>
result.addProperty(ANALYZER_NAME_FIELD, "Entropy")
result.addProperty(COLUMN_FIELD, entropy.column)
case mutualInformation: MutualInformation =>
result.addProperty(ANALYZER_NAME_FIELD, "MutualInformation")
result.add(COLUMNS_FIELD, context.serialize(mutualInformation.columns.asJava,
new TypeToken[JList[String]]() {}.getType))
case uniqueValueRatio: UniqueValueRatio =>
result.addProperty(ANALYZER_NAME_FIELD, "UniqueValueRatio")
result.add(COLUMNS_FIELD, context.serialize(uniqueValueRatio.columns.asJava,
new TypeToken[JList[String]]() {}.getType))
case uniqueness: Uniqueness =>
result.addProperty(ANALYZER_NAME_FIELD, "Uniqueness")
result.add(COLUMNS_FIELD, context.serialize(uniqueness.columns.asJava,
new TypeToken[JList[String]]() {}.getType))
case histogram: Histogram if histogram.binningUdf.isEmpty =>
result.addProperty(ANALYZER_NAME_FIELD, "Histogram")
result.addProperty(COLUMN_FIELD, histogram.column)
result.addProperty("maxDetailBins", histogram.maxDetailBins)
case _ : Histogram =>
throw new IllegalArgumentException("Unable to serialize Histogram with binningUdf!")
case dataType: DataType =>
result.addProperty(ANALYZER_NAME_FIELD, "DataType")
result.addProperty(COLUMN_FIELD, dataType.column)
result.addProperty(WHERE_FIELD, dataType.where.orNull)
case approxCountDistinct: ApproxCountDistinct =>
result.addProperty(ANALYZER_NAME_FIELD, "ApproxCountDistinct")
result.addProperty(COLUMN_FIELD, approxCountDistinct.column)
result.addProperty(WHERE_FIELD, approxCountDistinct.where.orNull)
case correlation: Correlation =>
result.addProperty(ANALYZER_NAME_FIELD, "Correlation")
result.addProperty("firstColumn", correlation.firstColumn)
result.addProperty("secondColumn", correlation.secondColumn)
result.addProperty(WHERE_FIELD, correlation.where.orNull)
case standardDeviation: StandardDeviation =>
result.addProperty(ANALYZER_NAME_FIELD, "StandardDeviation")
result.addProperty(COLUMN_FIELD, standardDeviation.column)
result.addProperty(WHERE_FIELD, standardDeviation.where.orNull)
case approxQuantile: ApproxQuantile =>
result.addProperty(ANALYZER_NAME_FIELD, "ApproxQuantile")
result.addProperty(COLUMN_FIELD, approxQuantile.column)
result.addProperty("quantile", approxQuantile.quantile)
result.addProperty("relativeError", approxQuantile.relativeError)
case approxQuantiles: ApproxQuantiles =>
result.addProperty(ANALYZER_NAME_FIELD, "ApproxQuantiles")
result.addProperty(COLUMN_FIELD, approxQuantiles.column)
result.addProperty("quantiles", approxQuantiles.quantiles.mkString(","))
result.addProperty("relativeError", approxQuantiles.relativeError)
case minLength: MinLength =>
result.addProperty(ANALYZER_NAME_FIELD, "MinLength")
result.addProperty(COLUMN_FIELD, minLength.column)
result.addProperty(WHERE_FIELD, minLength.where.orNull)
case maxLength: MaxLength =>
result.addProperty(ANALYZER_NAME_FIELD, "MaxLength")
result.addProperty(COLUMN_FIELD, maxLength.column)
result.addProperty(WHERE_FIELD, maxLength.where.orNull)
case _ =>
throw new IllegalArgumentException(s"Unable to serialize analyzer $analyzer.")
}
result
}