(ns metabase.analyze.fingerprint.schema (:require [metabase.util.malli.registry :as mr])) | |
(mr/def ::Percent
[:and
number?
[:fn
{:error/message "Valid percentage between (inclusive) 0 and 1."}
#(<= 0 % 1)]]) | |
Schema for something represting a percentage. A floating-point value between (inclusive) 0 and 1. | (def Percent [:ref ::Percent]) |
(mr/def ::GlobalFingerprint
[:map
[:distinct-count {:optional true} :int]
[:nil% {:optional true} [:maybe Percent]]]) | |
Fingerprint values that Fields of all types should have. | (def GlobalFingerprint [:ref ::GlobalFingerprint]) |
(mr/def ::NumberFingerprint
[:map
[:min {:optional true} [:maybe number?]]
[:max {:optional true} [:maybe number?]]
[:avg {:optional true} [:maybe number?]]
[:q1 {:optional true} [:maybe number?]]
[:q3 {:optional true} [:maybe number?]]
[:sd {:optional true} [:maybe number?]]]) | |
Schema for fingerprint information for Fields deriving from | (def NumberFingerprint [:ref ::NumberFingerprint]) |
(mr/def ::TextFingerprint
[:map
[:percent-json {:optional true} [:maybe Percent]]
[:percent-url {:optional true} [:maybe Percent]]
[:percent-email {:optional true} [:maybe Percent]]
[:percent-state {:optional true} [:maybe Percent]]
[:average-length {:optional true} [:maybe number?]]]) | |
Schema for fingerprint information for Fields deriving from | (def TextFingerprint [:ref ::TextFingerprint]) |
(mr/def ::TemporalFingerprint
[:map
[:earliest {:optional true} [:maybe :string]]
[:latest {:optional true} [:maybe :string]]]) | |
Schema for fingerprint information for Fields deriving from | (def TemporalFingerprint [:ref ::TemporalFingerprint]) |
(mr/def ::TypeSpecificFingerprint
[:and
[:map
[:type/Number {:optional true} NumberFingerprint]
[:type/Text {:optional true} TextFingerprint]
;; temporal fingerprints are keyed by `:type/DateTime` for historical reasons. `DateTime` used to be the parent of
;; all temporal MB types.
[:type/DateTime {:optional true} TemporalFingerprint]]
[:fn
{:error/message "Type-specific fingerprint with exactly one key"}
(fn [m]
(= 1 (count (keys m))))]]) | |
Schema for type-specific fingerprint information. | (def TypeSpecificFingerprint [:ref ::TypeSpecificFingerprint]) |
(mr/def ::Fingerprint
[:map
[:global {:optional true} GlobalFingerprint]
[:type {:optional true} TypeSpecificFingerprint]
[:experimental {:optional true} :map]]) | |
Schema for a Field 'fingerprint' generated as part of the analysis stage. Used to power the 'classification'
sub-stage of analysis. Stored as the | (def Fingerprint [:ref ::Fingerprint]) |