本文介紹了GCP BigQuery-聯(lián)邦查詢中的查詢參數(shù)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我無(wú)法實(shí)現(xiàn)此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 || ');'
我收到以下錯(cuò)誤
無(wú)效的表值函數(shù)EXTERNAL_QUERY無(wú)法獲取查詢
來(lái)自MySQL服務(wù)器的架構(gòu)。錯(cuò)誤:MySQL錯(cuò)誤代碼(1142):SELECT命令
在[1:22]拒絕給表‘XXX’的用戶‘XXX@’CloudSQlProxy~‘
[1:1]
如果我像這樣硬編碼bq_last_id的值,它可以正常工作。
set external_sql = '"select * from mysql_table where id > 123456"';
編輯1:
我在EXECUTE語(yǔ)句之前打印了語(yǔ)句,它看起來(lái)像這樣,我想這看起來(lái)很好。
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:
最后,我不得不重新插入數(shù)據(jù),因此使用下面的答案和另一個(gè)括號(hào),我能夠這樣做。
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 || '))'
謝謝。
推薦答案
感謝您的更新,這里的問(wèn)題是:您使用引用中的BQ表查詢您的云SQL實(shí)例。這行不通的。您必須先計(jì)算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 || ');'
這篇關(guān)于GCP BigQuery-聯(lián)邦查詢中的查詢參數(shù)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,