当前位置: 首页 > 知识库问答 >
问题:

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

郏博瀚
2023-03-14

我在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中的文件直接读取到我的管道中,但由于应用程序的设计,我更喜欢使用BigQueryTableRow对象。

 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());
        }
    }));

共有2个答案

鲜于岳
2023-03-14

Dataflow BigQuery源设计用于读取“TABLE”类型的BigQuery托管表。(类型定义位于https://cloud.google.com/bigquery/docs/reference/v2/tables#type.)不支持外部表和视图表。

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

宣胜
2023-03-14

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

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

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

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

 类似资料:
  • 但我只能得到: 当请求实体的内容类型不是application/x-www-form-urlencoded时,使用@FormParam 我的代码:

  • 我想创建beam dataflow作业从GCS加载数据到Bigquery,我将有100s文件从不同文件夹在GCS的Parquet格式,是否可能从GCS的不同文件夹加载文件,是否可能在beam代码本身创建源数据集和表。 我的最终目标是创建管道,将数据从GCS加载到Bigquery,这要提前感谢。

  • 我想把BigQuery表名作为运行时参数传递给我的数据流模板,就像这样简单: 这个问题有一个解决方案:https://issues.apache.org/jira/browse/beam-1440,但到目前为止我还不明白结论。

  • 使用“file_loads”技术通过Apache Beam数据流作业写入BigQuery时出错。流式插入(else块)工作正常,符合预期。file_load(如果块)失败,错误在代码后面给出。bucket中GCS上的临时文件是有效的JSON对象。 来自pub/sub的原始事件示例: 数据流作业出错:

  • 我试图在DataFlow中读取bigquery数据集。它找不到我指定的bigquery数据集/表。 我的datalab vm、gcs bucket和bigquery dataset都位于欧洲西部2。 出于某种原因,它正在“美国”位置搜索数据集。 搜索了文档,但无法找到为什么会发生这种情况的答案。 HttpError:HttpError访问https://www.googleapis.com/big

  • 问题内容: 如果将空列表传递到JPA查询中,则会收到错误消息。例如: 由于列表为空,因此Hibernate在SQL中将其生成为“ IN()”,这给我Hypersonic数据库错误。 在Hibernate问题跟踪中有一张票证,但是那里没有太多评论/活动。我也不知道其他ORM产品或JPA规范中的支持。 我不喜欢每次都要手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?您如何处理这些情况?