gpt4 book ai didi

google-bigquery - Java - 一次将一行插入到 google Big Query 中?

转载 作者:行者123 更新时间:2023-12-05 03:05:51 29 4
gpt4 key购买 nike

我正在创建一个应用程序,每次用户点击一篇文章时,我都需要捕获文章数据和用户数据以计算每篇文章的覆盖面并能够对所覆盖的数据进行分析。

我的应用程序在 App Engine 上。

当我查看有关插入 BQ 的文档时,大多数文档都指向作业或流形式的批量插入。

问题:每次启动用户操作时一次插入一行到大查询中甚至是一个好习惯吗?如果是这样,你能给我指点一些 Java 代码来有效地做到这一点吗?

最佳答案

加载作业和 DML 查询的数量有限制(每天 1,000 个),因此您需要使用 streaming inserts对于这种应用。请注意,流式插入不同于从 Java 流加载数据。

TableId tableId = TableId.of(datasetName, tableName);
// Values of the row to insert
Map<String, Object> rowContent = new HashMap<>();
rowContent.put("booleanField", true);
// Bytes are passed in base64
rowContent.put("bytesField", "Cg0NDg0="); // 0xA, 0xD, 0xD, 0xE, 0xD in base64
// Records are passed as a map
Map<String, Object> recordsContent = new HashMap<>();
recordsContent.put("stringField", "Hello, World!");
rowContent.put("recordField", recordsContent);
InsertAllResponse response =
bigquery.insertAll(
InsertAllRequest.newBuilder(tableId)
.addRow("rowId", rowContent)
// More rows can be added in the same RPC by invoking .addRow() on the builder
.build());
if (response.hasErrors()) {
// If any of the insertions failed, this lets you inspect the errors
for (Entry<Long, List<BigQueryError>> entry : response.getInsertErrors().entrySet()) {
// inspect row error
}
}

(来自 https://cloud.google.com/bigquery/streaming-data-into-bigquery#bigquery-stream-data-java 的例子)

请特别注意,插入失败并不总是抛出异常。您还必须检查响应对象是否有错误。

Is it even a good practice to insert into big Query one row at a time every time a user action is initiated ?

是的,将事件流传输到 BigQuery 进行分析是很典型的做法。如果将多个事件缓冲到对 BigQuery 的同一个流式插入请求中,您可以获得更好的性能,但绝对支持一次一行。

关于google-bigquery - Java - 一次将一行插入到 google Big Query 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238620/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com