我已将我的 csv 文件上传到我的 Datastax Astra DB 中。问题是为什么数据在上传时,行变得杂乱无章或随机。假设在我的 csv 中,行 id 是 1、2、3,...然后当我将它上传到我的数据库时,它会被上传到乱码/重新排列,比如行 id 2、1、4、5、3 .. .由于这个原因,当我通过http_methods
python请求数据时,数据也随之而来,因为它是以无组织的方式存储的。为什么会这样?有没有办法解决这个问题?
问问题
44 次
2 回答
2
它归结为 Cassandra 如何存储您的数据。我假设您只partition key
在主键中定义 a 。分区键负责数据如何存储在集群中的节点上。如果您希望数据按特定顺序排列,则需要定义主键的第二部分,即clustering key
.
我建议看看这个答案,它很好地解释了订购 https://stackoverflow.com/a/35708544/13078421
于 2021-10-08T05:15:05.163 回答
2
为什么会这样?
dwettlaufer 的回答很准确,但我将提供一个视觉表示来帮助理解这里发生的事情:
> SELECT id,token(id),name FROM numbers ;
id | system.token(id) | name
----+----------------------+-------
5 | -7509452495886106294 | five
1 | -4069959284402364209 | one
2 | -3248873570005575792 | two
4 | -2729420104000364805 | four
3 | 9010454139840013625 | three
(5 rows)
Astra DB 中的数据按分区键的哈希标记值顺序存储。由于散列,数值很可能以不同的顺序排列。
有没有办法解决这个问题?
如前所述,排序顺序只能在分区键内强制执行。因此,如果使用不同的列作为分区键,id
则可用于对其中的数据进行排序。
考虑一个如下所示的表:
CREATE TABLE dept_numbers (
dept int,
id int,
name TEXT,
PRIMARY KEY(dept,id));
然后这样的事情会起作用:
> SELECT * FROM dept_numbers WHERE dept=1;
dept | id | name
------+----+-------
1 | 1 | one
1 | 2 | two
1 | 3 | three
1 | 4 | four
1 | 5 | five
(5 rows)
请注意,所有使用 Astra DB 的查询都应该有一个WHERE
子句。没有它,将导致昂贵的表扫描。
于 2021-10-08T18:20:18.987 回答