数据类型

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

有关控制如何解决数据类型之间的冲突的规则,请参阅 SQL 数据类型规则

支持的数据类型

Azure Databricks 支持以下数据类型:

数据类型 说明
BIGINT 表示 8 个字节的带符号整数。
BINARY 表示字节序列值。
BOOLEAN 表示布尔值。
DATE 表示由字段 year、month 和 day 的值构成的值,不包含时区。
DECIMAL(p,s) 表示具有最大精度 p 和固定位数 s 的数字。
DOUBLE 表示 8 个字节的双精度浮点数。
FLOAT 表示 4 个字节的单精度浮点数。
INT 表示 4 个字节的带符号整数。
INTERVAL intervalQualifier 表示以秒或以月为单位的时间间隔。
VOID 表示非类型化 NULL。
SMALLINT 表示 2 个字节的带符号整数。
STRING 表示字符串值。
TIMESTAMP 表示由字段 year、month、day、hour、minute 和 second 的值构成的值,使用会话本地时区。
TIMESTAMP_NTZ 表示由年、月、日、小时、分钟和秒字段值组成的值。 所有操作在不考虑任何时区的情况下执行。
TINYINT 表示 1 个字节的带符号整数。
ARRAY <elementType> 表示由 elementType 类型的元素序列构成的值。
MAP < keyType,valueType > 表示由一组键值对构成的值。
STRUCT < [fieldName : fieldType [NOT NULL][COMMENT str][, …]] > 表示多个值,其结构通过一系列字段来描述。

数据类型分类

数据类型分为以下几类:

语言映射

适用于:check marked yes Databricks Runtime

Scala

Spark SQL 数据类型是在包 org.apache.spark.sql.types 中定义的。 可以通过导入此包来访问这些数据类型:

import org.apache.spark.sql.types._
SQL 类型 数据类型 值类型 用于访问或创建数据类型的 API
TINYINT ByteType Byte ByteType
SMALLINT ShortType Short ShortType
INT IntegerType int IntegerType
BIGINT LongType Long LongType
FLOAT FloatType Float FloatType
DOUBLE DoubleType Double DoubleType
DECIMAL(p,s) DecimalType java.math.BigDecimal DecimalType
STRING StringType 字符串 StringType
BINARY BinaryType Array[Byte] BinaryType
BOOLEAN BooleanType 布尔值 BooleanType
TIMESTAMP TimestampType java.sql.Timestamp TimestampType
TIMESTAMP_NTZ TimestampNTZType java.time.LocalDateTime TimestampNTZType
DATE DateType java.sql.Date DateType
year-month interval YearMonthIntervalType java.time.Period YearMonthIntervalType (3)
day-time interval DayTimeIntervalType java.time.Duration DayTimeIntervalType (3)
ARRAY ArrayType scala.collection.Seq ArrayType(elementType [, containsNull]) (2)
MAP MapType scala.collection.Map MapType(keyType, valueType [, valueContainsNull]) (2)
STRUCT StructType org.apache.spark.sql.Row StructType(fields) 字段是 StructField 的序列。 4
StructField 此字段的数据类型的值类型(例如,数据类型为 IntegerType 的 StructField 的 Int) StructField(name, dataType [, nullable]) 4

Java

Spark SQL 数据类型是在包 org.apache.spark.sql.types 中定义的。 若要访问或创建数据类型,请使用 org.apache.spark.sql.types.DataTypes 中提供的工厂方法。

SQL 类型 数据类型 值类型 用于访问或创建数据类型的 API
TINYINT ByteType byte 或 Byte DataTypes.ByteType
SMALLINT ShortType short 或 Short DataTypes.ShortType
INT IntegerType int 或 Integer DataTypes.IntegerType
BIGINT LongType long 或 Long DataTypes.LongType
FLOAT FloatType float 或 Float DataTypes.FloatType
DOUBLE DoubleType double 或 Double DataTypes.DoubleType
DECIMAL(p,s) DecimalType java.math.BigDecimal DataTypes.createDecimalType() DataTypes.createDecimalType(precision, scale)。
STRING StringType 字符串 DataTypes.StringType
BINARY BinaryType byte[] DataTypes.BinaryType
BOOLEAN BooleanType boolean 或 Boolean DataTypes.BooleanType
TIMESTAMP TimestampType java.sql.Timestamp DataTypes.TimestampType
TIMESTAMP_NTZ TimestampNTZType java.time.LocalDateTime DataTypes.TimestampNTZType
DATE DateType java.sql.Date DataTypes.DateType
year-month interval YearMonthIntervalType java.time.Period YearMonthIntervalType (3)
day-time interval DayTimeIntervalType java.time.Duration DayTimeIntervalType (3)
ARRAY ArrayType ava.util.List DataTypes.createArrayType(elementType [, containsNull]) (2)
MAP MapType java.util.Map DataTypes.createMapType(keyType, valueType [, valueContainsNull]) (2)
STRUCT StructType org.apache.spark.sql.Row DataTypes.createStructType(fields) 字段是 StructField 的列表或数组。 4
StructField 此字段的数据类型的值类型(例如,数据类型为 IntegerType 的 StructField 的 int) DataTypes.createStructField(name, dataType, nullable) 4

