-- ============================================================ -- beforerun 函数链:set / add / mod / case -- 注意:beforerun 设置的变量作用范围为「当前 mql 请求」(同一条语句), -- 因此 beforerun 动作必须与使用变量的语句写在同一条语句内。 -- 校验前需 sleep 等待 Cassandra 索引可见(index.delay 默认 10s,实测约 2s)。 -- ============================================================ -- 1. beforerun set 设置变量(字符串需加引号) insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_set', 1, '{%s,myvar}') /** beforerun(set(myvar, 'hello_mql')) **/ ; /** sleep(2s) **/ ; select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_set' /** output() match("e_text","hello_mql") **/ ; -- 2. beforerun add 累加 insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_add', {%d,counter}, 'add test') /** beforerun(set(counter, 10), add(counter, 5)) **/ ; /** sleep(2s) **/ ; select e_name, e_value from /test/aaa/test_ext where e_name='beforerun_add' /** output() match("e_value",15) **/ ; -- 3. beforerun add 带单位(时间累加) insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_time', '{%t,ct}') /** beforerun(set(ct, '2024-01-01 00:00:00'), add(ct, 30, second)) **/ ; /** sleep(2s) **/ ; select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_time' /** output() match("e_text","2024-01-01 00:00:30") **/ ; -- 4. beforerun mod 取模 insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_mod', {%d,mod_val}, 'mod test 17%5') /** beforerun(set(mod_val, 17), mod(mod_val, 5)) **/ ; /** sleep(2s) **/ ; select e_name, e_value from /test/aaa/test_ext where e_name='beforerun_mod' /** output() match("e_value",2) **/ ; -- 5. beforerun case 条件判断(条件匹配) insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_case_yes', '{%s,case_result}') /** beforerun(set(case_val, 'yes'), set(case_result, 'default'), case(case_val=='yes', set(case_result, 'matched'))) **/ ; /** sleep(2s) **/ ; select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_case_yes' /** output() match("e_text","matched") **/ ; -- 6. beforerun case 条件不匹配 insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_case_no', '{%s,case_result}') /** beforerun(set(case_val, 'no'), set(case_result, 'default'), case(case_val=='yes', set(case_result, 'matched'))) **/ ; /** sleep(2s) **/ ; select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_case_no' /** output() match("e_text","default") **/ ;