Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e561156

Browse files
author
Nikita Glukhov
committed
Reduce jsonb stats size by not storing zero frequencies
1 parent 7af8e69 commit e561156

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/backend/utils/adt/jsonb_typanalyze.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,14 @@ jsonAnalyzeMakeScalarStats(JsonbParseState **ps, const char *name,
945945
return pushJsonbValue(ps, WJB_END_OBJECT, NULL);
946946
}
947947

948+
static void
949+
pushJsonbKeyValueFloatNonZero(JsonbParseState **ps, JsonbValue *jbv,
950+
const char *field, double val)
951+
{
952+
if (val != 0.0)
953+
pushJsonbKeyValueFloat(ps, jbv, field, val);
954+
}
955+
948956
/*
949957
* jsonAnalyzeBuildPathStats
950958
* Serialize statistics for a particular json path.
@@ -968,28 +976,28 @@ jsonAnalyzeBuildPathStats(JsonPathAnlStats *pstats)
968976

969977
pushJsonbKeyValueFloat(&ps, &val, "freq", freq);
970978

971-
pushJsonbKeyValueFloat(&ps, &val, "freq_null",
972-
freq * vstats->nnulls /
979+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_null",
980+
freq * vstats->nnulls /
973981
vstats->jsons.values.count);
974982

975-
pushJsonbKeyValueFloat(&ps, &val, "freq_boolean",
976-
freq * (vstats->nfalse + vstats->ntrue) /
983+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_boolean",
984+
freq * (vstats->nfalse + vstats->ntrue) /
977985
vstats->jsons.values.count);
978986

979-
pushJsonbKeyValueFloat(&ps, &val, "freq_string",
980-
freq * vstats->nstrings /
987+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_string",
988+
freq * vstats->nstrings /
981989
vstats->jsons.values.count);
982990

983-
pushJsonbKeyValueFloat(&ps, &val, "freq_numeric",
984-
freq * vstats->nnumerics /
991+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_numeric",
992+
freq * vstats->nnumerics /
985993
vstats->jsons.values.count);
986994

987-
pushJsonbKeyValueFloat(&ps, &val, "freq_array",
988-
freq * vstats->narrays /
995+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_array",
996+
freq * vstats->narrays /
989997
vstats->jsons.values.count);
990998

991-
pushJsonbKeyValueFloat(&ps, &val, "freq_object",
992-
freq * vstats->nobjects /
999+
pushJsonbKeyValueFloatNonZero(&ps, &val, "freq_object",
1000+
freq * vstats->nobjects /
9931001
vstats->jsons.values.count);
9941002

9951003
/*

0 commit comments

Comments
 (0)