private static CatalogColumnStatisticsDataBase createTableColumnStats()

in flink-connector-hive/src/main/java/org/apache/flink/table/catalog/hive/util/HiveStatsUtil.java [480:539]


    private static CatalogColumnStatisticsDataBase createTableColumnStats(
            DataType colType, ColumnStatisticsData stats, String hiveVersion) {
        HiveShim hiveShim = HiveShimLoader.loadHiveShim(hiveVersion);
        if (stats.isSetBinaryStats()) {
            BinaryColumnStatsData binaryStats = stats.getBinaryStats();
            return new CatalogColumnStatisticsDataBinary(
                    binaryStats.isSetMaxColLen() ? binaryStats.getMaxColLen() : null,
                    binaryStats.isSetAvgColLen() ? binaryStats.getAvgColLen() : null,
                    binaryStats.isSetNumNulls() ? binaryStats.getNumNulls() : null);
        } else if (stats.isSetBooleanStats()) {
            BooleanColumnStatsData booleanStats = stats.getBooleanStats();
            return new CatalogColumnStatisticsDataBoolean(
                    booleanStats.isSetNumTrues() ? booleanStats.getNumTrues() : null,
                    booleanStats.isSetNumFalses() ? booleanStats.getNumFalses() : null,
                    booleanStats.isSetNumNulls() ? booleanStats.getNumNulls() : null);
        } else if (hiveShim.isDateStats(stats)) {
            return hiveShim.toFlinkDateColStats(stats);
        } else if (stats.isSetDoubleStats()) {
            DoubleColumnStatsData doubleStats = stats.getDoubleStats();
            return new CatalogColumnStatisticsDataDouble(
                    doubleStats.isSetLowValue() ? doubleStats.getLowValue() : null,
                    doubleStats.isSetHighValue() ? doubleStats.getHighValue() : null,
                    doubleStats.isSetNumDVs() ? doubleStats.getNumDVs() : null,
                    doubleStats.isSetNumNulls() ? doubleStats.getNumNulls() : null);
        } else if (stats.isSetLongStats()) {
            LongColumnStatsData longColStats = stats.getLongStats();
            return new CatalogColumnStatisticsDataLong(
                    longColStats.isSetLowValue() ? longColStats.getLowValue() : null,
                    longColStats.isSetHighValue() ? longColStats.getHighValue() : null,
                    longColStats.isSetNumDVs() ? longColStats.getNumDVs() : null,
                    longColStats.isSetNumNulls() ? longColStats.getNumNulls() : null);
        } else if (stats.isSetStringStats()) {
            StringColumnStatsData stringStats = stats.getStringStats();
            return new CatalogColumnStatisticsDataString(
                    stringStats.isSetMaxColLen() ? stringStats.getMaxColLen() : null,
                    stringStats.isSetAvgColLen() ? stringStats.getAvgColLen() : null,
                    stringStats.isSetNumDVs() ? stringStats.getNumDVs() : null,
                    stringStats.isSetNumDVs() ? stringStats.getNumNulls() : null);
        } else if (stats.isSetDecimalStats()) {
            DecimalColumnStatsData decimalStats = stats.getDecimalStats();
            // for now, just return CatalogColumnStatisticsDataDouble for decimal columns
            Double max = null;
            if (decimalStats.isSetHighValue()) {
                max = toHiveDecimal(decimalStats.getHighValue()).doubleValue();
            }
            Double min = null;
            if (decimalStats.isSetLowValue()) {
                min = toHiveDecimal(decimalStats.getLowValue()).doubleValue();
            }
            Long ndv = decimalStats.isSetNumDVs() ? decimalStats.getNumDVs() : null;
            Long nullCount = decimalStats.isSetNumNulls() ? decimalStats.getNumNulls() : null;
            return new CatalogColumnStatisticsDataDouble(min, max, ndv, nullCount);
        } else {
            LOG.warn(
                    "Flink does not support converting ColumnStatisticsData '{}' for Hive column type '{}' yet.",
                    stats,
                    colType);
            return null;
        }
    }