本文介紹了GCP BigQuery-聯邦查詢中的查詢參數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我無法實現此question中建議的solution。
我的SQL代碼:
declare bq_last_id string;
declare external_sql string;
set bq_last_id = 'select max(id) from bq_dataset.bq_table';
set external_sql = '"select * from mysql_table where id > ('|| bq_last_id ||')"';
execute immediate 'select * from external_query("my-gcp-project.my-region.my-connection-name",'|| external_sql || ');'
我收到以下錯誤
無效的表值函數EXTERNAL_QUERY無法獲取查詢
來自MySQL服務器的架構。錯誤:MySQL錯誤代碼(1142):SELECT命令
在[1:22]拒絕給表‘XXX’的用戶‘XXX@’CloudSQlProxy~‘
[1:1]
如果我像這樣硬編碼bq_last_id的值,它可以正常工作。
set external_sql = '"select * from mysql_table where id > 123456"';
編輯1:
我在EXECUTE語句之前打印了語句,它看起來像這樣,我想這看起來很好。
select * from external_query("my-gcp-project.my-region.my-connection-name", "select * from mysql_table where id > (select max(id) from bq_dataset.bq_table)");
編輯2:
最后,我不得不重新插入數據,因此使用下面的答案和另一個括號,我能夠這樣做。
declare bq_last_id int64; # Change the type here
declare external_sql string;
set bq_last_id = (select max(id) from bq_dataset.bq_table); # put the query in parenthesis to force BQ to evaluate it
set external_sql = '"select * from mysql_table where id > ('|| bq_last_id ||')"';
execute immediate 'insert into bq_dataset.bq_table (select * from external_query("my-gcp-project.my-region.my-connection-name",'|| external_sql || '))'
謝謝。
推薦答案
感謝您的更新,這里的問題是:您使用引用中的BQ表查詢您的云SQL實例。這行不通的。您必須先計算max(Id),然后再將其添加到查詢中,如下所示
declare bq_last_id int64; # Change the type here
declare external_sql string;
set bq_last_id = (select max(id) from bq_dataset.bq_table); # put the query in parenthesis to force BQ to evaluate it
set external_sql = '"select * from mysql_table where id > ('|| bq_last_id ||')"';
execute immediate 'select * from external_query("my-gcp-project.my-region.my-connection-name",'|| external_sql || ');'
這篇關于GCP BigQuery-聯邦查詢中的查詢參數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,