in hologres-connector-spark-base/src/main/scala/com/alibaba/hologres/spark/utils/SparkHoloUtil.scala [100:130]
def getSparkDataType(column: Column): DataType = {
column.getType match {
case Types.SMALLINT | Types.TINYINT => DataTypes.ShortType
case Types.INTEGER => DataTypes.IntegerType
case Types.BIGINT => DataTypes.LongType
case Types.REAL | Types.FLOAT => DataTypes.FloatType
case Types.DOUBLE => DataTypes.DoubleType
case Types.BOOLEAN | Types.BIT => DataTypes.BooleanType
case Types.TIMESTAMP | Types.TIMESTAMP_WITH_TIMEZONE => DataTypes.TimestampType
case Types.BINARY => DataTypes.BinaryType
case Types.DATE => DataTypes.DateType
case Types.CHAR | Types.VARCHAR | Types.LONGVARCHAR => DataTypes.StringType
case Types.NUMERIC | Types.DECIMAL => DecimalType(column.getPrecision, column.getScale)
case Types.ARRAY =>
column.getTypeName match {
case "_int4" => ArrayType(DataTypes.IntegerType)
case "_int8" => ArrayType(DataTypes.LongType)
case "_float4" => ArrayType(DataTypes.FloatType)
case "_float8" => ArrayType(DataTypes.DoubleType)
case "_bool" => ArrayType(DataTypes.BooleanType)
case "_text" => ArrayType(DataTypes.StringType)
}
case _ =>
column.getTypeName match {
case "roaringbitmap" => DataTypes.BinaryType
case "json" | "jsonb" => DataTypes.StringType
case _ => throw new IllegalArgumentException(String.format("Column type %s does not supported now",
column.getTypeName))
}
}
}