在配置单元中将一列数据分成多列
Separating a column data into multiple columns in hive
我有一个包含两个控制器及其版本的设备的示例数据。样本数据如下:
device_id controller_id versions
123 1 0.1
123 2 0.15
456 2 0.25
143 1 0.35
143 2 0.36
以上数据应采用以下格式:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 0.15
456 NULL 0.25
143 0.35 0.36
我使用了以下无效的代码:
select
device_id,
case when controller_id="1" then versions end as 1st_ctrl_id_ver,
case when controller_id="2" then versions end as 2nd_ctrl_id_ver
from device_versions
我得到的输出是:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 NULL
123 NULL 0.15
456 NULL 0.25
143 0.35 NULL
143 NULL 0.36
我不想要每个空值 row.Can 有人帮我写正确的代码吗?
要"fold"所有具有给定键的行到一行,你必须运行一个聚合。即使你在实践中并没有真正聚合价值。
类似
select device_id,
MAX(case when controller_id="1" then versions end) as 1st_ctrl_id_ver,
MAX(case when controller_id="2" then versions end) as 2nd_ctrl_id_ver
from device_versions
GROUP BY device_id
但请注意,当且仅当每个设备的每个控制器最多有一个条目时,此代码才有效,并且版本高于 2 的任何控制器都将被忽略。换句话说,它相当脆弱(但你不能在 SQL 中做得更好)
我有一个包含两个控制器及其版本的设备的示例数据。样本数据如下:
device_id controller_id versions
123 1 0.1
123 2 0.15
456 2 0.25
143 1 0.35
143 2 0.36
以上数据应采用以下格式:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 0.15
456 NULL 0.25
143 0.35 0.36
我使用了以下无效的代码:
select
device_id,
case when controller_id="1" then versions end as 1st_ctrl_id_ver,
case when controller_id="2" then versions end as 2nd_ctrl_id_ver
from device_versions
我得到的输出是:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 NULL
123 NULL 0.15
456 NULL 0.25
143 0.35 NULL
143 NULL 0.36
我不想要每个空值 row.Can 有人帮我写正确的代码吗?
要"fold"所有具有给定键的行到一行,你必须运行一个聚合。即使你在实践中并没有真正聚合价值。
类似
select device_id,
MAX(case when controller_id="1" then versions end) as 1st_ctrl_id_ver,
MAX(case when controller_id="2" then versions end) as 2nd_ctrl_id_ver
from device_versions
GROUP BY device_id
但请注意,当且仅当每个设备的每个控制器最多有一个条目时,此代码才有效,并且版本高于 2 的任何控制器都将被忽略。换句话说,它相当脆弱(但你不能在 SQL 中做得更好)