impala 中的多行

Multiplied rows in impala

我正在通过 sqoop 从视图中获取一些数据,其中一些已连接 tables 到 impala 中的外部 table。但是我看到一个 table 中的列乘以行。 例如

id first_name surname step name       value
1  ted         kast    1   museum     visitor
1  ted         kast    1   shop       buyer
1  ted         kast    2   museum     visitor
1  ted         kast    2   shop       buyer

但我想成为那样的人

id first_name surname step name_value
1  ted        kast    1    [(museum visitor), (shop buyer)]
1  ted        kast    2    [(museum visitor), (shop buyer)]

如何在 impala 中实现?

我们可以在这里使用聚合和 GROUP_CONCAT:

SELECT
    id,
    first_name,
    surname,
    step,
    CONCAT('[', GROUP_CONCAT(CONCAT('(', CONCAT_WS(' ', name, value), ')'), ', '), ']') AS name_value
FROM yourTable
GROUP BY
    id,
    first_name,
    surname,
    step
ORDER BY id;

这是 MySQL 的 demo,其中语法几乎与 Impala 相同。