【发布时间】:2022-10-24 16:03:53
【问题描述】:
我正在使用服务帐户使用 java SDK 使用大查询存储 API 将数据写入大查询,我看到以下错误。我是否需要为服务帐户提供任何其他角色?
错误:00:44:38 |错误:com.google.api.gax.rpc.PermissionDeniedException:io.grpc.StatusRuntimeException:PERMISSION_DENIED:请求的身份验证范围不足。
服务帐号的当前角色:BigQuery 管理员、BigQuery 数据所有者、BigQuery 数据编辑者
代码sn-p:
Map<String, Object> metadata = new HashMap<>();
metadata.put("table_name", "MetaData");
metadata.put("timestamp", Instant.now().toString());
metadata.put("is_processed", false);
JSONObject jsonObject = new JSONObject(metadata);
TableName parentTable = TableName.of("test", "test", "MetaData");
WriteStream stream = WriteStream.newBuilder().setType(WriteStream.Type.COMMITTED).build();
CreateWriteStreamRequest createWriteStreamRequest =
CreateWriteStreamRequest.newBuilder()
.setParent(parentTable.toString())
.setWriteStream(stream)
.build();
WriteStream writeStream = bigQueryWriteClient.createWriteStream(createWriteStreamRequest);
// Use the JSON stream writer to send records in JSON format.
// For more information about JsonStreamWriter, see:
// https://googleapis.dev/java/google-cloud-bigquerystorage/latest/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.html
JsonStreamWriter streamWriter = JsonStreamWriter.newBuilder(writeStream.getName(), writeStream.getTableSchema()).build();
JSONArray arr = new JSONArray();
arr.put(jsonObject);
// Append asynchronously for increased throughput.
ApiFuture<AppendRowsResponse> future = streamWriter.append(arr, 1);
ApiFutures.addCallback(
future, new AppendCompleteCallback(), MoreExecutors.directExecutor());
【问题讨论】:
-
您是否访问了访问 Google Workspace 文档(驱动器或 Google 工作表)的联合表
-
我没有得到你@guillaumeblaquiere
-
您只有 BigQuery 原生表吗?
-
是的,我们只有本地表 @guillaumeblaquiere
-
您可以参考这个doc 在您的文件中加载服务帐户凭据吗?让我知道它是否有帮助?
标签: google-cloud-platform google-bigquery