コード例 #1
0
        internal static decimal[] EstimateBucketResolutions(
            long numSamples,
            double minSample,
            double maxSample,
            long valuesPerBucketTarget,
            bool isIntegerColumn)
        {
            if (numSamples <= 0)
            {
                throw new System.ArgumentException(
                          $"Argument numSamples should always be greater than zero, got {numSamples}.");
            }

            var range = maxSample - minSample;

            if (range <= 0)
            {
                return(new decimal[] { 1M });
            }

            var valueDensity = numSamples / (maxSample - minSample);

            var targetBucketSize = valuesPerBucketTarget / valueDensity;

            var bucketSizeEstimate = new BucketSize(isIntegerColumn
                ? System.Math.Max(targetBucketSize, 5)
                : targetBucketSize);

            return(new decimal[]
            {
                bucketSizeEstimate.Smaller(steps: 2).SnappedSize,
                bucketSizeEstimate.SnappedSize,
                bucketSizeEstimate.Larger(steps: 2).SnappedSize,
            });
        }