适用于: Databricks SQL
 Databricks SQL  Databricks Runtime
 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 个字节的带符号整数。 | 
| GEOGRAPHY(srid) | 表示坐标引用系统为地理(经度和纬度(以度为单位)且由 srid值定义的地理值。 如果srid被设置为ANY,则在类型中不会硬编码坐标参考系统,而是成为一个运行时值。 | 
| GEOMETRY(srid) | 表示其坐标参考系统为笛卡尔坐标系且由 srid值定义的几何值。 如果srid被设置为ANY,则在类型中不会硬编码坐标参考系统,而是成为一个运行时值。 | 
| ARRAY < elementType > | 表示由 elementType类型的元素序列构成的值。 | 
| MAP < keyType,valueType > | 表示由一组键值对构成的值。 | 
| STRUCT < [fieldName: fieldType [NOT NULL][COMMENT str][,...]] > | 表示多个值,其结构通过一系列字段来描述。 | 
| VARIANT | 表示半结构化数据。 | 
| OBJECT | 表示 VARIANT中的值,其结构通过一系列字段来描述。 | 
重要
Delta Lake 不支持 VOID 类型。
数据类型分类
数据类型分为以下几类:
整型数值类型
整型数值类型表示整数:
精确数字类型
确切的数字类型表示十进制数字:
- 整数数值
- DECIMAL
二进制浮点类型
二进制浮点类型使用指数和二进制表示形式覆盖大量数字:
数字类型
数值类型表示所有数值数据类型:
日期时间类型
日期时间类型表示日期和时间组件:
- DATE
- TIMESTAMP
- TIMESTAMP_NTZ
地理空间类型
地理空间类型表示几何对象或地理对象:
简单类型
简单类型是通过保存单例值来定义的类型。
复杂类型
复杂类型由复杂或 简单类型的多个组件组成:
语言映射
              适用于: Databricks Runtime
 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 | 
| 年-月区间 | YearMonthIntervalType | java.time.Period | 年月间隔类型 (3) | 
| 白天时间间隔 | DayTimeIntervalType | java.time.Duration | 日间时间间隔类型 (3) | 
| GEOGRAPHY(srid) | 地理类型 | org.apache.spark.unsafe.type.GeographyVal | 地理类型 | 
| GEOMETRY(srid) | GeometryType | org.apache.spark.unsafe.type.GeometryVal | GeometryType | 
| 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 | |
| VARIANT | VariantType | org.apache.spark.unsafe.type.VariantVal | VariantType | 
| OBJECT | 不支持 | 不支持 | 不支持 | 
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 | 
| 年-月区间 | YearMonthIntervalType | java.time.Period | 年月间隔类型 (3) | 
| 白天时间间隔 | DayTimeIntervalType | java.time.Duration | 日间时间间隔类型 (3) | 
| GEOGRAPHY(srid) | 地理类型 | org.apache.spark.unsafe.type.GeographyVal | 地理类型 | 
| GEOMETRY(srid) | GeometryType | org.apache.spark.unsafe.type.GeometryVal | GeometryType | 
| 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 | |
| VARIANT | VariantType | org.apache.spark.unsafe.type.VariantVal | VariantType | 
| OBJECT | 不支持 | 不支持 | 不支持 | 
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 | 字符串 | 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() | 
| 年-月区间 | YearMonthIntervalType | 不支持 | 不支持 | 
| 白天时间间隔 | DayTimeIntervalType | datetime.timedelta | 日间时间间隔类型 (3) | 
| GEOGRAPHY(srid) | 地理类型 | GeographyVal | GeographyType() | 
| GEOMETRY(srid) | GeometryType | GeometryVal | GeometryType() | 
| 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) | |
| VARIANT | VariantType | VariantVal | VariantType() | 
| OBJECT | 不支持 | 不支持 | 不支持 | 
R
| SQL 类型 | 数据类型 | 值类型 | 用于访问或创建数据类型的 API | 
|---|---|---|---|
| TINYINT | ByteType | integer (1) | 'byte' | 
| SMALLINT | ShortType | integer (1) | 'short' | 
| INT | IntegerType | 整数 | 'integer' | 
| BIGINT | LongType | integer (1) | 'long' | 
| FLOAT | FloatType | numeric (1) | 'float' | 
| DOUBLE | DoubleType | numeric | 'double' | 
| DECIMAL(p,s) | DecimalType | 不支持 | 不支持 | 
| STRING | StringType | 字符 | “字符串” | 
| BINARY | BinaryType | raw | 'binary' | 
| BOOLEAN | BooleanType | 逻辑 | 'bool' | 
| TIMESTAMP | TimestampType | POSIXct | 'timestamp' | 
| TIMESTAMP_NTZ | TimestampNTZType | datetime.datetime | TimestampNTZType() | 
| DATE | DateType | 日期 | 'date' | 
| 年-月区间 | YearMonthIntervalType | 不支持 | 不支持 | 
| 白天时间间隔 | DayTimeIntervalType | 不支持 | 不支持 | 
| GEOGRAPHY(srid) | 不支持 | 不支持 | 不支持 | 
| GEOMETRY(srid) | 不支持 | 不支持 | 不支持 | 
| 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 | 具名列表 | list(type='struct', fields=fields)。 字段是 StructField 的序列。 (4) | 
| StructField | 此字段的数据类型的值类型(例如,数据类型为 IntegerType 的 StructField 的 integer) | list(name=name, type=dataType, nullable=[nullable]) (4) | |
| VARIANT | 不支持 | 不支持 | 不支持 | 
| OBJECT | 不支持 | 不支持 | 不支持 | 
(1) 数字在运行时转换为域。 请确保数字在范围内。
(2) 可选值默认值为 。
(3) 间隔类型
- YearMonthIntervalType([startField,] endField):表示一个年-月间隔,该间隔由以下字段的一个连续子集组成:- startField是最左侧的字段,- endField是该类型最右侧的字段。- startField和- endField的有效值为- 0(MONTH)和- 1(YEAR)。
- DayTimeIntervalType([startField,] endField):表示一个日期-时间间隔,该间隔由以下字段的一个连续子集组成:- startField是最左侧的字段,- endField是该类型最右侧的字段。- startField和- endField的有效值为- 0(DAY)、- 1(HOUR)、- 2(MINUTE)和- 3(SECOND)。
              (4)StructType
- 
              StructType(fields)表示结构由StructField(字段)的序列、列表或数组描述的值。 不允许使用名称相同的两个字段。
- 
              StructField(name, dataType, nullable)表示StructType中的字段。 字段的名称由name指示。 字段的数据类型由 dataType 指示。nullable指示这些字段的值是否可以具有null值。 这是默认值。