cassandra:在集合(map)中使用copy to导出的双值的精度

kmb7vmvb  于 2021-06-13  发布在  Cassandra
关注(0)|答案(2)|浏览(288)

当导出到带有copy to的csv文件时,如何以与双精度列相同的方式设置集合中双精度值的精度?
doubleprecision适用于列(下面的d),但不适用于Map中的键。

CREATE TABLE test.digits (
    name    text,
    d       double,
    digits  map<double, int>,
    PRIMARY KEY ((name))
);

INSERT INTO test.digits (name, d, digits) VALUES ('Fred', 0.1234567890123456789,
    {
        1.1234567890123456789 : 1,
        2.1234567890123456789 : 2,
        3.1234567890123456789 : 3
    }
);

SELECT * from test.digits;

 name | d        | digits
------+----------+--------------------------------------
 Fred | 0.123457 | {1.12346: 1, 2.12346: 2, 3.12346: 3}

COPY test.digits (name, d, digits) TO 'digits.csv' WITH header=true AND DELIMITER='|' AND NULL='' AND DOUBLEPRECISION=15;

cat digits.csv
name|d|digits
Fred|0.1234567890123457|{1.12346: 1, 2.12346: 2, 3.12346: 3}

如果无法在集合中设置此精度,这是错误还是功能?

iqih9akk

iqih9akk1#

默认情况下,cqlsh实用程序显示5位精度。
要为select启用更多数字,请添加或创建~/.cassandra/cqlshrc文件:

[ui]
float_precision = 10
double_precision = 15

但是,这并不能解决复制到精度的问题,这就像@fg78nc所暗示的集合导出中的一个bug。

m2xkgtsf

m2xkgtsf2#

尝试添加: AND FLOATPRECISION=15 ```
COPY my_keyspace.digits (name, d, digits) TO 'digits.csv'
WITH header=true AND DELIMITER='|' AND NULL='' AND DOUBLEPRECISION=15
AND FLOATPRECISION = 16;

➜ cat digits.csv
name|d|digits
Fred|0.1234567890123457|{1.1234567890123457: 1, 2.1234567890123457: 2, 3.1234567890123457: 3}

相关问题