Transmitir dados usando a API StorageWrite
Neste documento, descrevemos como usar a API BigQuery Storage Write para fazer streaming de dados para o BigQuery.
Em cenários de streaming, os dados chegam continuamente e precisam estar disponíveis para leituras com latência mínima. Ao usar a API BigQuery Storage write para cargas de trabalho de streaming, pense em quais garantias são necessárias:
- Se o app só precisa da semântica do tipo "pelo menos uma vez", use o stream padrão.
- Se você precisar de semântica exatamente uma vez, crie um ou mais streams no modo confirmado e use deslocamentos de stream para garantir gravações exatamente uma vez.
No modo confirmado, os dados gravados no stream ficam disponíveis para consulta assim que o servidor reconhece a solicitação de gravação. O stream padrão também usa o modo confirmado, mas não oferece garantias exatas.
Usar o fluxo padrão para semânticas do tipo "pelo menos uma vez"
Se o aplicativo puder aceitar a possibilidade de registros duplicados aparecerem na tabela de destino, recomendamos o uso do stream padrão para cenários de streaming.
O código a seguir mostra como gravar dados no stream padrão:
Java
Para saber como instalar e usar a biblioteca de cliente do BigQuery, consulte Bibliotecas do cliente do BigQuery. Para mais informações, consulte a documentação de referência da API BigQuery Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Para saber como instalar e usar a biblioteca de cliente do BigQuery, consulte Bibliotecas do cliente do BigQuery.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Usar multiplexação
Você ativa a multiplexação no nível do gravador de stream apenas para o stream padrão. Para ativar a multiplexação no Java, chame o método setEnableConnectionPool
ao criar um objeto StreamWriter
ou JsonStreamWriter
:
// 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 ativar a multiplexação no Go, consulte Compartilhamento de conexão (multiplexação).
Usar o modo confirmado para a semântica exatamente uma vez
Se você precisar de semântica de gravação única, crie um stream de gravação no modo comprometido. No modo confirmado, os registros estão disponíveis para consulta assim que o cliente recebe a confirmação do back-end.
O modo confirmado fornece uma entrega única uma vez em um stream por meio de deslocamentos de registro. Ao usar deslocamentos de registro, o aplicativo especifica o próximo
deslocamento de anexação em cada chamada para AppendRows
. A operação de gravação só será executada se o valor de ajuste corresponder ao próximo deslocamento de anexação. Para mais
informações, consulte
Gerenciar deslocamentos de stream para conseguir semânticas exatamente uma vez.
Se você não fornecer um deslocamento, os registros serão anexados à extremidade atual do fluxo. Nesse caso, se um pedido de anexo retornar um erro, uma nova tentativa poderá fazer com que o registro apareça mais de uma vez no stream.
Para usar o tipo de compromisso, siga estas etapas:
Java
- Chame
CreateWriteStream
para criar um ou mais streams no modo confirmado. - Para cada stream, chame
AppendRows
em um loop para gravar lotes de registros. - Chame
FinalizeWriteStream
para cada stream para liberar o stream. Depois de chamar esse método, não será possível gravar mais linhas no stream. Essa etapa é opcional no modo confirmado, mas ajuda a evitar exceder o limite de fluxos ativos. Para mais informações, consulte Limitar a taxa de criação de stream.
Node.js
- Chame
createWriteStreamFullResponse
para criar um ou mais streams no modo confirmado. - Para cada stream, chame
appendRows
em um loop para gravar lotes de registros. - Chame
finalize
para cada stream para liberar o stream. Depois de chamar esse método, não será possível gravar mais linhas no stream. Essa etapa é opcional no modo confirmado, mas ajuda a evitar exceder o limite de fluxos ativos. Para mais informações, consulte Limitar a taxa de criação de stream.
Não é possível excluir um stream explicitamente. Os streams seguem o time to live (TTL) definido pelo sistema:
- Se não houver tráfego no stream, ele será transmitido por TTL em três dias.
- Por padrão, um stream em buffer tem um TTL de sete dias se não houver tráfego nele.
O código a seguir mostra como usar o modo confirmado.
Java
Para saber como instalar e usar a biblioteca de cliente do BigQuery, consulte Bibliotecas do cliente do BigQuery. Para mais informações, consulte a documentação de referência da API BigQuery Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Node.js
Para saber como instalar e usar a biblioteca de cliente do BigQuery, consulte Bibliotecas do cliente do BigQuery.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.