Cassandra/Datastax:如何在 java 中获取具有列表数据类型的列的值

Posted

技术标签:

【中文标题】Cassandra/Datastax:如何在 java 中获取具有列表数据类型的列的值【英文标题】:Cassandra/Datastax: How to get values of column having list datatype in java 【发布时间】:2019-11-18 14:56:58 【问题描述】:

我在 cassandra 中执行了一个查询,其中我有 3 列,第三列的数据类型为 List 查询结果格式如下:

||Col 1 (varchar)||Col 2 (varchar)||Col 3 (list)||
|value 1.1|value 2.1|"option 1":"value 1","option 2":"value 2"

我想获取 3 列的值并存储在某个变量中

我尝试了 .getList 选项,但它不起作用并引发异常,因此无法找到任何其他方法。

因此无法附上示例代码。

【问题讨论】:

可以分享代码吗? 你确定它是列表吗?从格式化我会说这是一个map 【参考方案1】:

Alex 提出了一个很好的观点,即您的数据采用 List 格式,而不是 Map。话虽如此,我将使用 DataStax Java Driver v3.6 发布代码,展示如何拉回 List 和 Map。

首先,我创建了一个包含两种类型集合的示例表,并添加了一些值:

aaron@cqlsh:***> CREATE TABLE collections (key TEXT PRIMARY KEY,
   testList LIST<TEXT>, testMap MAP<TEXT,TEXT>);
aaron@cqlsh:***> INSERT INTO collections (key,testList,testMap)
   VALUES ('a',['one','two','three'],'option 1':'value 1','option 2':'value 2','option 3':'value 3');

我通过一个简单的查询验证了它的工作原理:

aaron@cqlsh:***> SELECT key, testlist, testmap
    FROM ***.collections WHERE key='a';

 key | testlist                | testmap
-----+-------------------------+-----------------------------------------------------------------------
   a | ['one', 'two', 'three'] | 'option 1': 'value 1', 'option 2': 'value 2', 'option 3': 'value 3'

(1 rows)

我构建了一个简单的应用程序,使用一个自定义的CassandraConnection 类来处理我的集群和会话对象、连接并运行一个简单的session.execute(strQuery);。然后在我的 Java 测试应用程序中,这可以工作:

String strSELECT2 ="SELECT key, testlist, testmap "
        + "FROM ***.collections WHERE key='a'";       
ResultSet rows2 = conn.query(strSELECT2);

for (Row row : rows2) 
    System.out.print(
        row.getString("key") + " " +
        "\nList:" + row.getList("testlist", String.class).toString() + " " +
        "\nMap:" + row.getMap("testmap", String.class, String.class));

并产生这个结果:

a 
List:[one, two, three] 
Map:option 1=value 1, option 2=value 2, option 3=value 3

【讨论】:

以上是关于Cassandra/Datastax:如何在 java 中获取具有列表数据类型的列的值的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra datastax 给出错误“所有主机尝试查询失败”

Cassandra (Datastax) CQL 忽略 TEXT 列的大小写

Cassandra datastax 驱动程序的 Pentaho 问题

无法使用 cassandra datastax 生成 solr 架构

c# cassandra DataStax驱动版本兼容性

cassandra datastax 编写生成的代码时出现意外错误:java.lang.NullPointerException