private static ColumnStatisticsData getColumnStatisticsData()

in flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/catalog/hive/util/HiveStatsUtil.java [205:333]


	private static ColumnStatisticsData getColumnStatisticsData(DataType colType, CatalogColumnStatisticsDataBase colStat,
			String hiveVersion) {
		LogicalTypeRoot type = colType.getLogicalType().getTypeRoot();
		if (type.equals(LogicalTypeRoot.CHAR)
		|| type.equals(LogicalTypeRoot.VARCHAR)) {
			if (colStat instanceof CatalogColumnStatisticsDataString) {
				CatalogColumnStatisticsDataString stringColStat = (CatalogColumnStatisticsDataString) colStat;
				StringColumnStatsData hiveStringColumnStats = new StringColumnStatsData();
				hiveStringColumnStats.clear();
				if (null != stringColStat.getMaxLength()) {
					hiveStringColumnStats.setMaxColLen(stringColStat.getMaxLength());
				}
				if (null != stringColStat.getAvgLength()) {
					hiveStringColumnStats.setAvgColLen(stringColStat.getAvgLength());
				}
				if (null != stringColStat.getNullCount()) {
					hiveStringColumnStats.setNumNulls(stringColStat.getNullCount());
				}
				if (null != stringColStat.getNdv()) {
					hiveStringColumnStats.setNumDVs(stringColStat.getNdv());
				}
				return ColumnStatisticsData.stringStats(hiveStringColumnStats);
			}
		} else if (type.equals(LogicalTypeRoot.BOOLEAN)) {
			if (colStat instanceof CatalogColumnStatisticsDataBoolean) {
				CatalogColumnStatisticsDataBoolean booleanColStat = (CatalogColumnStatisticsDataBoolean) colStat;
				BooleanColumnStatsData hiveBoolStats = new BooleanColumnStatsData();
				hiveBoolStats.clear();
				if (null != booleanColStat.getTrueCount()) {
					hiveBoolStats.setNumTrues(booleanColStat.getTrueCount());
				}
				if (null != booleanColStat.getFalseCount()) {
					hiveBoolStats.setNumFalses(booleanColStat.getFalseCount());
				}
				if (null != booleanColStat.getNullCount()) {
					hiveBoolStats.setNumNulls(booleanColStat.getNullCount());
				}
				return ColumnStatisticsData.booleanStats(hiveBoolStats);
			}
		} else if (type.equals(LogicalTypeRoot.TINYINT)
				|| type.equals(LogicalTypeRoot.SMALLINT)
				|| type.equals(LogicalTypeRoot.INTEGER)
				|| type.equals(LogicalTypeRoot.BIGINT)
				|| type.equals(LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
				|| type.equals(LogicalTypeRoot.TIME_WITHOUT_TIME_ZONE)
				|| type.equals(LogicalTypeRoot.TIMESTAMP_WITH_TIME_ZONE)) {
			if (colStat instanceof CatalogColumnStatisticsDataLong) {
				CatalogColumnStatisticsDataLong longColStat = (CatalogColumnStatisticsDataLong) colStat;
				LongColumnStatsData hiveLongColStats = new LongColumnStatsData();
				hiveLongColStats.clear();
				if (null != longColStat.getMax()) {
					hiveLongColStats.setHighValue(longColStat.getMax());
				}
				if (null != longColStat.getMin()) {
					hiveLongColStats.setLowValue(longColStat.getMin());
				}
				if (null != longColStat.getNdv()) {
					hiveLongColStats.setNumDVs(longColStat.getNdv());
				}
				if (null != longColStat.getNullCount()) {
					hiveLongColStats.setNumNulls(longColStat.getNullCount());
				}
				return ColumnStatisticsData.longStats(hiveLongColStats);
			}
		} else if (type.equals(LogicalTypeRoot.FLOAT)
				|| type.equals(LogicalTypeRoot.DOUBLE)) {
			if (colStat instanceof CatalogColumnStatisticsDataDouble) {
				CatalogColumnStatisticsDataDouble doubleColumnStatsData = (CatalogColumnStatisticsDataDouble) colStat;
				DoubleColumnStatsData hiveFloatStats = new DoubleColumnStatsData();
				hiveFloatStats.clear();
				if (null != doubleColumnStatsData.getMax()) {
					hiveFloatStats.setHighValue(doubleColumnStatsData.getMax());
				}
				if (null != doubleColumnStatsData.getMin()) {
					hiveFloatStats.setLowValue(doubleColumnStatsData.getMin());
				}
				if (null != doubleColumnStatsData.getNullCount()) {
					hiveFloatStats.setNumNulls(doubleColumnStatsData.getNullCount());
				}
				if (null != doubleColumnStatsData.getNdv()) {
					hiveFloatStats.setNumDVs(doubleColumnStatsData.getNdv());
				}
				return ColumnStatisticsData.doubleStats(hiveFloatStats);
			}
		} else if (type.equals(LogicalTypeRoot.DATE)) {
			if (colStat instanceof CatalogColumnStatisticsDataDate) {
				HiveShim hiveShim = HiveShimLoader.loadHiveShim(hiveVersion);
				return hiveShim.toHiveDateColStats((CatalogColumnStatisticsDataDate) colStat);
			}
		} else if (type.equals(LogicalTypeRoot.VARBINARY)
				|| type.equals(LogicalTypeRoot.BINARY)) {
			if (colStat instanceof CatalogColumnStatisticsDataBinary) {
				CatalogColumnStatisticsDataBinary binaryColumnStatsData = (CatalogColumnStatisticsDataBinary) colStat;
				BinaryColumnStatsData hiveBinaryColumnStats = new BinaryColumnStatsData();
				hiveBinaryColumnStats.clear();
				if (null != binaryColumnStatsData.getMaxLength()) {
					hiveBinaryColumnStats.setMaxColLen(binaryColumnStatsData.getMaxLength());
				}
				if (null != binaryColumnStatsData.getAvgLength()) {
					hiveBinaryColumnStats.setAvgColLen(binaryColumnStatsData.getAvgLength());
				}
				if (null != binaryColumnStatsData.getNullCount()) {
					hiveBinaryColumnStats.setNumNulls(binaryColumnStatsData.getNullCount());
				}
				return ColumnStatisticsData.binaryStats(hiveBinaryColumnStats);
			}
		} else if (type.equals(LogicalTypeRoot.DECIMAL)) {
			if (colStat instanceof CatalogColumnStatisticsDataDouble) {
				CatalogColumnStatisticsDataDouble flinkStats = (CatalogColumnStatisticsDataDouble) colStat;
				DecimalColumnStatsData hiveStats = new DecimalColumnStatsData();
				if (flinkStats.getMax() != null) {
					// in older versions we cannot create HiveDecimal from Double, so convert Double to BigDecimal first
					hiveStats.setHighValue(toThriftDecimal(HiveDecimal.create(BigDecimal.valueOf(flinkStats.getMax()))));
				}
				if (flinkStats.getMin() != null) {
					hiveStats.setLowValue(toThriftDecimal(HiveDecimal.create(BigDecimal.valueOf(flinkStats.getMin()))));
				}
				if (flinkStats.getNdv() != null) {
					hiveStats.setNumDVs(flinkStats.getNdv());
				}
				if (flinkStats.getNullCount() != null) {
					hiveStats.setNumNulls(flinkStats.getNullCount());
				}
				return ColumnStatisticsData.decimalStats(hiveStats);
			}
		}
		throw new CatalogException(String.format("Flink does not support converting ColumnStats '%s' for Hive column " +
												"type '%s' yet", colStat, colType));
	}