J'ai donc exécuté une simple vérification Deequ dans Spark, qui ressemblait à ceci:

val verificationResult: VerificationResult = { VerificationSuite()
  .onData(dataset)
  .addCheck(
    Check(CheckLevel.Error, "Review Check")
      .isComplete("col1")
      .isUnique("col2")
      .hasSize(_ == count_date)
      .satisfies(
          "abs(col4 - col5) <= 0.20 * col5",
          "value(col4) lies between value(col5)-20% and value(col5)+20%"
    )
  .run()
}

val result1 = checkResultsAsDataFrame(spark, verificationResult)

Maintenant, mon dataframe result1 ressemble à ceci:

+------------+-----------+------------+--------------------+-----------------+--------------------+
|       check|check_level|check_status|          constraint|constraint_status|  constraint_message|
+------------+-----------+------------+--------------------+-----------------+--------------------+
|Review Check|      Error|       Error|CompletenessConst...|          Success|                    |
|Review Check|      Error|       Error|UniquenessConstra...|          Failure|Value: 7.62664794...|
|Review Check|      Error|       Error|SizeConstraint(Si...|          Success|                    |
|Review Check|      Error|     Success|ComplianceConstra...|          Success|                    |
+------------+-----------+------------+--------------------+-----------------+--------------------+

Je suis confus entre les colonnes check_status et constraint_status. Comment sont-ils différents? Les résultats de mes vérifications devraient être dans ce dernier, non? Alors qu'est-ce que le premier implique?

Je n'ai trouvé aucune précision à ce sujet dans le blog deequ non plus. Quelqu'un pourrait-il expliquer?

0
Debapratim Chakraborty 26 févr. 2021 à 09:00

1 réponse

Meilleure réponse

check_status est l'état général du groupe Check que vous exécutez. Cela dépend de CheckLevel et de l'état de la contrainte. Si vous regardez le code:

val anyFailures = constraintResults.exists { _.status == ConstraintStatus.Failure }

val checkStatus = (anyFailures, level) match {
  case (true, CheckLevel.Error) => CheckStatus.Error
  case (true, CheckLevel.Warning) => CheckStatus.Warning
  case (_, _) => CheckStatus.Success
}

S'il y a un échec dans les contraintes, alors check_status = CheckLevel. Sinon, c'est un succès.

2
blackbishop 26 févr. 2021 à 08:29