Google bigquery 将BigQuery联合表作为数据流中的源读取会引发错误

Google bigquery 将BigQuery联合表作为数据流中的源读取会引发错误,google-bigquery,google-cloud-dataflow,Google Bigquery,Google Cloud Dataflow,我在BigQuery中有一个联邦源代码,它指向GCS中的一些CSV文件 当我尝试将联邦BigQuery表作为数据流管道的源读取时,它抛出以下错误: 1226 [main] ERROR com.google.cloud.dataflow.sdk.util.BigQueryTableRowIterator - Error reading from BigQuery table Federated_test_dataflow of dataset CPT_7414_PLAYGROUND :

我在BigQuery中有一个联邦源代码,它指向GCS中的一些CSV文件

当我尝试将联邦BigQuery表作为数据流管道的源读取时,它抛出以下错误:

    1226 [main] ERROR com.google.cloud.dataflow.sdk.util.BigQueryTableRowIterator  - Error reading from BigQuery table Federated_test_dataflow of dataset CPT_7414_PLAYGROUND : 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Cannot list a table of type EXTERNAL.",
    "reason" : "invalid"
  } ],
  "message" : "Cannot list a table of type EXTERNAL."
}
数据流是否不支持BigQuery中的联邦源,或者我做错了什么?我知道我可以将GCS中的文件直接读取到我的管道中,但由于应用程序的设计,我更喜欢使用BigQuery
TableRow
对象

 PCollection<TableRow> results = pipeline.apply("fed-test", BigQueryIO.Read.from("<project_id>:CPT_7414_PLAYGROUND.Federated_test_dataflow")).apply(ParDo.of(new DoFn<TableRow, TableRow>() {
        @Override
        public void processElement(ProcessContext c) throws Exception {
            System.out.println(c.element());
        }
    }));
PCollection results=pipeline.apply(“fed test”,BigQueryIO.Read.from(“:CPT_7414_playde.Federated_test_dataflow”)).apply(ParDo.of(new DoFn(){
@凌驾
public void processElement(ProcessContext c)引发异常{
System.out.println(c.element());
}
}));

数据流BigQuery源设计用于读取“TABLE”类型的BigQuery托管表。(类型定义可在中找到。)不支持外部表和视图表


BigQuery的“联邦表”功能允许BigQuery直接在Google云存储等地方查询数据。Dataflow还可以从Google云存储中读取文件,因此您应该能够将数据流计算直接指向您要读取的源。

正如Michael所说,BigQuery不支持直接从外部(联合表)或视图读取:即使有效地读取也需要查询

要在数据流中读取这些表,可以使用

BigQueryIO.Read.fromQuery("SELECT * FROM table_or_view_name")

它将发出查询并将结果保存到临时表中,然后开始读取过程。当然,这会产生在BigQuery上查询的成本,因此如果您希望重复读取同一视图或外部表,您可能需要手动创建表。

您使用的是哪种运行程序?
DirectPipelineRunner
DataflowPipelineRunner
阻塞DataflowPipelineRunner
?DirectPipelineRunner@polleyg如果有帮助的话,我们已经添加了另一个答案。是否有文档证明数据流不支持从BigQuery读取视图或联邦源?正确,正如我在帖子中所说,我知道我可以直接从GCS中读取数据,但我希望能够保持应用程序设计的一致性,并使用BigQuery TableRow。这不是真正的基本数据流问题:这是BigQuery API的一个(非常合理的)限制。我已经提交了文件,以便更好地显示数据流警告。虽然我们可以自动将
from(table)
命令转换为
fromQuery(“select*from table”)
命令,但我们选择了不这样做,以便用户有意地选择查询成本。