【发布时间】:2016-04-25 22:13:46
【问题描述】:
我是 Pipeline 世界和 Google API DataFlow 的新手。
我想用 sqlQuery 从 BigQuery 读取数据。当我读取所有数据库时,它工作正常。
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
PCollection<TableRow> qData = p.apply(
BigQueryIO.Read
.named("Read")
.from("test:DataSetTest.data"));
但是当我使用 fromQuery 时出现错误。
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
PCollection<TableRow> qData = p.apply(
BigQueryIO.Read
.named("Read")
.fromQuery("SELECT * FROM DataSetTest.data"));
错误:
线程“主”java.lang.IllegalArgumentException 中的异常: 查询“SELECT * FROM DataSetTest.data”的验证失败。如果 查询取决于管道的早期阶段,此验证可以 使用#withoutValidation 禁用。
在 com.google.cloud.dataflow.sdk.io.BigQueryIO$Read$Bound.dryRunQuery(BigQueryIO.java:449)
在 com.google.cloud.dataflow.sdk.io.BigQueryIO$Read$Bound.validate(BigQueryIO.java:432)
在 com.google.cloud.dataflow.sdk.Pipeline.applyInternal(Pipeline.java:357)
在 com.google.cloud.dataflow.sdk.Pipeline.applyTransform(Pipeline.java:267)
在 com.google.cloud.dataflow.sdk.values.PBegin.apply(PBegin.java:47)
在 com.google.cloud.dataflow.sdk.Pipeline.apply(Pipeline.java:151)
在 Test.java.packageid.StarterPipeline.main(StarterPipeline.java:72)
原因:java.lang.NullPointerException:必需参数 必须指定 projectId。
在 com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:229)
在 com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:140)
在 com.google.api.services.bigquery.Bigquery$Jobs$Query.(Bigquery.java:1751)
在 com.google.api.services.bigquery.Bigquery$Jobs.query(Bigquery.java:1724)
在 com.google.cloud.dataflow.sdk.io.BigQueryIO$Read$Bound.dryRunQuery(BigQueryIO.java:445)
...还有 6 个
这里有什么问题?
更新:
我通过“options.setProject”设置项目。
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
options.setProject("test");
PCollection<TableRow> qData = p.apply(
BigQueryIO.Read
.named("Read")
.fromQuery("SELECT * FROM DataSetTest.data"));
但现在我收到了这条消息。找不到表。
原因:com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found { “代码”:404, “错误”:[{ “域”:“全球”, “消息”:“未找到:表测试:_dataflow_temporary_dataset_737099.dataflow_temporary_table_550832”, “原因”:“未找到” }], “消息”:“未找到:表测试:_dataflow_temporary_dataset_737099.dataflow_temporary_table_550832” }
【问题讨论】:
标签: java google-app-engine google-bigquery google-cloud-dataflow dataflow