Python

Spark SQL 数据类型是在包 pyspark.sql.types 中定义的。 可以通过导入此包来访问这些数据类型:

from pyspark.sql.types import *
SQL 类型 数据类型 值类型 用于访问或创建数据类型的 API
TINYINT ByteType int 或 long。 (1) ByteType()
SMALLINT ShortType int 或 long。 (1) ShortType()
INT IntegerType int 或 long IntegerType()
BIGINT LongType long (1) LongType()
FLOAT FloatType float (1) FloatType()
DOUBLE DoubleType FLOAT DoubleType()
DECIMAL(p,s) DecimalType decimal.Decimal DecimalType()
STRING StringType string StringType()
BINARY BinaryType bytearray BinaryType()
BOOLEAN BooleanType bool BooleanType()
TIMESTAMP TimestampType datetime.datetime TimestampType()
TIMESTAMP_NTZ TimestampNTZType datetime.datetime TimestampNTZType()
DATE DateType datetime.date DateType()
year-month interval YearMonthIntervalType 不支持 不支持
day-time interval DayTimeIntervalType datetime.timedelta DayTimeIntervalType (3)
ARRAY ArrayType list、tuple 或 array ArrayType(elementType, [containsNull]) (2)
MAP MapType dict MapType(keyType, valueType, [valueContainsNull]) (2)
STRUCT StructType list 或 tuple StructType(fields) 字段是 StructField 的序列。 (4)
StructField 此字段的数据类型的值类型(例如,数据类型为 IntegerType 的 StructField 的 Int) StructField(name, dataType, [nullable]) (4)

R

SQL 类型 数据类型 值类型 用于访问或创建数据类型的 API
TINYINT ByteType integer (1) 'byte'
SMALLINT ShortType integer (1) 'short'
INT IntegerType integer 'integer'
BIGINT LongType integer (1) 'long'
FLOAT FloatType numeric (1) 'float'
DOUBLE DoubleType numeric 'double'
DECIMAL(p,s) DecimalType 不支持 不支持
STRING StringType character “字符串”
BINARY BinaryType raw 'binary'
BOOLEAN BooleanType 逻辑 'bool'
TIMESTAMP TimestampType POSIXct 'timestamp'
TIMESTAMP_NTZ TimestampNTZType datetime.datetime TimestampNTZType()
DATE DateType 日期 'date'
year-month interval YearMonthIntervalType 不支持 不支持
day-time interval DayTimeIntervalType 不支持 不支持
ARRAY ArrayType vector 或 list list(type='array', elementType=elementType, containsNull=[containsNull]).(2)
MAP MapType 环境 list(type='map', keyType=keyType, valueType=valueType, valueContainsNull=[valueContainsNull]).(2)
STRUCT StructType named list list(type='struct', fields=fields). 字段是 StructField 的序列。 (4)
StructField 此字段的数据类型的值类型(例如,数据类型为 IntegerType 的 StructField 的 integer) list(name=name, type=dataType, nullable=[nullable]) (4)

(1) 数字在运行时转换为域。 请确保数字在范围内。

(2) 可选值默认值为 TRUE

(3) 间隔类型

  • YearMonthIntervalType([startField,] endField):表示一个年-月间隔,该间隔由以下字段的一个连续子集组成:

    startField 是最左侧的字段,endField 是该类型最右侧的字段。 startFieldendField 的有效值为 0(MONTH)1(YEAR)

  • DayTimeIntervalType([startField,] endField):表示一个日期-时间间隔,该间隔由以下字段的一个连续子集组成:

    startField 是最左侧的字段,endField 是该类型最右侧的字段。 startFieldendField 的有效值为 0(DAY)1(HOUR)2(MINUTE)3(SECOND)

(4)StructType

  • StructType(fields) 表示结构由 StructField(字段)的序列、列表或数组描述的值。 不允许使用名称相同的两个字段。
  • StructField(name, dataType, nullable) 表示 StructType 中的字段。 字段的名称由 name 指示。 字段的数据类型由 dataType 指示。 nullable 指示这些字段的值是否可以具有 null 值。 这是默认值。