问题描述
我正在尝试从下面学生表中的课程地图中选择键
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';