Transmite datos con la API de Storage Write
En este documento, se describe cómo usar la API de BigQuery Storage Write para transmitir datos a BigQuery.
En situaciones de transmisión, los datos llegan de forma continua y deberían estar disponibles para las lecturas con una latencia mínima. Cuando uses la API de BigQuery Storage Write para las cargas de trabajo de transmisión, considera qué garantías necesitas:
- Si tu aplicación solo necesita la semántica de al menos una vez, usa la transmisión predeterminada.
- Si necesitas una semántica de tipo "exactamente una vez", crea una o más transmisiones en el tipo de confirmación y usa desplazamientos de transmisión para garantizar escrituras de tipo "exactamente una vez".
En el tipo de confirmación, los datos escritos en la transmisión están disponibles para consultas en cuanto el servidor confirma la solicitud de escritura. La transmisión predeterminada también usa el tipo de confirmación, pero no proporciona garantías del tipo "exactamente una vez".
Usa la transmisión predeterminada para obtener una semántica de al menos una vez
Si tu aplicación puede aceptar la posibilidad de que aparezcan registros duplicados en la tabla de destino, recomendamos usar la transmisión predeterminada para situaciones de transmisión.
En el siguiente código, se muestra cómo escribir datos en la transmisión predeterminada:
Java
Para aprender a instalar y usar la biblioteca cliente de BigQuery, consulta las bibliotecas cliente de BigQuery. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Node.js
Para aprender a instalar y usar la biblioteca cliente de BigQuery, consulta las bibliotecas cliente de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Usa multiplexación
Habilita la multiplexación en el nivel de escritor de transmisión solo para la transmisión predeterminada. Para habilitar la multiplexación en Java, llama al método setEnableConnectionPool
cuando construyas un objeto JsonStreamWriter
o StreamWriter
:
// One possible way for constructing StreamWriter StreamWriter.newBuilder(streamName) .setWriterSchema(protoSchema) .setEnableConnectionPool(true) .build(); // One possible way for constructing JsonStreamWriter JsonStreamWriter.newBuilder(tableName, bigqueryClient) .setEnableConnectionPool(true) .build();
Para habilitar la multiplexación en Go, consulta Uso compartido de la conexión (multiplexación).
Usa el modo de confirmación para la semántica del tipo "exactamente una vez"
Si necesitas una semántica de escritura del tipo "exactamente una vez", crea una transmisión de escritura en tipo de confirmación. En el tipo de confirmación, los registros están disponibles para consultas tan pronto como el cliente recibe la confirmación desde el backend.
El tipo de confirmación proporciona una entrega de tipo "exactamente única" dentro de una transmisión mediante el uso de compensaciones de registro. Mediante el uso de compensación de registro, la aplicación especifica la siguiente compensación de anexo en cada llamada a AppendRows
. La operación de escritura solo se realiza si el valor de compensación coincide con la siguiente compensación de anexo. Si quieres obtener más información, consulta Administra compensaciones de transmisión para lograr una semántica del tipo "exactamente una vez".
Si no proporcionas una compensación, los registros se agregan al final actual de la transmisión. En ese caso, si una solicitud anexada muestra un error, volver a intentar la operación podría hacer que el registro aparezca más de una vez en la transmisión.
Para usar el tipo de confirmación, sigue los siguientes pasos:
Java
- Llama a
CreateWriteStream
para crear una o más transmisiones en del tipo de confirmación. - Para cada transmisión, llama a
AppendRows
en un bucle a fin de escribir lotes de registros. - Llama a
FinalizeWriteStream
para cada transmisión a fin de liberarla. Después de llamar a este método, no puedes escribir más filas en la transmisión. Este paso es opcional en el tipo de confirmación, pero ayuda a evitar que se exceda el límite de las transmisiones activas. Para obtener más información, consulta Limita la velocidad de creación de transmisiones.
Node.js
- Llama a
createWriteStreamFullResponse
para crear una o más transmisiones en del tipo de confirmación. - Para cada transmisión, llama a
appendRows
en un bucle a fin de escribir lotes de registros. - Llama a
finalize
para cada transmisión a fin de liberarla. Después de llamar a este método, no puedes escribir más filas en la transmisión. Este paso es opcional en el tipo de confirmación, pero ayuda a evitar que se exceda el límite de las transmisiones activas. Para obtener más información, consulta Limita la velocidad de creación de transmisiones.
No puedes borrar una transmisión de forma explícita. Las transmisiones siguen el tiempo de actividad (TTL) definido por el sistema:
- Una transmisión confirmada tiene un TTL de tres días si no hay tráfico en la transmisión.
- De forma predeterminada, una transmisión almacenada en búfer tiene un TTL de siete días si no hay tráfico en la transmisión.
En el siguiente código, se muestra cómo usar el tipo de confirmación.
Java
Para aprender a instalar y usar la biblioteca cliente de BigQuery, consulta las bibliotecas cliente de BigQuery. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Node.js
Para aprender a instalar y usar la biblioteca cliente de BigQuery, consulta las bibliotecas cliente de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.