Tipos de dados do buffer de protocolo e do Arrow com suporte

Este documento descreve os tipos de dados do buffer de protocolo e do Arrow com suporte para cada tipo de dados do BigQuery. Antes de ler este documento, leia Visão geral da API BigQuery Storage Write (gRPC).

Tipos de dados do buffer de protocolo com suporte

A tabela a seguir mostra os tipos de dados com suporte em buffers de protocolo e o formato de entrada correspondente no BigQuery:

Tipo de dados do BigQuery Tipos de buffer de protocolo compatíveis
BOOL bool, int32, int64, uint32, uint64, google.protobuf.BoolValue
BYTES bytes, string, google.protobuf.BytesValue
DATE int32 (preferencial), int64, string

O valor é o número de dias desde a época Unix (1970-01-01). O intervalo válido é de -719162 (0001-01-01) a 2932896 (9999-12-31).

DATETIME, TIME string

O valor precisa ser um literal DATETIME ou TIME.

int64

Use a classe CivilTimeEncoder para realizar a conversão.

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

O valor é uma geometria no formato WKT ou 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

Use a classe BigDecimalByteStringEncoder para realizar a conversão.

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

O valor precisa ser um TIME literal.

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

O valor é fornecido em microssegundos desde a época Unix (1970-01-01).

INTERVAL string, google.protobuf.Duration

O valor da string precisa ser um INTERVAL literal.

RANGE<T> message

Um tipo de mensagem aninhado no proto com dois campos, start e end, em que os dois campos precisam ser do mesmo tipo de buffer de protocolo compatível que corresponde a um tipo de dados do BigQuery T. T precisa ser DATE, DATETIME ou TIMESTAMP. Se um campo (start ou end) não for definido na mensagem proto, ele vai representar um limite ilimitado. No exemplo a seguir, f_range_date representa uma coluna RANGE em uma tabela. Como o campo end não está definido na mensagem proto, o limite final desse intervalo é ilimitado.

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

Um tipo de matriz no proto corresponde a um campo repetido no BigQuery.

RECORD message

Um tipo de mensagem aninhada no proto corresponde a um campo de registro no BigQuery.

Tipos de dados do Apache Arrow com suporte

A tabela a seguir mostra os tipos de dados com suporte no Apache Arrow e o formato de entrada correspondente no BigQuery.

Tipo de dados do BigQuery Tipos do Apache Arrow com suporte Parâmetros de tipo com suporte
BOOL Boolean
BYTES Binary
DATE Date unit = Day
String, int32
DATETIME Timestamp unit = MICROSECONDS

timezone is empty

FLOAT FloatingPoint Precisão em {SINGLE, DOUBLE}
GEOGRAPHY Utf8

O valor é uma geometria no formato WKT ou GeoJson.

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

is_signed = false

JSON Utf8
NUMERIC Decimal128 É possível fornecer um NUMERIC que tenha qualquer precisão ou escala menor que o intervalo com suporte do BigQuery.
BIGNUMERIC Decimal256 É possível fornecer um BIGNUMERIC que tenha qualquer precisão ou escala menor que o intervalo com suporte do BigQuery.
STRING Utf8
TIMESTAMP Timestamp unit= MICROSECONDS

timezone = UTC

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

O Struct do Arrow precisa ter dois subcampos chamados start e end.

Para a coluna RANGE<DATE>, os campos precisam ser do tipo Date do Arrow com unit=Day.

Para a coluna RANGE<DATETIME>, os campos precisam ser do tipo Timestamp do Arrow com unit=MICROSECONDS, sem o fuso horário.

Para o RANGE<TIMESTAMP>, os campos precisam ser do tipo Timestamp do Arrow com unit=MICROSECONDS, timezone=UTC.

Um valor NULL em qualquer um dos campos start e end será tratado como UNBOUNDED.

REPEATED FIELD List Um valor NULL precisa ser representado por uma lista vazia.
RECORD Struct