支持的协议缓冲区和 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 unit = 天
Stringint32
DATETIME Timestamp unit = MICROSECONDS

时区为空

FLOAT FloatingPoint 精度为 {SINGLE, DOUBLE}
GEOGRAPHY Utf8

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

INTEGER int bitWidth 应为 {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> 列,字段必须为箭头类型 Date,且包含 unit=Day

对于 RANGE<DATETIME> 列,字段必须为 Arrow 类型 Timestampunit=MICROSECONDS,不含时区。

对于 RANGE<TIMESTAMP>,字段必须是箭头类型 Timestamp,且包含 unit=MICROSECONDStimezone=UTC

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

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