0

我有一組日期分區表employee_wages_<date>,並且想要使用數據流來閱讀一些列。在(Python的例子)的線有些事情日期分區表上的BigQuerySource

beam.io.Read('ReadNameAndTotalSalary', 
    beam.io.BigQuerySource(query='SELECT user_name, sum(salary) as total_salary FROM `project_id.dataset_id.employee_salary_*` group by 1')) 

對谷歌大查詢的查詢做工精細,但我得到和錯誤說無效的表名,當我運行的管道。也許我正在做一些非常愚蠢的事情,或者不可能在df中使用glob(*)?

+0

查詢由BigQuery處理,而不是由Dataflow處理 - Dataflow僅將其結果導入到管道中。您是否能夠從BigQuery UI手動成功執行相同的查詢? – jkff

+0

此查詢看起來像使用標準SQL,並且數據流可能默認使用傳統SQL。 –

+0

@Mosha ...同意並且數據流支持非遺留(標準)sql嗎? –

回答

1

Dataflow尚未支持您正在查詢中使用的BigQuery標準SQL。一個解決辦法是在前面加上#StandardSQL查詢文本,這將指示的BigQuery,下面的查詢使用標準SQL,即

beam.io.Read('ReadNameAndTotalSalary', 
    beam.io.BigQuerySource(query='#StandardSQL\nSELECT user_name, sum(salary) as total_salary FROM `project_id.dataset_id.employee_salary_*` group by 1')) 

(我認爲的\ n爲工作在Python換行,但我沒有Python程序員)

更新:數據流SDK for Java 1.8.0(今天發佈),引入使用標準SQL設置,但它不是在python SDK(還)。

+0

代碼應該可以正常運行,但在** BlockingDataflowPipelineRunner中運行時**我最終得到了'錯誤:消息:查詢文本指定use_legacy_sql:false,而API選項指定:true HTTP Code:400'。所以沒有遊戲.... –