【问题标题】:How to use BigQuery Standard SQL in Dataflow?如何在 Dataflow 中使用 BigQuery 标准 SQL?
【发布时间】:2016-11-23 20:07:56
【问题描述】:

我想在数据流中使用BigQuery Standard SQL 运行一个简单的查询,但我找不到启用此选项的位置。我该怎么做?

pipeline.apply(Read.named(metricName + " Read").fromQuery("select * from table1 UNION DISTINCT select * from table2"));

当我尝试运行它时,我收到错误:

2016-07-20T13:35:22.543Z: Error:   (6e0ad847af078af9): Workflow failed. Causes: (fe6c7bcb1a35a057): S01:warehouse_handled_returns Read/DataflowPipelineRunner.BatchBigQueryIONativeRead+ParMultiDo(FormatData)+warehouse_handled_returns Write/DataflowPipelineRunner.BatchBigQueryIOWrite/DataflowPipelineRunner.BatchBigQueryIONativeWrite failed., (7f29f1d9435d27bc): BigQuery execution failed., (7f29f1d9435d2823): Error:
Message: Encountered "" at line 23, column 27.

HTTP Code: 400

【问题讨论】:

  • 当前版本的 BigQueryIO 不支持此项。

标签: google-bigquery google-cloud-dataflow


【解决方案1】:

Dataflow SDK for Java 从 1.8.0 版开始支持 BigQuery 的标准 SQL 方言。

【讨论】:

  • 现在支持标准 SQL。
【解决方案2】:

在 DataFlow 正式支持 BigQuery 标准 SQL 之前,一种解决方法是使用以下注释开始查询:

#StandardSQL

这将指示 BigQuery 使用标准 SQL 而不是旧版 SQL

【讨论】:

  • 我试过这个,但得到以下错误 - com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request { "code" : 400, "errors" : [ { "domain" : "global", "message" : "Query text specifies use_legacy_sql:false, while API options specify:true", "reason" : "invalid" } ], "message" : "Query text specifies use_legacy_sql:false, while API options specify:true" }
【解决方案3】:

您现在可以将标准 SQL 与 Dataflow 一起使用。

https://cloud.google.com/dataflow/model/bigquery-io

PCollection<TableRow> weatherData = p.apply(
BigQueryIO.Read
.named("ReadYearAndTemp")
.fromQuery("SELECT year, mean_temp FROM `samples.weather_stations`")
.usingStandardSql();

【讨论】:

猜你喜欢
  • 2018-09-10
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多