Tipos de dados de buffers de protocolo e Arrow suportados

Este documento descreve os tipos de dados de buffers de protocolo e Arrow suportados para cada tipo de dados do BigQuery respetivo. Antes de ler este documento, leia o artigo Vista geral da API BigQuery Storage Write.

Tipos de dados de buffer de protocolo suportados

A tabela seguinte mostra os tipos de dados suportados nos buffers de protocolo e o formato de entrada correspondente no BigQuery:

Tipo de dados do BigQuery Tipos de buffers de protocolo suportados
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 é -719162 (0001-01-01) a 2932896 (9999-12-31).

DATETIME, TIME string

O valor tem de ser um literal DATETIME ou TIME.

int64

Use a classe CivilTimeEncoder para fazer 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 fazer a conversão.

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

O valor tem de ser um literal TIME.

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

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

INTERVAL string, google.protobuf.Duration

O valor de string tem de ser um literal INTERVAL.

RANGE<T> message

Um tipo de mensagem aninhado no proto com dois campos, start e end, em que ambos os campos têm de ser do mesmo tipo de buffer de protocolo suportado que corresponde a um tipo de dados do BigQuery T. T tem de ser um dos seguintes: DATE, DATETIME ou TIMESTAMP. Se um campo (start ou end) não estiver definido na mensagem proto, representa um limite ilimitado. No exemplo seguinte, f_range_date representa uma coluna RANGE numa tabela. Uma vez que o campo end não está definido na mensagem proto, o limite final deste intervalo não está definido.

{
  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 registo no BigQuery.

Tipos de dados do Apache Arrow suportados

A tabela seguinte mostra os tipos de dados suportados no Apache Arrow e o formato de entrada correspondente no BigQuery.

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

O fuso horário está vazio

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 Pode fornecer um NUMERIC que tenha qualquer precisão ou escala inferior ao intervalo suportado pelo BigQuery.
BIGNUMERIC Decimal256 Pode fornecer um BIGNUMERIC com qualquer precisão ou escala que seja inferior ao intervalo suportado pelo BigQuery.
STRING Utf8
TIMESTAMP Timestamp unit= MICROSECONDS

timezone = UTC

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

A Struct Arrow tem de ter dois subcampos com os nomes start e end.

Para a coluna RANGE<DATE>, os campos têm de ser do tipo seta Date com unit=Day.

Para a coluna RANGE<DATETIME>, os campos têm de ser do tipo seta Timestamp com unit=MICROSECONDS, sem o fuso horário.

Para o RANGE<TIMESTAMP>, os campos têm de ser do Tipo de seta Timestamp com unit=MICROSECONDS, timezone=UTC.

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

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