首页 > 解决方案 > 如何从输入数据中选择一组字段作为Beam SQL中的重复字段数组

问题描述

问题陈述:

我有一个带有以下字段的输入 PCollection:

{
   firstname_1,
   lastname_1,
   dob,
   firstname_2,
   lastname_2, 
   firstname_3,
   lastname_3,
}

然后我执行一个 Beam SQL 操作,使得结果 PCollection 的输出应该像

 ----------------------------------------------
   name.firstname |  name.lastname | dob
 ---------------------------------------------- 
      firstname_1 |  lastname_1    | 202009
      firstname_2 |  lastname_2    | 
      firstname_3 |  lastname_3    |
-----------------------------------------------

准确地说:

array[
    (firstname_1,lastname_1,dob),
    (firstname_2,lastname_2,dob),
    (firstname_3,lastname_3,dob)
]

这是我执行 Beam SQL 的代码片段:

PCollectionTuple tuple=
    PCollectionTuple.of(new TupleTag<>("testPcollection"), testPcollection);

PCollection<Row> result = tuple
    .apply(SqlTransform.query(
        "SELECT array[(firstname_1,lastname_1,dob), (firstname_2,lastname_2,dob), (firstname_3,lastname_3,dob)]"));

我没有得到正确的结果。

有人可以指导我如何在 Beam SQL 中查询重复字段的数组吗?

标签: google-cloud-dataflowapache-beamapache-beam-ioapache-calcitebeam-sql

解决方案


您的 SQL 查询有一些错误。

  1. 您已命名 SQL 查询的输入testPcollection。您的 SQL 查询未选择FROM testPcollection. 让我们假设您的意思是FROM testPcollection
  2. (firstname_1, lastname_1, doc)您在预期输出和查询中都使用该语法。这不是任何有效的 SQL 表达式。

推荐阅读