2017-03-23 59 views
0

我試圖使用dplyr訪問/操縱Google Bigquerry中的表視圖。但是,當我嘗試使用dplyr函數(select,filter等)聚合表時,它給了我這個錯誤:「錯誤:無法在傳統SQL查詢中引用SQL視圖。」下面的代碼說明了我正在嘗試做什麼。無法在使用R的傳統SQL查詢中引用SQL視圖dplyr

#source the table 
pd = src_bigquery(project, dataset) %>% 
tbl(table) 

#get a aggregated view of the table that is filtered on a specific date 
pdSelect = pd %>% 
select(id, date) %>% 
filter(date =="2017-03-15") %>% 
collect() 

有沒有辦法在使用dplyr時不使用遺留SQL?例如,在Google Bigquery Web UI中,它說:「默認情況下,BigQuery使用舊版SQL運行查詢。取消選中此項可以使用BigQuery的更新SQL方言運行查詢,並提高標準符合性。」當我在該環境中工作時,我通常只是取消選擇它,因此它會停止使用傳統SQL。

感謝您的幫助!

回答

1

編輯:應該可以使用標準SQL,將#standardSQL shebang放在查詢頂部。

原始回覆: 看起來source for the BigQuery connector with dplyr中沒有選項可以使用標準SQL,並且#standardSQL shebang不起作用。有一個issue submitted in relation to useLegacySql,你可以upvote或評論,或者你可以考慮submitting a pull request

+0

它看起來像有人創建了這個[代碼](http://stackoverflow.com/questions/38278705/standard-sql-in-bigrquery),可能會解決這個問題。這是代碼'devtools :: install_github(「backlin/bigrquery」,ref ='feature/useLegacySqlOption')'應該這樣做。但是,它還沒有被添加到最新的CRAN版本的bigrquery中。我也不確定它會與dplyr一起使用。 – Kevin

+0

如果你確實找到了一些可行的方法,請發佈一個答案,以便其他用戶也能找到解決方案:) –

+0

這已[自修](https://github.com/rstats-db/ bigrquery/issues/147)和#standardSQL [現在應該在工作](https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql)。 – Jordan

0

除了傳入shebangs之外,還可以將標誌設置爲bigrquerydplyr連接器。如果您正在訪問使用標準SQL構建的視圖,這會很有用。

bigrquery

傳遞use_legacy_sql標誌query_exec

bigrquery::query_exec("SELECT * FROM `datasetName.standardSQLView`", 
         project ='bQProjectName', 
         use_legacy_sql = FALSE) 

dplyr

傳遞use_legacy_sql標誌dbConnect

bQCon = DBI::dbConnect(bigrquery::dbi_driver(), 
         project = 'bQProjectName', 
         dataset = 'datasetName', 
         use_legacy_sql = FALSE) 
dplyr::tbl(bQCon, 'standardSQLView')