Tipos de datos de Arrow y búfer de protocolo admitidos

En este documento, se describen los tipos de datos de Arrow y búfer de protocolo admitidos para cada tipo de datos de BigQuery. Antes de leer este documento, consulta la Descripción general de la API de BigQuery Storage Write (gRPC).

Tipos de datos de búfer de protocolo admitidos

En la siguiente tabla, se muestran los tipos de datos admitidos en los búferes de protocolo y el formato de entrada correspondiente en BigQuery:

Tipo de datos de BigQuery Tipos de búfer de protocolo admitidos
BOOL bool, int32, int64, uint32, uint64, google.protobuf.BoolValue
BYTES bytes, string, google.protobuf.BytesValue
DATE int32 (preferido), int64, string

El valor es la cantidad de días transcurridos desde el tiempo Unix (1970-01-01). El rango válido es de -719162 (01-01-0001) a 2932896 (31-12-9999).

DATETIME, TIME string

El valor debe ser DATETIME o un literal de TIME .

int64

Usa la CivilTimeEncoder clase para realizar la conversión.

FLOAT double, float, google.protobuf.DoubleValue, google.protobuf.FloatValue
GEOGRAPHY string

El valor es una geometría en formato WKT o GeoJson.

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

Usa la BigDecimalByteStringEncoder clase para realizar la conversión.

STRING string, enum, google.protobuf.StringValue
TIME string

El valor debe ser un TIME literal.

TIMESTAMP int64 (preferido), int32, uint32, google.protobuf.Timestamp

El valor se proporciona en microsegundos desde el tiempo Unix (1970-01-01).

INTERVAL string, google.protobuf.Duration

El valor de cadena debe ser un INTERVAL literal.

RANGE<T> message

Un tipo de mensaje anidado en el proto con dos campos, start y end, en el que ambos campos deben ser del mismo tipo de búfer de protocolo compatible que corresponde a un tipo de datos de BigQuery T. T debe ser DATE, DATETIME o TIMESTAMP. Si un campo (start o end) no está configurado en el mensaje proto, representa un límite no delimitado. En el siguiente ejemplo, f_range_date representa una columna RANGE en una tabla. Debido a que el campo end no está configurado en el mensaje proto, el límite final de este rango es ilimitado.

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

Un tipo de array en el proto corresponde a un campo repetido en BigQuery.

RECORD message

Un tipo de mensaje anidado en el proto corresponde a un campo de registro en BigQuery.

Tipos de datos de Apache Arrow admitidos

En la siguiente tabla, se muestran los tipos de datos admitidos en Apache Arrow y el formato de entrada correspondiente en BigQuery.

Tipo de datos de BigQuery Tipos de Apache Arrow admitidos Parámetros de tipo admitidos
BOOL Boolean
BYTES Binary
DATE Date unit = Day
String, int32
DATETIME Timestamp unit = MICROSECONDS

timezone está vacío

FLOAT FloatingPoint Precisión en {SINGLE, DOUBLE}
GEOGRAPHY Utf8

El valor es una geometría en formato WKT o GeoJson.

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

is_signed = false

JSON Utf8
NUMERIC Decimal128 Puedes proporcionar un NUMERIC que tenga cualquier precisión o escala que sea más pequeña que el rango admitido de BigQuery.
BIGNUMERIC Decimal256 Puedes proporcionar un BIGNUMERIC que tenga cualquier precisión o escala que sea más pequeña que el rango admitido de BigQuery.
STRING Utf8
TIMESTAMP Timestamp unit= MICROSECONDS

timezone = UTC

INTERVAL Interval unit en {YEAR_MONTH, DAY_TIME, MONTH_DAY_NANO}
Utf8
RANGE<T> Struct

La estructura de Arrow debe tener dos subcampos llamados start y end.

Para la columna RANGE<DATE>, los campos deben ser de tipo Arrow Date con unit=Day.

Para la columna RANGE<DATETIME>, los campos deben ser de tipo Arrow Timestamp con unit=MICROSECONDS, sin la zona horaria.

Para RANGE<TIMESTAMP>, los campos deben ser de tipo Arrow Timestamp con unit=MICROSECONDS, timezone=UTC.

Un NULL valor en cualquiera de los start y end campos se tratará como UNBOUNDED.

REPEATED FIELD List Un valor NULL debe representarse con una lista vacía.
RECORD Struct