Я думаю, что вы смешали два разных типа ресурсов в соответствии с Ссылка API .Я имею в виду Jobs и Tabledata .
Jobs выполняет загрузку , где метод insertAll из Tabledata, не :
Потоки данных в BigQuery по одной записи за раз без необходимости запуска задания загрузки
Я вижу, что документы Google могут быть неверно истолкованы, как указано выше, потому что Введение в загрузкуДанные в BigQuery ссылаются на потоковые вставки (insertAll).Это выглядит так:
Вы можете загрузить данные:
... Вставляя отдельные записи, используя потоковые вставки ...
Где потоковые вставки перенаправляют на Потоковые данные в BigQuery , который говорит о потоковой передаче вместо загрузки:
Вместо использования задания для загрузки данных в BigQuery, вы можете выбратьпотоковая передача ваших данных в BigQuery по одной записи за раз с использованием метода tabledata (). insertAll ().
Последняя информация о потоковых вставках (insertAll) :
Убедитесь, что у вас есть доступ на запись к набору данных, содержащему вашу таблицу назначения. Таблица должна существовать до того, как вы начнете записывать в нее данные, если только вы не используете таблицы шаблонов .Для получения дополнительной информации о таблицах шаблонов см. Создание таблиц автоматически с использованием таблиц шаблонов.
Если вы все еще хотите загрузить вместо потока таблицу шаблонов и одновременно создать таблицу, используйте Jobs и загрузить тип задания (или другой тип при необходимости)
Пример кода из моего вопроса :
Insert insert = bigquery.jobs().insert(projectId,
new Job().setConfiguration(
new JobConfiguration().setLoad(
new JobConfigurationLoad()
.setSourceFormat("NEWLINE_DELIMITED_JSON")
.setDestinationTable(
new TableReference()
.setProjectId(projectId)
.setDatasetId(dataSetId)
.setTableId(tableId)
)
.setCreateDisposition("CREATE_IF_NEEDED")
.setWriteDisposition(writeDisposition)
.setSourceUris(Collections.singletonList(sourceUri))
.setAutodetect(true)
)
));
Job myInsertJob = insert.execute();