blob: d6b099bee6a40b0d781ce862c1d3130074ce7212 [file] [log] [blame]
--! qt:dataset:alltypesorc,alltypesparquet,cbo_t1,cbo_t2,cbo_t3,lineitem,part,src,src1,src_cbo,src_json,src_sequencefile,src_thrift,srcbucket,srcbucket2,srcpart
--! qt:sysdb
-- Continue on errors, we do check some error conditions below.
set hive.cli.errors.ignore=true;
set hive.test.authz.sstd.hs2.mode=true;
-- Prevent NPE in calcite.
set hive.cbo.enable=false;
-- Force DN to create db_privs tables.
show grant user hive_test_user;
-- SORT_QUERY_RESULTS
--
-- Actual tests.
--
-- Empty resource plans.
SHOW RESOURCE PLANS;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Show how ENABLE WORKLOAD MANAGEMENT not works :)
EXPLAIN ENABLE WORKLOAD MANAGEMENT;
ENABLE WORKLOAD MANAGEMENT;
-- Create and show plan_1.
CREATE RESOURCE PLAN plan_1;
EXPLAIN SHOW RESOURCE PLANS;
SHOW RESOURCE PLANS;
EXPLAIN SHOW RESOURCE PLAN plan_1;
SHOW RESOURCE PLAN plan_1;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Create and show plan_2.
EXPLAIN CREATE RESOURCE PLAN plan_2 WITH QUERY_PARALLELISM=5;
CREATE RESOURCE PLAN plan_2 WITH QUERY_PARALLELISM=5;
EXPLAIN ALTER RESOURCE PLAN plan_2 SET QUERY_PARALLELISM=10;
ALTER RESOURCE PLAN plan_2 SET QUERY_PARALLELISM=10;
SHOW RESOURCE PLANS;
SHOW RESOURCE PLAN plan_2;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Create plan with existing name, should fail
CREATE RESOURCE PLAN plan_2;
-- Create plan with existing name with IF NOT EXISTS
CREATE RESOURCE PLAN IF NOT EXISTS plan_2;
-- Should fail cannot set pool in create.
CREATE RESOURCE PLAN plan_3 WITH QUERY_PARALLELISM=5, DEFAULT POOL = `all`;
--
-- Rename resource plans.
--
-- Fail, duplicate name.
ALTER RESOURCE PLAN plan_1 RENAME TO plan_2;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Success.
ALTER RESOURCE PLAN plan_1 RENAME TO plan_3;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Change query parallelism, success.
ALTER RESOURCE PLAN plan_3 SET QUERY_PARALLELISM = 4;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Change query parallelism, success.
ALTER RESOURCE PLAN plan_3 UNSET QUERY_PARALLELISM;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Will fail for now; there are no pools.
EXPLAIN ALTER RESOURCE PLAN plan_3 SET QUERY_PARALLELISM = 30, DEFAULT POOL = default1;
ALTER RESOURCE PLAN plan_3 SET QUERY_PARALLELISM = 30, DEFAULT POOL = default1;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Shouldn't be able to rename or modify an enabled plan.
EXPLAIN ALTER RESOURCE PLAN plan_3 ENABLE;
ALTER RESOURCE PLAN plan_3 ENABLE;
EXPLAIN ALTER RESOURCE PLAN plan_3 RENAME TO plan_4;
ALTER RESOURCE PLAN plan_3 RENAME TO plan_4;
ALTER RESOURCE PLAN plan_3 SET QUERY_PARALLELISM = 30;
ALTER RESOURCE PLAN plan_3 DISABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
--
-- Activate, enable, disable.
--
-- DISABLED -> ACTIVE fail.
ALTER RESOURCE PLAN plan_3 ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- DISABLED -> DISABLED success.
ALTER RESOURCE PLAN plan_3 DISABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- DISABLED -> ENABLED success.
ALTER RESOURCE PLAN plan_3 ENABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ENABLED -> ACTIVE success.
ALTER RESOURCE PLAN plan_3 ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ACTIVE -> ACTIVE success.
ALTER RESOURCE PLAN plan_3 ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ACTIVE -> ENABLED fail.
ALTER RESOURCE PLAN plan_3 ENABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ACTIVE -> DISABLED fail.
ALTER RESOURCE PLAN plan_3 DISABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- DISABLE WM - ok.
EXPLAIN DISABLE WORKLOAD MANAGEMENT;
DISABLE WORKLOAD MANAGEMENT;
SELECT * FROM SYS.WM_RESOURCEPLANS;
ALTER RESOURCE PLAN plan_3 DISABLE;
-- Enable + activate ok.
ALTER RESOURCE PLAN plan_3 ENABLE ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- DISABLED -> ENABLED success.
ALTER RESOURCE PLAN plan_2 ENABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- plan_2: ENABLED -> ACTIVE and plan_3: ACTIVE -> ENABLED, success.
ALTER RESOURCE PLAN plan_2 ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ENABLED -> ENABLED success.
ALTER RESOURCE PLAN plan_3 ENABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- ENABLED -> DISABLED success.
ALTER RESOURCE PLAN plan_3 DISABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
--
-- Drop resource plan.
--
-- Fail, active plan.i
EXPLAIN DROP RESOURCE PLAN plan_2;
DROP RESOURCE PLAN plan_2;
-- Success.
DROP RESOURCE PLAN plan_3;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Drop non existing resource plan, should fail
DROP RESOURCE PLAN plan_99999;
-- Drop non existing resource plan with IF EXISTS
DROP RESOURCE PLAN IF EXISTS plan_99999;
-- Use reserved keyword table as name.
CREATE RESOURCE PLAN `table`;
ALTER RESOURCE PLAN `table` SET QUERY_PARALLELISM = 1;
SELECT * FROM SYS.WM_RESOURCEPLANS;
--
-- Create trigger commands.
--
-- Test that WM literals do not cause conflicts.
create table wm_test(key string);
select key as 30min from wm_test;
select "10kb" as str from wm_test;
drop table wm_test;
CREATE RESOURCE PLAN plan_1;
EXPLAIN CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > '10kb' DO KILL;
CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > '10kb' DO KILL;
SELECT * FROM SYS.WM_TRIGGERS;
-- Duplicate should fail.
CREATE TRIGGER plan_1.trigger_1 WHEN ELAPSED_TIME > 300 DO KILL;
-- Invalid triggers should fail.
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > '30sec' AND BYTES_READ > 10 DO MOVE TO slow_pool;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > '30second' OR BYTES_READ > 10 DO MOVE TO slow_pool;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME >= '30seconds' DO MOVE TO slow_pool;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME < '30hour' DO MOVE TO slow_pool;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME <= '30min' DO MOVE TO slow_pool;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME = '0day' DO MOVE TO slow_pool;
-- invalid size unit
CREATE TRIGGER plan_1.trigger_2 WHEN BYTES_READ > '10k' DO KILL;
-- invalid time unit
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > '10 millis' DO KILL;
-- invalid long value
CREATE TRIGGER plan_1.trigger_2 WHEN BYTES_READ > '-1000' DO KILL;
CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > '30hour' DO MOVE TO slow_pool;
SELECT * FROM SYS.WM_TRIGGERS;
EXPLAIN ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > '1GB' DO KILL;
ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > '1GB' DO KILL;
SELECT * FROM SYS.WM_TRIGGERS;
EXPLAIN DROP TRIGGER plan_1.trigger_1;
DROP TRIGGER plan_1.trigger_1;
SELECT * FROM SYS.WM_TRIGGERS;
-- No edit on active resource plan.
CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > '100mb' DO MOVE TO null_pool;
-- Add trigger with reserved keywords.
CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > '100KB' DO MOVE TO `default`;
CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > '100MB' DO MOVE TO `default`;
CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > "1GB" DO MOVE TO `default`;
CREATE TRIGGER `table`.`trigger1` WHEN ELAPSED_TIME > 10 DO KILL;
CREATE TRIGGER `table`.`trigger2` WHEN ELAPSED_TIME > '1hour' DO KILL;
SELECT * FROM SYS.WM_TRIGGERS;
DROP TRIGGER `table`.`database`;
SELECT * FROM SYS.WM_TRIGGERS;
-- Cannot drop/change trigger from enabled plan.
ALTER RESOURCE PLAN plan_1 ENABLE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
DROP TRIGGER plan_1.trigger_2;
ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > "1000gb" DO KILL;
-- Cannot drop/change trigger from active plan.
ALTER RESOURCE PLAN plan_1 ACTIVATE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
DROP TRIGGER plan_1.trigger_2;
ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > "1000KB" DO KILL;
-- Once disabled we should be able to change it.
ALTER RESOURCE PLAN plan_2 DISABLE;
CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 0 DO MOVE TO null_pool;
SELECT * FROM SYS.WM_TRIGGERS;
--
-- Create pool command.
--
-- Cannot create pool in active plans.
EXPLAIN CREATE POOL plan_1.default WITH
ALLOC_FRACTION=1.0, QUERY_PARALLELISM=5, SCHEDULING_POLICY='default';
CREATE POOL plan_1.default WITH
ALLOC_FRACTION=1.0, QUERY_PARALLELISM=5, SCHEDULING_POLICY='default';
CREATE POOL plan_2.default WITH QUERY_PARALLELISM=5, SCHEDULING_POLICY='default';
CREATE POOL plan_2.default WITH ALLOC_FRACTION=1.0;
CREATE POOL plan_2.default WITH ALLOC_FRACTION=1.0, QUERY_PARALLELISM=5;
SELECT * FROM SYS.WM_POOLS;
CREATE POOL plan_2.default.c1 WITH
ALLOC_FRACTION=0.3, QUERY_PARALLELISM=3, SCHEDULING_POLICY='invalid';
CREATE POOL plan_2.default.c1 WITH
ALLOC_FRACTION=0.3, QUERY_PARALLELISM=3, SCHEDULING_POLICY='fair';
CREATE POOL plan_2.default.c2 WITH
QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.75;
-- Cannot activate c1 + c2 = 1.0
EXPLAIN ALTER RESOURCE PLAN plan_2 VALIDATE;
ALTER RESOURCE PLAN plan_2 VALIDATE;
ALTER RESOURCE PLAN plan_2 ENABLE ACTIVATE;
EXPLAIN ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.7, QUERY_PARALLELISM = 1;
ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.7, QUERY_PARALLELISM = 1;
ALTER POOL plan_2.default.c2 SET SCHEDULING_POLICY='fair';
SELECT * FROM SYS.WM_POOLS;
ALTER POOL plan_2.default.c2 UNSET SCHEDULING_POLICY;
SELECT * FROM SYS.WM_POOLS;
-- Now we can activate.
ALTER RESOURCE PLAN plan_2 VALIDATE;
ALTER RESOURCE PLAN plan_2 ENABLE ACTIVATE;
ALTER RESOURCE PLAN plan_1 ACTIVATE;
ALTER RESOURCE PLAN plan_2 DISABLE;
ALTER POOL plan_2.default SET path = def;
SELECT * FROM SYS.WM_POOLS;
EXPLAIN DROP POOL plan_2.default;
DROP POOL plan_2.default;
SELECT * FROM SYS.WM_POOLS;
-- Create failed no parent pool found.
CREATE POOL plan_2.child1.child2 WITH
QUERY_PARALLELISM=2, SCHEDULING_POLICY='fifo', ALLOC_FRACTION=0.8;
-- Create nested pools.
CREATE POOL `table`.`table` WITH
SCHEDULING_POLICY='fifo', ALLOC_FRACTION=0.5, QUERY_PARALLELISM=1;
CREATE POOL `table`.`table`.pool1 WITH
SCHEDULING_POLICY='fair', QUERY_PARALLELISM=3, ALLOC_FRACTION=0.9;
CREATE POOL `table`.`table`.pool1.child1 WITH
SCHEDULING_POLICY='fair', QUERY_PARALLELISM=1, ALLOC_FRACTION=0.3;
CREATE POOL `table`.`table`.pool1.child2 WITH
SCHEDULING_POLICY='fair', QUERY_PARALLELISM=3, ALLOC_FRACTION=0.7;
ALTER POOL `table`.`table` SET ALLOC_FRACTION=0.0;
SELECT * FROM SYS.WM_POOLS;
-- Rename with child pools and parent pool.
ALTER POOL `table`.`table`.pool1 SET PATH = `table`.pool;
SELECT * FROM SYS.WM_POOLS;
-- Fails has child pools.
DROP POOL `table`.`table`;
SELECT * FROM SYS.WM_POOLS;
-- Fails default is default pool :-).
DROP POOL `table`.default;
SELECT * FROM SYS.WM_POOLS;
SELECT * FROM SYS.WM_RESOURCEPLANS;
-- Changed default pool, now it should work.
EXPLAIN ALTER RESOURCE PLAN `table` SET DEFAULT POOL = `table`.pool, QUERY_PARALLELISM=2;
ALTER RESOURCE PLAN `table` SET DEFAULT POOL = `table`.pool, QUERY_PARALLELISM=2;
SELECT * FROM SYS.WM_RESOURCEPLANS;
EXPLAIN ALTER RESOURCE PLAN `table` UNSET DEFAULT POOL, QUERY_PARALLELISM;
ALTER RESOURCE PLAN `table` UNSET DEFAULT POOL, QUERY_PARALLELISM;
SELECT * FROM SYS.WM_RESOURCEPLANS;
ALTER RESOURCE PLAN `table` SET DEFAULT POOL = `table`.pool, QUERY_PARALLELISM=1;
DROP POOL `table`.default;
SELECT * FROM SYS.WM_POOLS;
-- Change query parallelism, success.
ALTER RESOURCE PLAN `table` UNSET DEFAULT POOL;
SELECT * FROM SYS.WM_RESOURCEPLANS;
--
-- Pool to trigger mappings.
--
-- Success.
EXPLAIN ALTER POOL plan_2.def.c1 ADD TRIGGER trigger_1;
ALTER POOL plan_2.def.c1 ADD TRIGGER trigger_1;
ALTER POOL plan_2.def.c2 ADD TRIGGER trigger_1;
-- With keywords, hopefully nobody does this.
ALTER POOL `table`.`table` ADD TRIGGER `table`;
-- Test m:n mappings.
ALTER POOL `table`.`table`.pool.child1 ADD TRIGGER `table`;
ALTER POOL `table`.`table`.pool.child1 ADD TRIGGER `trigger1`;
ALTER TRIGGER `table`.`trigger1` ADD TO POOL `table`.pool.child2;
ALTER POOL `table`.`table`.pool.child2 ADD TRIGGER `trigger2`;
ALTER TRIGGER `table`.`trigger1` ADD TO UNMANAGED;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
SHOW RESOURCE PLAN `table`;
ALTER TRIGGER `table`.`trigger1` DROP FROM POOL `table`.pool.child2;
ALTER TRIGGER `table`.`trigger1` DROP FROM UNMANAGED;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
-- Failures.
-- pool does not exist.
ALTER POOL plan_2.default ADD TRIGGER trigger_1;
-- Trigger does not exist.
ALTER POOL plan_2.def ADD TRIGGER trigger_2;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
-- Drop success.
EXPLAIN ALTER POOL plan_2.def.c1 DROP TRIGGER trigger_1;
ALTER POOL plan_2.def.c1 DROP TRIGGER trigger_1;
-- Drop fail, does not exist.
ALTER POOL plan_2.def.c1 DROP TRIGGER trigger_2;
-- Drops related mappings too.
DROP POOL `table`.`table`.pool.child1;
DROP POOL `table`.`table`.pool.child2;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
--
-- User and group mappings.
--
EXPLAIN CREATE USER MAPPING "user1" IN plan_2 TO def;
CREATE USER MAPPING "user1" IN plan_2 TO def;
CREATE USER MAPPING 'user2' IN plan_2 TO def WITH ORDER 1;
CREATE GROUP MAPPING "group1" IN plan_2 TO def.c1;
CREATE APPLICATION MAPPING "app1" IN plan_2 TO def.c1;
CREATE GROUP MAPPING 'group2' IN plan_2 TO def.c2 WITH ORDER 1;
EXPLAIN CREATE GROUP MAPPING 'group3' IN plan_2 UNMANAGED WITH ORDER 1;
CREATE GROUP MAPPING 'group3' IN plan_2 UNMANAGED WITH ORDER 1;
EXPLAIN ALTER USER MAPPING "user1" IN plan_2 UNMANAGED;
ALTER USER MAPPING "user1" IN plan_2 UNMANAGED;
SHOW RESOURCE PLAN plan_2;
SELECT * FROM SYS.WM_MAPPINGS;
-- Drop pool failed, pool in use.
DROP POOL plan_2.def.c1;
EXPLAIN DROP USER MAPPING "user2" in plan_2;
DROP USER MAPPING "user2" in plan_2;
EXPLAIN DROP GROUP MAPPING "group2" in plan_2;
DROP GROUP MAPPING "group2" in plan_2;
DROP GROUP MAPPING "group3" in plan_2;
DROP APPLICATION MAPPING "app1" in plan_2;
SELECT * FROM SYS.WM_MAPPINGS;
CREATE RESOURCE PLAN plan_4;
ALTER RESOURCE PLAN plan_4 ENABLE ACTIVATE;
SHOW RESOURCE PLAN plan_2;
-- This should remove all pools, triggers & mappings.
DROP RESOURCE PLAN plan_2;
-- This should create plan_2 with default pool and null query parallelism.
CREATE RESOURCE PLAN plan_2;
SELECT * FROM SYS.WM_RESOURCEPLANS;
SELECT * FROM SYS.WM_POOLS;
SELECT * FROM SYS.WM_TRIGGERS;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
SELECT * FROM SYS.WM_MAPPINGS;
-- Create like another plan; modify, replace. Create all manner of things to make sure LIKE works.
CREATE RESOURCE PLAN plan_4a LIKE plan_4;
CREATE POOL plan_4a.pool1 WITH SCHEDULING_POLICY='fair', QUERY_PARALLELISM=2, ALLOC_FRACTION=0.0;
CREATE USER MAPPING "user1" IN plan_4a TO pool1;
CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ > '10GB' DO KILL;
CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ > '11GB' DO KILL;
ALTER POOL plan_4a.pool1 ADD TRIGGER trigger_2;
CREATE RESOURCE PLAN plan_4b LIKE plan_4a;
CREATE POOL plan_4b.pool2 WITH SCHEDULING_POLICY='fair', QUERY_PARALLELISM=3, ALLOC_FRACTION=0.0;
SELECT * FROM SYS.WM_RESOURCEPLANS;
SELECT * FROM SYS.WM_POOLS;
SELECT * FROM SYS.WM_TRIGGERS;
SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS;
SELECT * FROM SYS.WM_MAPPINGS;
EXPLAIN REPLACE RESOURCE PLAN plan_4a WITH plan_4b;
REPLACE RESOURCE PLAN plan_4a WITH plan_4b;
SELECT * FROM SYS.WM_RESOURCEPLANS;
SELECT * FROM SYS.WM_POOLS;
SHOW RESOURCE PLAN plan_4a_old_0;
REPLACE ACTIVE RESOURCE PLAN WITH plan_4a;
SELECT * FROM SYS.WM_RESOURCEPLANS;
CREATE RESOURCE PLAN plan_4a LIKE plan_4;
CREATE POOL plan_4a.pool3 WITH SCHEDULING_POLICY='fair', QUERY_PARALLELISM=3, ALLOC_FRACTION=0.0;
EXPLAIN ALTER RESOURCE PLAN plan_4a ENABLE ACTIVATE WITH REPLACE;
ALTER RESOURCE PLAN plan_4a ENABLE ACTIVATE WITH REPLACE;
SELECT * FROM SYS.WM_RESOURCEPLANS;
SELECT * FROM SYS.WM_POOLS;