Tipos de dados do buffer de protocolo e do Arrow compatíveis

Este documento descreve os tipos de dados de buffer de protocolo e Arrow compatíveis para cada tipo de dados do BigQuery. Antes de ler este documento, leia Visão geral da API BigQuery Storage Write.

Tipos de dados de buffer de protocolo compatíveis

A tabela a seguir mostra os tipos de dados compatíveis 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 (recomendável), 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 TIMEliteral.

TIMESTAMP int64 (recomendável), 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 literal INTERVAL.

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 compatíveis

A tabela a seguir mostra os tipos de dados compatíveis com o 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 compatíveis
BOOL Boolean
BYTES Binary
DATE Date unit = Day
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 em {8, 16, 32, 64}

is_signed = false

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

timezone = UTC

INTERVAL Interval unidade em {YEAR_MONTH, DAY_TIME, MONTH_DAY_NANO}
Utf8
RANGE<T> Struct

A estrutura do Arrow precisa ter dois subcampos chamados start e end.

Para a coluna RANGE<DATE>, os campos precisam ser Tipo de seta Date com unit=Day.

Para a coluna RANGE<DATETIME>, os campos precisam ser o tipo Arrow Timestamp 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