Cassandra UDT 和 JAVA
Cassandra UDT and JAVA
我有一些关于 UDT 的问题,不知道是不是 bug。
这是我的类型定义和 table 定义
CREATE TYPE test_udt_bigint (
id varchar,
data Map<int, bigint>
);
CREATE TYPE test_udt (
id varchar,
data Map<int, int>
);
CREATE TABLE test_tbl_bigint (
row_id varchar PRIMARY KEY,
udt_data map<varchar, frozen<test_udt_bigint>>
);
CREATE TABLE test_tbl_int (
row_id varchar PRIMARY KEY,
udt_data map<varchar, frozen<test_udt>>
);
创建这些对象后,我使用 cqlsh 插入数据,它成功了,我可以使用 select 命令检索数据。但是通过JAVA插入数据后,会出现很多问题。
这是我用来插入数据的存储库:
https://github.com/sophiah/cassandra_test/tree/master/cassandra-test-udt
将数据插入 test_tbl_udt 后,一切看起来都很好,我可以像往常一样通过 cqlsh select:
cqlsh:testcassandra> select * from test_tbl_int;
row_id | udt_data
--------+------------------------------------------------
test | {'key-01': {id: 'mapkey-01 ', data: {10: 20}}}
xxx | {'key-01': {id: 'mapkey-01', data: {10: 20}}}
但是,在将数据插入 test_tbl_bigint 之后,有一些东西 =
错误:
cqlsh:testcassandra> select * from test_tbl_int;
Traceback (most recent call last):
File "bin/cqlsh", line 1093, in perform_simple_statement
rows = self.session.execute(statement, trace=self.tracing_enabled)
File "/opt/apache-cassandra-2.1.11/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 1602, in execute
result = future.result()
File "/opt/apache-cassandra-2.1.11/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result
raise self._final_exception
error: unpack requires a string argument of length 4
cqlsh:testcassandra> select * from test_tbl_bigint;
NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.0.0.1 datacenter1>: ConnectionShutdown('Connection to 127.0.0.1 is defunct',)})
有什么建议吗?
谢谢
简短的回答是 table 名称在 da_test_tbl_bigint.java
中是错误的,它试图插入到 test_tbl_int
中。我还不清楚为什么驱动程序没有发现错误,我会在弄清楚后更新我的答案。
我有一些关于 UDT 的问题,不知道是不是 bug。
这是我的类型定义和 table 定义
CREATE TYPE test_udt_bigint (
id varchar,
data Map<int, bigint>
);
CREATE TYPE test_udt (
id varchar,
data Map<int, int>
);
CREATE TABLE test_tbl_bigint (
row_id varchar PRIMARY KEY,
udt_data map<varchar, frozen<test_udt_bigint>>
);
CREATE TABLE test_tbl_int (
row_id varchar PRIMARY KEY,
udt_data map<varchar, frozen<test_udt>>
);
创建这些对象后,我使用 cqlsh 插入数据,它成功了,我可以使用 select 命令检索数据。但是通过JAVA插入数据后,会出现很多问题。
这是我用来插入数据的存储库: https://github.com/sophiah/cassandra_test/tree/master/cassandra-test-udt
将数据插入 test_tbl_udt 后,一切看起来都很好,我可以像往常一样通过 cqlsh select:
cqlsh:testcassandra> select * from test_tbl_int;
row_id | udt_data
--------+------------------------------------------------
test | {'key-01': {id: 'mapkey-01 ', data: {10: 20}}}
xxx | {'key-01': {id: 'mapkey-01', data: {10: 20}}}
但是,在将数据插入 test_tbl_bigint 之后,有一些东西 = 错误:
cqlsh:testcassandra> select * from test_tbl_int;
Traceback (most recent call last):
File "bin/cqlsh", line 1093, in perform_simple_statement
rows = self.session.execute(statement, trace=self.tracing_enabled)
File "/opt/apache-cassandra-2.1.11/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 1602, in execute
result = future.result()
File "/opt/apache-cassandra-2.1.11/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result
raise self._final_exception
error: unpack requires a string argument of length 4
cqlsh:testcassandra> select * from test_tbl_bigint;
NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.0.0.1 datacenter1>: ConnectionShutdown('Connection to 127.0.0.1 is defunct',)})
有什么建议吗?
谢谢
简短的回答是 table 名称在 da_test_tbl_bigint.java
中是错误的,它试图插入到 test_tbl_int
中。我还不清楚为什么驱动程序没有发现错误,我会在弄清楚后更新我的答案。