如何在Impala中显示复杂数据列(地图类型)中的所有字段?
How to display all the fields in a complex data column (map type) in Impala?
我在 Impala 中有一个数据table,它有一个结构复杂的列:键和值。我想在每一行中显示该列的整个字段:当我 SELECT 数据时,每行的键和值。
想要table:
Id, map_tag
100, {building:yes, type:apartment, street:street_a, number:3}
101, {building:yes, type:hotel}
102, {building:yes, type: bank}
如果我使用:
SELECT id, GROUP_CONCAT(kv_pair) map_tag
FROM (
SELECT dt.id id, CONCAT(cc.key,':',cc.value) kv_pair
FROM datatable dt, datatable.complex_column cc
) T
GROUP BY id
然后我只得到一个 Id,而不是很多 Id。这是它的截图:
根据 Impala Complex Types 文档,“对 MAP 列中字段的引用使用 KEY 和 VALUE 伪列”。此文档还提供了查询 MAP 字段的语法。所以 SELECT
和 GROUP_CONCAT
的组合应该可以做到:
SELECT id, GROUP_CONCAT(kv_pair) map_tag
FROM (
SELECT dt.id id, CONCAT(cc.key,':',cc.value) kv_pair
FROM datatable dt, dt.complex_column cc
) T
GROUP BY id
Query submitted at: 2020-08-24 12:34:17 (Coordinator: https://impalac:25000)
+-----+---------------------------------------------------------+
| id | map_tag |
+-----+---------------------------------------------------------+
| 102 | building:yes, type:bank |
| 100 | building:yes, type:apartment, street:street_a, number:3 |
| 101 | building:yes, type:hotel |
+-----+---------------------------------------------------------+
Fetched 3 row(s) in 0.42s
请注意,在执行联接时引用 map
字段时,如果您确实为其分配了别名,则应为“主要”table 使用别名。 IE。在上面的例子中,内部 SELECT
使用 datatable dt
所以对 complex_column
的引用应该看起来像 dt.complex_column
(不是 actual_table.column_name 这将是“正常的”)。
我在 Impala 中有一个数据table,它有一个结构复杂的列:键和值。我想在每一行中显示该列的整个字段:当我 SELECT 数据时,每行的键和值。
想要table:
Id, map_tag
100, {building:yes, type:apartment, street:street_a, number:3}
101, {building:yes, type:hotel}
102, {building:yes, type: bank}
如果我使用:
SELECT id, GROUP_CONCAT(kv_pair) map_tag
FROM (
SELECT dt.id id, CONCAT(cc.key,':',cc.value) kv_pair
FROM datatable dt, datatable.complex_column cc
) T
GROUP BY id
然后我只得到一个 Id,而不是很多 Id。这是它的截图:
根据 Impala Complex Types 文档,“对 MAP 列中字段的引用使用 KEY 和 VALUE 伪列”。此文档还提供了查询 MAP 字段的语法。所以 SELECT
和 GROUP_CONCAT
的组合应该可以做到:
SELECT id, GROUP_CONCAT(kv_pair) map_tag
FROM (
SELECT dt.id id, CONCAT(cc.key,':',cc.value) kv_pair
FROM datatable dt, dt.complex_column cc
) T
GROUP BY id
Query submitted at: 2020-08-24 12:34:17 (Coordinator: https://impalac:25000)
+-----+---------------------------------------------------------+
| id | map_tag |
+-----+---------------------------------------------------------+
| 102 | building:yes, type:bank |
| 100 | building:yes, type:apartment, street:street_a, number:3 |
| 101 | building:yes, type:hotel |
+-----+---------------------------------------------------------+
Fetched 3 row(s) in 0.42s
请注意,在执行联接时引用 map
字段时,如果您确实为其分配了别名,则应为“主要”table 使用别名。 IE。在上面的例子中,内部 SELECT
使用 datatable dt
所以对 complex_column
的引用应该看起来像 dt.complex_column
(不是 actual_table.column_name 这将是“正常的”)。