Formatos de almacenamiento y tipos de datos admitidos

En este documento, se detalla el comportamiento de los tipos de datos y los formatos de almacenamiento cuando se integran Spark y Hive con BigQuery a través del catálogo de entorno de ejecución de Lakehouse.

En particular, este documento proporciona lo siguiente:

  • Formatos de almacenamiento compatibles: Un desglose de compatibilidad de formatos como Parquet, ORC, Avro, CSV y JSON en las fuentes de datos de Hive SerDe y Spark.
  • Asignaciones de tipos de datos: Las reglas de conversión precisas entre los tipos de datos de Spark y BigQuery.

Usa esta página para verificar que los esquemas de tus tablas y los formatos de almacenamiento se alineen con el metastore antes de ejecutar cargas de trabajo o consultar tablas en los motores.

Formatos de almacenamiento compatibles entre Hive y Spark

En las siguientes secciones, se describe la compatibilidad de formatos de almacenamiento y fuentes de datos entre Hive, Spark y BigQuery.

Asignación detallada de formatos de almacenamiento

BigQuery determina el formato de almacenamiento de una tabla en función de la biblioteca input_format, output_format y SerDe en los metadatos. En la siguiente tabla, se asignan estas propiedades al formato de almacenamiento de BigQuery.

Formato de entrada, formato de salida y biblioteca SerDe Formato de almacenamiento de BigQuery
org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
Parquet
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
org.apache.hadoop.hive.ql.io.orc.OrcSerde
ORC
org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat
org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat
org.apache.hadoop.hive.serde2.avro.AvroSerDe
Avro
org.apache.hadoop.mapred.TextInputFormat
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
org.apache.hadoop.hive.serde2.OpenCSVSerde
CSV
org.apache.hadoop.mapred.TextInputFormat
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
org.openx.data.jsonserde.JsonSerDe
JSON
org.apache.hadoop.mapred.TextInputFormat
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
org.apache.hive.hcatalog.data.JsonSerDe
JSON

Compatibilidad con Hive SerDe

En la siguiente tabla, se muestra la compatibilidad de los formatos de tabla de Hive SerDe con BigQuery.

Formato Sintaxis de DDL de Spark SQL Se puede consultar desde BigQuery
Parquet CREATE TABLE ... STORED AS PARQUET
ORC CREATE TABLE ... STORED AS ORC
Avro CREATE TABLE ... STORED AS AVRO
CSV CREATE TABLE ... ROW FORMAT 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
JSON CREATE TABLE ... ROW FORMAT 'org.openx.data.jsonserde.JsonSerDe'

Compatibilidad con fuentes de datos de Spark

En la siguiente tabla, se muestra la compatibilidad de los formatos de tabla de fuentes de datos de Spark con BigQuery.

Las tablas SerDe de CSV y JSON se pueden consultar desde BigQuery. Sin embargo, las tablas de fuentes de datos de Spark de CSV y JSON no lo son.

Formato Sintaxis de DDL de Spark SQL Se puede consultar desde BigQuery
Parquet CREATE TABLE ... USING PARQUET
ORC CREATE TABLE ... USING ORC
Avro CREATE TABLE ... USING AVRO
CSV CREATE TABLE ... USING CSV No
JSON CREATE TABLE ... USING JSON No

Tipos de datos compatibles de Spark a BigQuery

En la siguiente tabla, se asignan los tipos de datos de Spark a los tipos de datos de BigQuery.

Tipo de datos de Spark Tipo de datos de BigQuery
BYTE o TINYINT INT64
SMALLINT o SHORT INT64
INT o INTEGER INT64
BIGINT o LONG INT64
DECIMAL o NUMERIC BIGNUMERIC
FLOAT FLOAT64
DOUBLE FLOAT64
REAL FLOAT64
BOOLEAN BOOL
STRING STRING
VARCHAR STRING
CHAR o CHARACTER STRING
BINARY BYTES
DATE DATE
TIMESTAMP o TIMESTAMP_LTZ TIMESTAMP
ARRAY ARRAY
STRUCT<col_name: type1, ...> STRUCT<col_name: type1, ...>
MAP<key_type, value_type> ARRAY<STRUCT<key: key_type, value: value_type>>
Para habilitar esta función, envía un correo electrónico a biglake-help@google.com. Esto solo es necesario si tus cargas de trabajo usan MAP.

¿Qué sigue?