我正在尝试使用方法insertAll
将数据插入到Big Query表中。
这就是我的插入方法代码的样子 -
public void insertIntoTable(String datasetName, String tableName) {
TableId tableId = TableId.of(datasetName, tableName);
String fieldName = "testField";
Map<String, Object> rowContent = new HashMap<>();
rowContent.put(fieldName, "testVal");
InsertAllResponse response = bigquery.insertAll(InsertAllRequest.newBuilder(tableId).addRow("rowId", rowContent).build());
if (response.hasErrors()) {
for (Map.Entry<Long, List<BigQueryError>> entry : response.getInsertErrors().entrySet()) {
System.out.println(entry.getValue().toString());
}
}
}
虽然没有抛出任何错误,但数据仍未插入我的表格中。
根据访问控制文件:
https://cloud.google.com/bigquery/docs/access-control
要使用insertAll
方法,用户需要bigquery.tables.updateData
权限。要使用该权限,用户需要拥有bigquery.dataEditor
角色,我已经拥有。
权限没有问题,因为在另一种方法中我正在创建一个表,并且在Big Query中成功创建了表。
tableName和datasetName也是正确的,我在调试模式下对它进行了测试。
我能想到的另一个问题是类型不匹配问题。但事实并非如此,因为我检查了它,类型只是String。附加架构详细信息如下 -
我可能会遗漏任何其他问题吗?
============================================= />
编辑部分 -
有人向我指出,流数据不会反映在UI中,用于查看我们必须查询表的数据。
现在我正面临一个新问题。
我执行了上述功能6次,每次都有不同的值。基本上我只改变了这一行 -
rowContent.put(fieldName, "testVal");
我第一次执行该方法时,插入值为testVal
。
当我执行该方法时,另外五次修改了这行代码 -
执行1:rowContent.put(fieldName, "testVal1");
执行2:rowContent.put(fieldName, "testVal2");
执行3:rowContent.put(fieldName, "testVal3");
执行4:rowContent.put(fieldName, "testVal4");
执行5:rowContent.put(fieldName, "testVal5");
理想情况下,在我的表中应该有6行值 -
testVal
testVal1
testVal2
testVal3
testVal4
testVal5
但是当我查询我的桌子时,我只能看到两行。
为什么它只显示2行而不是6?