Java中的大查询插入所有方法都没有反映表

时间:2018-06-08 16:25:49

标签: java google-cloud-platform google-bigquery java-api

我正在尝试使用方法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。附加架构详细信息如下 -

enter image description here

我可能会遗漏任何其他问题吗?

============================================= /> 编辑部分 -
有人向我指出,流数据不会反映在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

但是当我查询我的桌子时,我只能看到两行。

enter image description here

为什么它只显示2行而不是6?

0 个答案:

没有答案