4

我正在尝试从 Cassandra 中提取一些时间序列数据。数据由外部应用程序放在那里,它使用 KairosDB 写入数据(基于 OpenTSDB)。我无法选择将 KairosDB 库放入我正在开发的应用程序中,但 Datastax Cassandra 库已经可供我使用。

我将如何编写基本查询以以可用的方式直接从 Cassandra 检索信息?我可以为行键索引指定开始/结束时间和附加标签的查询。其中一些可能是我缺少的基本 Cassandra 知识,但存在特定于架构的问题,例如采样时间存储为 row_key_index 中绝对时间戳的相对值,或者数据可以拆分为多个 row_key_index 的事实列取决于数据的保留和请求的时间跨度。

如果我直接从列族中查询数据,我会得到如下信息:

cqlsh:kairosdb> select * from string_index;
 key                        | column1                                    | value
----------------------------+--------------------------------------------+-------
 0x7461675f76616c756573 |                                        all |    0x
 0x7461675f76616c756573 |                                data_points |    0x
 0x7461675f76616c756573 |                       eui.3765353036366237 |    0x
 0x7461675f76616c756573 |                              row_key_index |    0x
 0x7461675f76616c756573 |                               string_index |    0x
 0x6d65747269635f6e616d6573 |         kairosdb.datastore.queries_waiting |    0x
 0x6d65747269635f6e616d6573 |              kairosdb.datastore.query_time |    0x
 0x6d65747269635f6e616d6573 |              kairosdb.datastore.write_size |    0x

如果我对 row_key_index 表进行查询,则数据全部存储为 blob。进行 blob->ascii 转换给出:

cqlsh:kairosdb> select blobAsAscii(key) from row_key_index;

 blobAsAscii(key)
------------------------------------
  kairosdb.datastore.write_size
  kairosdb.datastore.write_size
  kairosdb.datastore.write_size
  kairosdb.datastore.write_size
  kairosdb.datastore.write_size

column1 上的相同转换给出:

cqlsh:kairosdb> select blobAsAscii(column1) from row_key_index;

 blobAsAscii(column1)
----------------------------------------------------------------------------------------                                                                                                                                                        
kairosdb.datastore.write_size\x00\x00\x00\x01A\x0fw\xa0\x00buffer=data_points:host=JMOROSKI-DEV:
kairosdb.datastore.write_size\x00\x00\x00\x01A\x0fw\xa0\x00buffer=row_key_index:host=JMOROSKI-DEV:
kairosdb.datastore.write_size\x00\x00\x00\x01A\x0fw\xa0\x00buffer=string_index:host=JMOROSKI-DEV:
kairosdb.datastore.write_size\x00\x00\x00\x01A{\x9d,\x00buffer=data_points:host=JMOROSKI-DEV:
kairosdb.datastore.write_size\x00\x00\x00\x01A{\x9d,\x00buffer=row_key_index:host=JMOROSKI-DEV:

和数据点:

cqlsh:kairosdb> select blobAsAscii(column1) from data_points limit 10;

 blobAsAscii(column1)
----------------------
 \x00\x00\x00\x00
    \x00\x00\x9c@
    \x00\x018\x80
 \x00\x01\xd4\xc0
    \x00\x02q\x00
      \x00\x03\r@
 \x00\x03\xa9\x80
    \x00\x04E\xc0
 \x00\x04\xe2\x00
       \x00\x05~@

我看不到时间。我期待 row_key_index 中的绝对时间和 data_points 中的相对偏移量。我有时看不到价值。我没有看到查询特定机器统计信息的方法,因为该信息似乎嵌入到 row_key_index.column1 中的标签中,而且我不知道 cql 中有任何 LIKE 或范围切片等效项。

4

0 回答 0