[英]How to write query in java to insert data with foreign keys using MySql
[英]Insert data into BigQuery using native Insert query using Java
我使用 JAVA 使用 InsertAll 方法將行插入 BigQuery。 它工作總是很好。 但是當我們嘗試從 JAVA 代碼更新同一行時,出現以下錯誤,
com.google.cloud.bigquery.BigQueryException 表 project123:mydataset.test 上的 UPDATE 或 DELETE DML 語句會影響流緩沖區中的行,這是不受支持的
所以我從 BigQueryConsole 嘗試過。
我使用INSERT查詢插入了一行,然后立即更新同一行。 它工作得很好。
當我閱讀 BIGQUERY 的文章時,他們提到了 JAVA 中的 InsertAll 和使用 Streaming Buffer 的 Console 中的 INSERT 查詢。 在這種情況下,控制台查詢執行應該會失敗。
為什么控制台查詢工作正常? 但是從 Java InsertAll 來看,它拋出了一個異常。
如果有人幫助我知道確切的細節,那將非常有幫助。
如果有任何建議使用 Java 中的 Native insert 查詢插入而不是 InsertAll到 BigQuery,這將是一個很大的幫助。
請找到代碼片段
首先使用以下代碼片段將值插入 BigQuery
Map<String, Object> map = new HashMap<>();
map.put("1", "name");
map.put("2", "age");
BigQuery bQuery = BigQueryOptions.newBuilder().setCredentials(credentials).setProjectId(id)
.build().getService();
InsertAllResponse response = bQuery .insertAll(InsertAllRequest.newBuilder(tableId).addRow(map).build());
插入后,我嘗試使用以下代碼片段更新該表中的行
String updateQuery = String.format( "UPDATE `%s` SET name = \"%s\" WHERE age = \"%s\")", name, age);
QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();
bQuery.query(queryConfig);
插入工作正常。 當我嘗試更新相同的插入行時,出現流緩沖區錯誤。
提前致謝。
當您閱讀文檔時,很明顯 insertAll 執行寫入 BigQuery 的流。
當您使用 INSERT DML ( INSERT INTO <table> [VALUES....|SELECT...]
) 時,您執行的是查詢,而不是流寫入。 所以,數據管理是不一樣的。 性能也不同(Stream write每秒最多可以寫入100萬行,DML是逐個查詢的,數據更少花費更多時間)。
所以,我不知道您的代碼以及您想要實現的目標。 但是如果你想使用通常的查詢(插入、更新、刪除),請使用查詢 API。
編輯
我試圖調整你的代碼(但這是錯誤的,我做了一些假設),我可以向你提出這個建議。 只需執行查詢,而不是加載作業或流式寫入。
String tableName = "YOUR_TABLE_NAME";
String insertQuery = String.format("INSERT INTO %s(name, age) VALUES (1,2)", tableName);
QueryRequest queryRequest = QueryRequest.builder(insertQuery).build();
bQuery.query(queryRequest);
String updateQuery = String.format( "UPDATE `%s` SET name = \"%s\" WHERE age = \"%s\")", tableName, name, age);
queryRequest = QueryRequest.builder(updateQuery).build();
bQuery.query(queryRequest);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.