Cassandra 从地图中选择所有键

问题描述

我正在尝试从下面学生表中的课程地图中选择键

CREATE TABLE student (
   studentid TEXT,courses map<TEXT,TEXT>,PRIMARY KEY (studentid)      
);

插入此数据

UPDATE student SET courses = courses + { 'bio101': 'Intro to Bio'} where studentid='xyz' ;
UPDATE student SET courses = courses + { 'bio102': 'Advanced Bio'} where studentid='xyz' ;
UPDATE student SET courses = courses + { 'chem101': 'Intro to Chem'} where studentid='xyz' ;

我只想选择课程地图中的键。所以

courseId
--------
'bio101'
'bio102'
'chem101'

我尝试过

的变体
select courses from student where studentid='xyz';

但我似乎不能只选择那一列。

解决方法

您可以尝试使用 UDF

CREATE OR REPLACE FUNCTION keys (input Map<Text,Text>) 
RETURNS NULL ON NULL INPUT 
RETURNS Set<Text> 
LANGUAGE java AS 'return input.keySet();';

您必须启用 UDF,因为它默认禁用。在 cassandra.yaml 中找到 enable_user_defined_functions 并将 false 替换为 true。重新启动您的 Cassandra。

稍微改变你的查询。

select keys(courses) from student where studentid='xyz';