【问题标题】:Error : convert rows to columns in cassandra using pivot错误:使用数据透视在 cassandra 中将行转换为列
【发布时间】:2018-01-04 04:22:24
【问题描述】:

我应该在 cassandra 中编写一个 SQL 查询来将几行显示为列。该表如下所示,tag_type_id 的值范围为 1,2,3,..42。

+--------+-----------+-------------------+-------+
|asset_id|tag_type_id|           datetime|  value|
+--------+-----------+-------------------+-------+
|       1|         1|2017-07-28 11:25:...|1202.65|
|       1|         1|2017-07-28 11:24:...|1212.17|
|       1|         1|2017-07-28 11:23:...|1214.51|
|       1|         1|2017-07-28 11:21:...|1210.79|
|       1|         1|2017-07-28 11:20:...|1207.01|
|       1|         1|2017-07-28 11:19:...|1208.17|
|       1|         1|2017-07-28 11:18:...| 1205.7|
|       1|         1|2017-07-28 11:16:...|1206.11|
|       1|         1|2017-07-28 11:13:...|1208.53|
|       1|         1|2017-07-28 11:11:...|1207.82|
|       1|         1|2017-07-28 11:10:...|1205.05|
|       1|         1|2017-07-28 11:09:...|1205.56|
|       1|         1|2017-07-28 11:08:...|1204.55|
|       1|         1|2017-07-28 11:06:...|  92.17|
|       1|         1|2017-07-28 11:05:...|1213.93|
|       1|         1|2017-07-28 11:00:...|1205.13|
|       1|         1|2017-07-28 10:59:...|1204.42|
|       1|         1|2017-07-28 10:54:...|1209.42|
|       1|         1|2017-07-28 10:52:...| 1209.6|
|       1|         1|2017-07-28 10:50:...|1213.63|
+--------+----------+--------------------+-------+

我需要将值 39 和 40 的 tag_type_id 视为列,而不是在同一个表中视为一行。我想要这样的

asset_id tag_type_id    datetime     value tag_type_id    datetime      value 
1            39       2017-07-28 11:25   90   40      2017-07-28 11:25   0.3
1            39       2017-07-28 11:24   91   40      2017-07-28 11:24   0.9
1            39       2017-07-28 11:23   90   40      2017-07-28 11:23   0.024
1            39       2017-07-28 11:22   89   40      2017-07-28 11:22   0.9
1            39       2017-07-28 11:21   91   40      2017-07-28 11:21   0.25

我尝试使用像 here 这样的枢轴来做到这一点,但它会引发错误:

select *
from
(
select tag_type_id, datetime, value
from energydata.demodata where asset_id = 1
) src
pivot
(
sum(value)
for tag_type_id in ([39],[40])
) piv;

com.datastax.driver.core.exceptions.SyntaxError:第 3:0 行不可行 替代输入 '(' (select *from[(]...)
com.datastax.driver.core.exceptions.SyntaxError:第 3:0 行不可行 替代输入 '(' (select *from[(]...)

我应该怎么做才能查看上面的表格?

谢谢。

【问题讨论】:

  • 尝试自行加入相应的日期时间
  • 你用的是sql-server还是cassandra?
  • 我正在使用 cassandra 。我正在 cassandra 的 SQL 控制台中编写这些查询
  • cassandra 不支持 SQL.. 它使用 CQL...在 Cassandra 中所有这些复杂的子查询、连接等都不可用

标签: cassandra pivot cql3


【解决方案1】:
select t1.tag_type_id, t1.datetime, t1.value,
       t2.tag_type_id, t2.datetime, t2.value
from table t1
join table t2 on t1.tag_type = 39 and t2.tag_type = 40 and 
                 t1.datetime = t2.datetime

【讨论】:

  • 嗨,我把所有东西都放在同一张桌子上。没有不同的表
  • 当然,我使用自联接,所有内容都在同一个名为“table”的表中
  • @RadimBača Cassandra 不支持连接......现在由于删除了 sql-server 标签,这个答案没有帮助
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2012-12-06
  • 2023-01-03
  • 2013-04-02
相关资源
最近更新 更多