首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水文时间序列数据的Cassandra模式选择

水文时间序列数据的Cassandra模式选择
EN

Stack Overflow用户
提问于 2015-06-21 11:31:55
回答 1查看 318关注 0票数 2

我是NoSQL和Cassandra的新手,我想在选择用于处理水文数据的数据库的模式设计时提供一些信息。另外,我正在用Python开发应用程序,并一直在使用Datastax驱动程序。

简而言之,输入的原始数据根据读取的测量间隔/类型,以逗号分隔的值存储在不同的文件中,基本上取决于我称为sensor_id的变量。例如,每小时的数据如下:

代码语言:javascript
复制
sensor_id (int), year (int), julianday (int), hourminute (int) , data1 (float), data2 (float), data3 (float)..

..so示例阅读看起来如下所示:

代码语言:javascript
复制
715, 2015, 15, 2230, 3.65, 6.12, 95.2 ,...
715, 2015, 15, 2330, 4.12, 5.12, 87.2 ,...

其中715表示它是每小时一次的读数,所以每天的阅读将使用另一个sensor_id。让我们将其命名为716,一个示例阅读会看到以下内容:

代码语言:javascript
复制
716, 2015, 15, 3.52, 5.23, 84.5,..

对于日常阅读,我们显然是跳过时间细节,因为阅读只收集一次朱利安日。你大概明白重点了。

因此,每个位置都有自己的读取间隔,其中数据列的数量,即感兴趣的参数取决于读取的间隔/类型。例如,每日数据由20列和每小时15列组成。

感兴趣的查询:

我希望能够对一些数据参数进行简单的质量控制,可能主要是气温、水温、风速和水位,也许还有其他几个参数。首先,这可能是检查参数值是否超过了给定的max-min阈值。我还希望能够绘制原始数据、质量控制数据和未通过QC测试的值。

  • 在给定的阈值(<,>)内是否有特定的值?
  • 在给定的时间间隔(sensor_id)获取所有参数(主要用于绘图)

我最初的想法是将日期/时间参数转换为时间戳,然后将每一行/读取插入到与原始文件具有相同结构的表中。例如,location_hourly看起来(使用上面的值)

代码语言:javascript
复制
+-----------+---------------------+-------+-------+-------+--------+
| sensor_id |      timestamp      | data1 | data2 | data3 | data n |
+-----------+---------------------+-------+-------+-------+--------+
|       715 | 2015-01-01 22:30:00 | 3.65  | 6.12  | 95.2  |        |
|       715 | 2015-01-01 23:30:00 | 4.12  | 5.12  | 87.2  |        |
+-----------+---------------------+-------+-------+-------+--------+    

并设置主键( sensor_id,时间戳),其中sensor_id将成为分区键,而时间戳将成为集群密钥。这显然适用于我们希望在特定时间获取所有值的情况,但对于我们在执行QC时感兴趣的范围查询来说则不然。

这就是我所处的位置,我很想听听你对此的看法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 03:35:08

我对卡桑德拉很陌生,但我想我可以在这里分享一些知识。

要启用天气参数的范围查询,您需要创建单独的表,其中这些天气参数充当集群列。例如,要能够查询风速范围:

代码语言:javascript
复制
CREATE TABLE location_by_wind_speed (sensor_id bigint, weather_speed int,
    date timestamp, data1 ..., PRIMARY KEY (sensor_id, weather_speed) )

然后您就可以这样查询:

代码语言:javascript
复制
SELECT * FROM location_by_wind_speed WHERE sensor_id=123 
  AND wind_speed > 20 AND wind_speed < 100

要按时间筛选结果,可以使用复合分区键(描述为这里)。例如:

代码语言:javascript
复制
CREATE TABLE location_by_wind_speed_year (sensor_id bigint, weather_speed int,
    date timestamp, data1 ..., PRIMARY KEY ((sensor_id, year), weather_speed) )

这将允许您在特定年份内选择录音。如果您需要按时间排序的结果,您可以在您的应用程序的代码排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30964037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档