Supported protocol buffer and Arrow data types
This document describes the supported protocol buffer and Arrow data types for each respective BigQuery data type. Before reading this document, read Overview of the BigQuery Storage Write API.
Supported protocol buffer data types
The following table shows the supported data types in protocol buffers and the corresponding input format in BigQuery:
BigQuery data type | Supported protocol buffer types |
---|---|
BOOL |
bool , int32 , int64 ,
uint32 , uint64 , google.protobuf.BoolValue |
BYTES |
bytes , string , google.protobuf.BytesValue |
DATE |
int32 (preferred), int64 , string
The value is the number of days since the Unix epoch (1970-01-01). The
valid range is |
DATETIME , TIME |
string
|
int64
Use the
|
|
FLOAT |
double , float , google.protobuf.DoubleValue , google.protobuf.FloatValue |
GEOGRAPHY |
string
The value is a geometry in either WKT or GeoJson format. |
INTEGER |
int32 , int64 , uint32 ,
enum , google.protobuf.Int32Value ,
google.protobuf.Int64Value ,
google.protobuf.UInt32Value |
JSON |
string |
NUMERIC , BIGNUMERIC |
int32 , int64 , uint32 ,
uint64 , double , float ,
string |
bytes , google.protobuf.BytesValue Use the
|
|
STRING |
string , enum , google.protobuf.StringValue |
TIME |
string
The value must be a
|
TIMESTAMP |
int64 (preferred), int32 ,
uint32 , google.protobuf.Timestamp
The value is given in microseconds since the Unix epoch (1970-01-01). |
INTERVAL |
string , google.protobuf.Duration
The string value must be an
|
RANGE<T> |
message
A nested message type in the proto with two fields,
|
REPEATED FIELD |
array
An array type in the proto corresponds to a repeated field in BigQuery. |
RECORD |
message
A nested message type in the proto corresponds to a record field in BigQuery. |
Supported Apache Arrow data types
The following table shows the supported data types in Apache Arrow and the corresponding input format in BigQuery.
BigQuery data type | Supported Apache Arrow types | Supported type parameters |
---|---|---|
BOOL |
Boolean |
|
BYTES |
Binary |
|
DATE |
Date |
unit = Day |
String , int32 |
||
DATETIME |
Timestamp |
unit = MICROSECONDS
timezone is empty |
FLOAT |
FloatingPoint |
Precision in {SINGLE, DOUBLE} |
GEOGRAPHY |
Utf8
The value is a geometry in either WKT or GeoJson format. |
|
INTEGER |
int |
bitWidth in {8, 16, 32, 64}
is_signed = false |
JSON |
Utf8 |
|
NUMERIC |
Decimal128 |
You can provide a NUMERIC that has any precision or scale that's smaller than the BigQuery supported range. |
BIGNUMERIC |
Decimal256 |
You can provide a BIGNUMERIC that has any precision or scale that's smaller than the BigQuery supported range. |
STRING |
Utf8 |
|
TIMESTAMP |
Timestamp |
unit= MICROSECONDS
timezone = UTC |
INTERVAL |
Interval |
unit in {YEAR_MONTH, DAY_TIME, MONTH_DAY_NANO} |
Utf8 |
||
RANGE<T> |
Struct
The Arrow Struct must have two subfields named For the For the For the A |
|
REPEATED FIELD |
List |
A NULL value must be represented by an empty list. |
RECORD |
Struct |