Я пытаюсь вставить данные в таблицу больших запросов, используя метод insertAll
.
Вот так выглядит мой код метода вставки -
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](https://i.stack.imgur.com/QKmb8.png)
Могут ли быть какие-либо другие проблемы, которые я могу упустить здесь?
=============================================Отредактированная часть -Мне было отмечено, что данные потока не отражаются в пользовательском интерфейсе, для просмотра данных мы должны запросить таблицу.
Теперь я столкнулся с новой проблемой.Я выполнил вышеупомянутую функцию 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 строк со значениями -testValtestVal1testVal2testVal3testVal4testVal5
Но я могу видеть только две строки, когда я запрашиваю мою таблицу.
![enter image description here](https://i.stack.imgur.com/wUGjb.png)
Почему она показывает только 2 строкивместо 6?