Google bigquery BigQuery:插入后使用标准SQL not UPDATE行更新语句

Google bigquery BigQuery:插入后使用标准SQL not UPDATE行更新语句,google-bigquery,Google Bigquery,我在使用java客户端对BigQuery进行INSERT-UPDATE时遇到了一个奇怪的问题,我的程序从redis队列中读取SQL语句,并创建将这些语句注入BigQuery的线程,INSERT语句工作正常,但当我想更新之前插入的同一行时,该语句不更新任何内容。INSERT和UPDATE语句位于不同的线程中,INSERT语句在更新之前运行20秒。我可以在BigQuery控制台中看到插入的行,但是UDPATE没有返回受影响的行,也没有返回表中的更改 这是我向BigQuery注入de语句的代码:

我在使用java客户端对BigQuery进行INSERT-UPDATE时遇到了一个奇怪的问题,我的程序从redis队列中读取SQL语句,并创建将这些语句注入BigQuery的线程,INSERT语句工作正常,但当我想更新之前插入的同一行时,该语句不更新任何内容。INSERT和UPDATE语句位于不同的线程中,INSERT语句在更新之前运行20秒。我可以在BigQuery控制台中看到插入的行,但是UDPATE没有返回受影响的行,也没有返回表中的更改

这是我向BigQuery注入de语句的代码:

    @Override
    public void processMessage(QueueMsg msg) {

        ObjectMapper objectMapper = new ObjectMapper();

        JsonObject queueValue = msg.getValue();

        try {

            JsonNode jsonValue = objectMapper.readTree(queueValue.toString());

            BigQueryStandardSQL bqSQL = objectMapper.treeToValue(jsonValue, BigQueryStandardSQL.class);
            String sqlStatement = bqSQL.getStatement().replace("##schema##", this.bigquerySchema);

            QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(sqlStatement).build();
            BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

            LOGGER.info("Injecting SQL BigQuery statement with ##schema## replaced... : {}", sqlStatement);            
            TableResult dmlResult = bigquery.query(queryConfig);
            long rowsAffected = dmlResult.getTotalRows();
            LOGGER.info("Injected SQL BigQuery statement, rows affected : {}.", rowsAffected);
            if(rowsAffected == 0) {
                LOGGER.info("No affected row for insert/update, reinject for retrying.");
                //Wait 10 seconds before reinject
                Thread.sleep(10000);
                this.retryQueue(msg.getTable(), queueValue, msg.getRetry());
            }
            

        } catch (JsonProcessingException ex) {
            LOGGER.error("JsonProcessingException - Message: {}", ex.toString());
        } catch (InterruptedException ex) {
            LOGGER.error("InterruptedException - Message: {}", ex.toString());
        } catch (BigQueryException ex) {
            BigQueryError bqError = ex.getError();
            String reason = bqError.getReason();
            LOGGER.error("BigQueryException - Error Code: {}, Reason: {}, message: {}", ex.getCode(), reason, ex.getMessage());
            if (!reason.equals("invalidQuery")) {
                this.retryQueue(msg.getTable(), queueValue, msg.getRetry());
            } else {
                LOGGER.warn("BigQuery - reason:invalidQuery not retried.", ex.toString());
            }

        }

    }
            
我需要在代码中添加一些东西,可能是在QueryJobConfiguration中? 感谢您的帮助