BigQuery BigQueryException更新或删除

时间:2017-08-28 17:15:31

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

我需要创建一个与Bigquery一起使用的存储库,所以当我尝试进行更新或删除时,我会采用以下异常。

  

表上不支持UPDATE或DELETE DML语句   使用流缓冲区

此异常仅在我向表中插入内容后发生,并且即使没有插入任何内容,流式缓冲区也会长时间保持打开状态。 是否可以终止它?

更新代码

String query = "UPDATE " + DATASET_NAME + ".Report"
                + " type = 'AAAAAA'"
                + " WHERE id = 1";

QueryRequest queryRequest =
                QueryRequest
                        .newBuilder(query)
                        .setUseLegacySql(false)
                        .build();

插入代码

Map<String, Object> content = parsePojoToMap(pojo);
        content.put("id", id);
InsertAllRequest.RowToInsert row =
                InsertAllRequest.RowToInsert
                        .of(id, content);
InsertAllRequest insertRequest =
                InsertAllRequest
                        .newBuilder(DATASET_NAME, getType().getSimpleName())
                        .addRow(row)
                        .build();
InsertAllResponse response = getInstance().insertAll(insertRequest);

1 个答案:

答案 0 :(得分:0)

在具有活动流缓冲区的表上不允许使用DML语句。当一段时间内没有更多数据流传输时,缓冲区将被分离并允许DML。在最后一次流式插入后,通常需要90分钟才能分离流式缓冲区。不幸的是,我没有看到终止它的方法。如果进行批量操作,则没有流缓冲区,您可以立即执行DML操作。