支持的协议缓冲区和 Arrow 数据类型

本文档介绍了每种 BigQuery 数据类型支持的协议缓冲区和 Arrow 数据类型。在阅读本文档之前,请先阅读 BigQuery Storage Write API 概览

支持的协议缓冲区数据类型

下表显示了协议缓冲区中支持的数据类型以及 BigQuery 中对应的输入格式:

BigQuery 数据类型 支持的协议缓冲区类型
BOOL boolint32int64uint32uint64google.protobuf.BoolValue
BYTES bytesstringgoogle.protobuf.BytesValue
DATE int32(首选)、int64string

该值是自 Unix 计时原点(1970-01-01)开始计算的天数。有效范围在 -719162 (0001-01-01) 至 2932896 (9999-12-31) 之间。

DATETIMETIME string

该值必须是 DATETIMETIME 字面量。

int64

使用 CivilTimeEncoder执行转换。

FLOAT doublefloatgoogle.protobuf.DoubleValuegoogle.protobuf.FloatValue
GEOGRAPHY string

该值是 WKT 或 GeoJson 格式的几何图形。

INTEGER int32int64uint32enumgoogle.protobuf.Int32Valuegoogle.protobuf.Int64Valuegoogle.protobuf.UInt32Value
JSON string
NUMERICBIGNUMERIC int32int64uint32uint64doublefloatstring
bytesgoogle.protobuf.BytesValue

使用 BigDecimalByteStringEncoder执行转换。

STRING stringenumgoogle.protobuf.StringValue
TIME string

该值必须是 TIME 字面量

TIMESTAMP int64(首选)、int32uint32google.protobuf.Timestamp

该值是自 Unix 计时原点(1970-01-01)开始计算的毫秒数。

INTERVAL string, google.protobuf.Duration

字符串值必须是 INTERVAL 字面量

RANGE<T> message

proto 中包含两个字段(startend)的嵌套消息类型,这两个字段必须采用与 BigQuery 数据类型 T 对应的相同受支持协议缓冲区类型。T 必须是 DATEDATETIMETIMESTAMP 中的一个。如果某个字段(startend)未在 proto 消息中进行设置,它表示无界限边界。在以下示例中,f_range_date 表示表中的 RANGE 列。由于 end 字段未在 proto 消息中进行设置,因此此范围的结束边界是无界限的。

{
  f_range_date: {
    start: 1
  }
}
REPEATED FIELD array

proto 中的数组类型对应于 BigQuery 中的重复字段。

RECORD message

proto 中的嵌套消息类型对应于 BigQuery 中的记录字段。

支持的 Apache Arrow 数据类型

下表显示了 Apache Arrow 中支持的数据类型以及 BigQuery 中对应的输入格式。

BigQuery 数据类型 支持的 Apache Arrow 类型 支持的类型形参
BOOL Boolean
BYTES Binary
DATE Date 单位 = 天
Stringint32
DATETIME Timestamp unit = MICROSECONDS

时区为空

FLOAT FloatingPoint {SINGLE, DOUBLE} 中的精确度
GEOGRAPHY Utf8

该值是 WKT 或 GeoJson 格式的几何图形。

INTEGER int bitWidth in {8, 16, 32, 64}

is_signed = false

JSON Utf8
NUMERIC Decimal128 您可以提供精度或标度小于 BigQuery 支持的范围的任何 NUMERIC。
BIGNUMERIC Decimal256 您可以提供任何精度或小数位数小于 BigQuery 支持的范围的 BIGNUMERIC。
STRING Utf8
TIMESTAMP Timestamp unit= MICROSECONDS

timezone = UTC

INTERVAL Interval {YEAR_MONTH, DAY_TIME, MONTH_DAY_NANO} 中的单位
Utf8
RANGE<T> Struct

Arrow 结构必须具有两个名为 startend 的子字段。

对于 RANGE<DATE> 列,字段必须是 Arrow 类型 Date,且具有 unit=Day

对于 RANGE<DATETIME> 列,字段必须是 Arrow 类型 Timestamp,且具有 unit=MICROSECONDS,但不含时区。

对于 RANGE<TIMESTAMP>,字段必须是 Arrow 类型 Timestamp,且具有 unit=MICROSECONDStimezone=UTC

startend 字段中的任何 NULL 值都将被视为 UNBOUNDED

REPEATED FIELD List NULL 值必须以空列表表示。
RECORD Struct