在Athena / Presto中将数组拆分为列

时间:2018-12-12 12:22:50

标签: amazon-athena presto

我觉得这应该很简单,但是我一直在努力寻找正确的术语,请多多包涵。

我有两列service discoverylet client = await helper.getClientForOrg(orgName); let channel = client.newChannel(channelName); // assign orderer to channel channel.addOrderer(client.getOrderer(ordererName)); // assign peers to channel peers.forEach(function (peerName) { channel.addPeer(client.getPeer(peerName)); }); let request = { targets: peers, chaincodeId: chaincodeName, fcn: functionName, args: args, transientMap: transient }; logger.debug("Make query"); let response_payloads = await channel.queryByChaincode(request); ,它们是数组

如果我做一个简单的

timestamp

然后我将得到以下结果:

voltages

但是我想拆分SELECT timestamp, voltages FROM table 数组,以便其数组中​​的每个元素都是其自己的列。

|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

但是我需要能够以编程方式执行此操作,而不是将它们列出。

我缺少明显的东西吗?

1 个答案:

答案 0 :(得分:0)

如果您有固定长度的数组,这应该可以满足您的目的。
您需要首先将每个数组元素分解为自己的行。您可以通过以下方式使用UNNEST运算符进行此操作:

SELECT timestamp, volt
FROM table
CROSS JOIN UNNEST(voltages) AS t(volt)

使用结果表,您可以参考Gordon Linoff here的答案将具有相同时间戳的多行转换为多列