Cassandra - 加入两个 tables 并将结果保存到新的 table

Cassandra - join two tables and save result to new table

我正在开发一个 self-bi 应用程序,用户可以在其中上传自己的数据集,这些数据集存储在动态创建的 Cassandra table 中。数据是从用户可以上传的文件中提取的。因此,每个数据集都被写入自己的 Cassandra table 中,该 Cassandra table 基于上传文件中的列 headers 建模,同时索引维度。

数据上传后,用户可以在应用程序内创建报告、分析等。我需要一种方法允许用户根据匹配键从两个或多个 datasets/tables 中 merge/join 数据并将结果写入新的 Cassandra table。创建 dataset/table 后,它将保持不变 table 并且仅从中读取数据。

用户table1

  1. 用户名
  2. 电子邮件
  3. 员工编号

用户table2

  1. 员工编号
  2. 经理

我需要在 user table 1user table 2 中合并数据匹配 employee id 写入动态创建的new table.

新table

  1. 用户名
  2. 电子邮件
  3. 员工编号
  4. 经理

最好的方法是什么?

您唯一的选择是在您的应用程序代码中进行连接。只有很少的细节可以建议适当的解决方案。

请添加有关 table 键、使用模式的详细信息...通常,在 cassandra 中,您从使用的角度建模,即从您将对数据执行的查询开始。

为了在此模式上合并 2 个 tables,您必须将其合并到应用程序中,创建第三个 table(目标 table)并用来自的数据填充它两个 table。您必须确保以页面的形式读取数据而不是 OOM,这实际上取决于数据的大小。

另一种选择是将联接构建到 Spark 中,但在您的情况下可能过于工程化。

您可以将 table 与用户的 primary key 合并,这样合并后的数据就会排成一行,并且这应该是唯一的,因为它是一次性操作。

当用户点击时,您可以使用 fetch size 分批处理一个 table(对于 java,您可以检查 query options,但这是一种获得固定 window 将被加载,当达到时移动到元素的下一个获取大小)。假设你有 1000 个项目的获取大小,从一个 table 迭代它们并在第二个 table 中找到匹配项,在达到 1000 之后将 1000 个插入批量放置到新的 table.

如果这很耗时,您可以按照建议使用 Apache Spark 或 Spring Batch 等其他工具,并在后台通知用户它将发生。