【问题标题】:How to select a set of fields from input data as an array of repeated fields in beam SQL如何从输入数据中选择一组字段作为Beam SQL中的重复字段数组
【发布时间】:2020-05-29 14:37:32
【问题描述】:

问题陈述:

我有一个包含以下字段的输入 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 的代码 sn-p:

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-dataflow apache-beam apache-beam-io apache-calcite beam-sql


【解决方案1】:

【讨论】:

  • 嗨,我刚刚查看了您共享的链接,在链接输入模式中提到的示例中,它本身具有数组类型,但我试图找到的解决方案是:输入模式将是正常的字段集,输出模式将具有数组类型,其中来自输入的字段将分组在它们之下,你能帮帮我吗:)
【解决方案2】:

您的 SQL 查询有一些错误。

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

【讨论】:

  • 嗨,你能指导我实际的 sql 表达式是什么,我是梁 sql 的新手
  • 我无法真正说出您期望的输出。
猜你喜欢
  • 2016-12-19
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
相关资源
最近更新 更多