Dan*_*ley 6 presto amazon-athena
我觉得这应该很简单,但我一直在努力寻找正确的术语,请耐心等待。
我有两列,timestamp哪voltages一个是数组
如果我做一个简单的
SELECT timestamp, voltages FROM table
Run Code Online (Sandbox Code Playgroud)
然后我会得到以下结果:
|timestamp | voltages |
|1544435470 |3.7352,3.749,3.7433,3.7533|
|1544435477 |3.7352,3.751,3.7452,3.7533|
|1544435484 |3.7371,3.749,3.7433,3.7533|
|1544435490 |3.7352,3.749,3.7452,3.7533|
|1544435497 |3.7352,3.751,3.7452,3.7533|
|1544435504 |3.7352,3.749,3.7452,3.7533|
但我想拆分voltages数组,因此数组中的每个元素都是其自己的列。
|timestamp | v1 | v2 | v3 | v4 |
|1544435470 |3.7352 |3.749 |3.7433 |3.7533|
|1544435477 |3.7352 |3.751 |3.7452 |3.7533|
|1544435484 |3.7371 |3.749 |3.7433 |3.7533|
|1544435490 |3.7352 |3.749 |3.7452 |3.7533|
|1544435497 |3.7352 |3.751 |3.7452 |3.7533|
|1544435504 |3.7352 |3.749 |3.7452 |3.7533|
我知道我可以这样做:
SELECT timestamp, voltages[1] as v1, voltages[2] as v2 FROM table
Run Code Online (Sandbox Code Playgroud)
但我需要能够以编程方式完成此操作,而不是列出它们。
我错过了一些明显的东西吗?
如果您有固定长度的数组,这应该可以满足您的目的。
您需要首先将每个数组元素分解为它自己的行。您可以UNNEST通过以下方式使用运算符来执行此操作:
SELECT timestamp, volt
FROM table
CROSS JOIN UNNEST(voltages) AS t(volt)
Run Code Online (Sandbox Code Playgroud)
使用结果表,您可以参考 Gordon Linoff 的回答“需要将具有相同ID 的多行数据转换为具有多列的 1 行”来进行透视(将具有相同时间戳的多行转换为多列)。
| 归档时间: |
|
| 查看次数: |
18560 次 |
| 最近记录: |