Database & utility Table macro

histogram_values()

Arguments & returns

histogram_values(source, col_name, technique, bin_count)

Table macro
Overload link sourcecol_nametechniquebin_count Returns
#01 unknownunknownunknownunknown TABLE

Definition

WITH
  bins AS (
    SELECT
      CASE
        WHEN (
          (
            (
              (
                NOT (
                  can_cast_implicitly (min(col_name), CAST(NULL AS BIGINT))
                  OR can_cast_implicitly (min(col_name), CAST(NULL AS DOUBLE))
                  OR can_cast_implicitly (min(col_name), CAST(NULL AS TIMESTAMP))
                )
              )
              AND (technique = 'auto')
            )
            OR (technique = 'sample')
          )
        ) THEN (approx_top_k (col_name, bin_count))
        WHEN ((technique = 'equi-height')) THEN (
          quantile(
            col_name,
            main.list_apply (
              generate_series(1, bin_count),
              (lambda x: (x / CAST(bin_count AS DOUBLE)))
            )
          )
        )
        WHEN ((technique = 'equi-width')) THEN (
          equi_width_bins (min(col_name), max(col_name), bin_count, CAST('f' AS BOOLEAN))
        )
        WHEN (
          (
            (technique = 'equi-width-nice')
            OR (technique = 'auto')
          )
        ) THEN (
          equi_width_bins (min(col_name), max(col_name), bin_count, CAST('t' AS BOOLEAN))
        )
        ELSE error(concat('Unrecognized technique ', technique))
      END AS bins
    FROM
      query_table (CAST(source AS VARCHAR))
  )
SELECT
  unnest(map_keys(histogram)) AS bin,
  unnest(map_values(histogram)) AS count
FROM
  (
    SELECT
      CASE
        WHEN (
          (
            (
              (
                NOT (
                  can_cast_implicitly (min(col_name), CAST(NULL AS BIGINT))
                  OR can_cast_implicitly (min(col_name), CAST(NULL AS DOUBLE))
                  OR can_cast_implicitly (min(col_name), CAST(NULL AS TIMESTAMP))
                )
              )
              AND (technique = 'auto')
            )
            OR (technique = 'sample')
          )
        ) THEN (histogram_exact (col_name, bins))
        ELSE histogram(col_name, bins)
      END AS histogram
    FROM
      query_table (CAST(source AS VARCHAR)),
      bins
  )