有两个表如下:
CREATE TABLE model_vals (
model_id int,
data_item_code text,
date date,
data_item text,
pre_cal1 text,
pre_cal2 text,
pre_cal3 text,
pre_cal4 text,
pre_cal5 text,
pre_cal6 text,
PRIMARY KEY (( model_id, data_item ), date)
) WITH CLUSTERING ORDER BY ( date DESC )
CREATE TABLE prapre_calulated_vals (
id int,
precal_code text,
date date,
precal_item text,
pre_cal1 text,
pre_cal2 text,
pre_cal3 text,
pre_cal4 text,
pre_cal5 text,
pre_cal6 text,
PRIMARY KEY (( id, precal_item ), date)
) WITH CLUSTERING ORDER BY ( date DESC )
在使用spark-sql处理来自Kafka的输入数据之后,将结果数据插入到第一个(model_vals)C *表中。这进一步服务于一些Web服务端点。
另一个业务逻辑需要来自第一个(model_vals)C *表的数据,在第二个(prapre_calulated_vals)C *表中处理填充的restuls。
对于Web服务端点,最终用户可以通过require where condition并从第一个(model_vals)C *表获取数据。
但是进一步处理我需要读取整个第一个(model_vals)C *表,处理数据,做其他计算并填充第二个(prapre_calulated_vals)C *表。
第一个(model_vals)C *表有数百万个记录,所以我们不能一次加载整个表来处理..
如何在C *中处理这种情况?我有什么办法来处理这种情况?
根据您需要完成的复杂程度,您有多种选择。一般来说,听起来你需要某种流式框架,同时将新数据写入记录,还要做一些业务逻辑并写入第二个表。
想到的一些技术是,
所有这些技术都具有Cassandra连接器,能够以高效的方式读取整个表以及表的一部分,以便与新数据进行连接。当然,这比平面文件上的聚合技术要慢,或者对微量数据进行较小的请求。
如果您不需要流式处理方法,因为您已经在使用Spark,我建议使用后续的SparkSQL查询来填充您的最终表。