376 lines
15 KiB
SQL
376 lines
15 KiB
SQL
/*
|
|
* This file is used to test the function of vecexpression.cpp --- test(3)
|
|
*/
|
|
/*******************************
|
|
Expression Type:
|
|
T_Var,
|
|
T_Const,
|
|
T_Param,
|
|
T_Aggref,
|
|
T_WindowFunc,
|
|
T_ArrayRef,
|
|
T_FuncExpr,
|
|
T_NamedArgExpr,
|
|
T_OpExpr,
|
|
T_DistinctExpr,
|
|
T_NullIfExpr,
|
|
T_ScalarArrayOpExpr,
|
|
T_BoolExpr,
|
|
T_SubLink,
|
|
T_SubPlan,
|
|
T_AlternativeSubPlan,
|
|
T_FieldSelect,
|
|
T_FieldStore,
|
|
T_RelabelType,
|
|
T_CoerceViaIO,
|
|
T_ArrayCoerceExpr,
|
|
T_ConvertRowtypeExpr,
|
|
T_CollateExpr,
|
|
T_CaseExpr,
|
|
T_CaseWhen,
|
|
T_CaseTestExpr,
|
|
T_ArrayExpr,
|
|
T_RowExpr,
|
|
T_RowCompareExpr,
|
|
T_CoalesceExpr,
|
|
T_MinMaxExpr,
|
|
T_XmlExpr,
|
|
T_NullTest,
|
|
T_BooleanTest
|
|
|
|
Using Type:
|
|
qual
|
|
targetlist
|
|
*********************************/
|
|
|
|
----
|
|
--- test 16: tidout for column table
|
|
----
|
|
CREATE TABLE tidout_table(a INT) WITH (ORIENTATION=COLUMN);
|
|
INSERT INTO tidout_table VALUES(1);
|
|
SELECT ctid FROM tidout_table;
|
|
SELECT ctid::TEXT FROM tidout_table;
|
|
SELECT ctid||'aa' FROM tidout_table;
|
|
SELECT ctid||a FROM tidout_table;
|
|
SELECT ctid,a FROM tidout_table;
|
|
DROP TABLE tidout_table;
|
|
|
|
----
|
|
--- case ICBC: Special Case
|
|
----
|
|
SELECT Agt_Num,Agt_Modif_Num, Party_id, Int_Org_Num, Curr_Cd, Open_Dt, avgbal
|
|
FROM
|
|
(SELECT
|
|
T1.Agt_Num
|
|
,T1.Agt_Modif_Num
|
|
,T1.Party_id
|
|
,CASE WHEN T1.Proc_Org_Num <> '' AND SUBSTR(T1.Proc_Org_Num,9,4) NOT IN ('0000','9999')
|
|
THEN T1.Proc_Org_Num
|
|
ELSE T1.Int_Org_Num
|
|
END AS Int_Org_Num
|
|
,T1.Curr_Cd
|
|
,T1.Open_Dt
|
|
,CAST(T1.Year_Dpsit_Accum/(TO_DATE('20140825', 'YYYYMMDD')-TO_DATE('20131231', 'YYYYMMDD')) AS DECIMAL(18,2)) AS avgbal
|
|
FROM dwSumData_act.C03_SEMI_CRDT_CARD_ACCT T1
|
|
WHERE T1.Data_Dt<=TO_DATE('20140825', 'YYYYMMDD')
|
|
AND T1.Data_Dt>=TO_DATE('20140101', 'YYYYMMDD')
|
|
AND T1.Party_Class_Cd=0
|
|
) A order by 1,2,3,4,5,6,7;
|
|
SELECT Agt_Num,Agt_Modif_Num, Party_id, Int_Org_Num, Curr_Cd, Open_Dt, avgbal
|
|
FROM
|
|
(SELECT
|
|
T1.Agt_Num
|
|
,T1.Agt_Modif_Num
|
|
,T1.Party_id
|
|
,CASE WHEN T1.Proc_Org_Num <> '' AND SUBSTR(T1.Proc_Org_Num,9,4) NOT IN ('0000','9999')
|
|
THEN T1.Proc_Org_Num
|
|
ELSE T1.Int_Org_Num
|
|
END AS Int_Org_Num
|
|
,T1.Curr_Cd
|
|
,T1.Open_Dt
|
|
,CAST(T1.Year_Dpsit_Accum/(TO_DATE('20140825', 'YYYYMMDD')-TO_DATE('20131231', 'YYYYMMDD')) AS DECIMAL(18,2)) AS avgbal
|
|
,ROW_NUMBER() OVER(PARTITION BY T1.Agt_Num,T1.Agt_Modif_Num ORDER BY T1.Data_Dt DESC) AS Agt_Num_ORDER
|
|
FROM dwSumData_act.C03_SEMI_CRDT_CARD_ACCT T1
|
|
WHERE T1.Data_Dt<=TO_DATE('20140825', 'YYYYMMDD')
|
|
AND T1.Data_Dt>=TO_DATE('20140101', 'YYYYMMDD')
|
|
AND T1.Party_Class_Cd=0
|
|
) A WHERE Agt_Num_ORDER = 1 order by 1,2,3,4,5,6,7;
|
|
|
|
|
|
|
|
create table tr_case(
|
|
rn bigint,
|
|
c1 character varying(60),
|
|
c2 character varying(60),
|
|
c3 date,
|
|
c4 character varying(60),
|
|
c5 date,
|
|
c6 character varying(60)
|
|
);
|
|
insert into tr_case values(299295,'2','99991231','2014-10-22','00000000000000001',null,'1');
|
|
insert into tr_case values(299296,'2','99991231','2014-10-22','00000000000000001',null,'1');
|
|
insert into tr_case values(299294,'2','99991231','2014-10-22','00000000000000001',null,'1');
|
|
insert into tr_case values(299290,'2','99991231','2014-10-22','00000000000000001',null,'1');
|
|
|
|
|
|
create table tc_case with (orientation = column) as select * from tr_case;
|
|
|
|
select case when
|
|
(case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
|
|
then c3
|
|
else '19000102' end from tc_case;
|
|
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 1 )
|
|
then cast(c2 as date)
|
|
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2)
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tc_case order by 1;
|
|
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tc_case
|
|
minus all
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tr_case order by 1;
|
|
|
|
select case when
|
|
(case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
|
|
then c3
|
|
else '19000102' end from tc_case;
|
|
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 1 )
|
|
then cast(c2 as date)
|
|
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2)
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tc_case order by 1;
|
|
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tc_case
|
|
minus all
|
|
select rn, c1,c2,c3 ,c4,c5,c6,
|
|
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
|
|
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
|
|
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
|
|
then coalesce(c5, cast('19000102' as date))
|
|
else cast('19000102' as date)
|
|
end
|
|
from tr_case order by 1;
|
|
|
|
----
|
|
--- Clean Resource and Tables
|
|
----
|
|
CREATE TABLE t1_case_col
|
|
(
|
|
TRANSACTION_ID CHAR(6)
|
|
,AVG_CPU DECIMAL(12,4)
|
|
,TRANNUM DECIMAL(10)
|
|
,SUM_CPU DECIMAL(12,3)
|
|
,DATA_DT CHAR(8)
|
|
)
|
|
with(orientation=column)
|
|
DISTRIBUTE BY HASH (TRANSACTION_ID)
|
|
;
|
|
insert into t1_case_col values('999999', 0, 0, 0, '20150317');
|
|
|
|
SELECT (SUM( CASE WHEN TRANSACTION_ID = '999999'
|
|
THEN SUM_CPU
|
|
ELSE 0
|
|
END
|
|
)/
|
|
CASE WHEN
|
|
SUM( CASE WHEN TRANSACTION_ID <> '999999'
|
|
THEN TRANNUM
|
|
ELSE 0
|
|
END
|
|
) = 0
|
|
THEN 99999999999999999
|
|
ELSE SUM( CASE WHEN TRANSACTION_ID <> '999999'
|
|
THEN TRANNUM
|
|
ELSE 0
|
|
END
|
|
)
|
|
END ) AS WEIGHT
|
|
FROM t1_case_col;
|
|
drop table t1_case_col;
|
|
|
|
CREATE TABLE t1_hashConst_col(col_1 int, col_2 int) with(orientation=column);
|
|
insert into t1_hashConst_col values(generate_series(1, 100), generate_series(1, 100));
|
|
select col_1, case when col_1 >= 10 then not col_2 when col_1 < 10 then not col_1 end from t1_hashConst_col order by 1;
|
|
drop table t1_hashConst_col;
|
|
|
|
create table t1_caseAnd_col(col_1 int, col_2 int, col_3 bool, col_4 bool)with(orientation=column);
|
|
copy t1_caseAnd_col FROM stdin;
|
|
0 2 0 0
|
|
0 5 1 1
|
|
0 5 1 1
|
|
\.
|
|
select col_1, col_2, col_3, col_4, (case when (col_1 = 0 and col_2 = 5) then (col_3 and col_4) when (col_1 = 0 and col_2 = 2) then (col_3 and col_4) else 0::bool end) from t1_caseAnd_col order by 1, 2;
|
|
drop table t1_caseAnd_col;
|
|
|
|
|
|
create table vector_expr_table_23(a int, b varchar(10), c text)with(orientation=column);
|
|
copy vector_expr_table_23 from stdin;
|
|
1 123 \N
|
|
1 123 456
|
|
1 2 28
|
|
\.
|
|
|
|
select * from vector_expr_table_23 where NULLIF(b, 3) < 9 OR Coalesce(c, '1') < 5000 order by 1,2,3;
|
|
|
|
execute direct on (datanode8) 'select concat(b,b), concat(c,c,c) from vector_expr_table_23 order by 1,2;';
|
|
|
|
|
|
create table customer_info_col
|
|
( ca_address integer not null,
|
|
ca_id varchar(20) ,
|
|
ca_email varchar(50)
|
|
)with (orientation=column) distribute by hash (ca_address);
|
|
|
|
create table date_text_col
|
|
( d_text varchar(2000),
|
|
d_cost int null
|
|
)with (orientation=column) distribute by hash (d_text);
|
|
|
|
insert into customer_info_col values (49597, '111111111111111111', 'aaaa' );
|
|
insert into customer_info_col values (49619, '222222222222222222', null );
|
|
|
|
insert into date_text_col values ('abcdefghijklmnopqrst', 15);
|
|
insert into date_text_col values ('abcdefghijklmnopqrst', null);
|
|
|
|
select t2.d_text,
|
|
length(t1.ca_id) as start,
|
|
length(t1.ca_email) as len,
|
|
substr(t2.d_text,length(t1.ca_id),length(t1.ca_email)) as vtext_sub
|
|
from customer_info_col as t1 , date_text_col as t2 order by 1, 2, 3, 4;
|
|
|
|
select d_cost, to_hex(d_cost) from date_text_col, customer_info_col order by 1, 2;
|
|
|
|
CREATE TABLE item_less_1 (
|
|
i_item_sk integer NOT NULL,
|
|
i_item_id character(16) NOT NULL,
|
|
i_rec_start_date timestamp(0) without time zone,
|
|
i_rec_end_date timestamp(0) without time zone,
|
|
i_item_desc character varying(200),
|
|
i_current_price numeric(7,2),
|
|
i_wholesale_cost numeric(20,6),
|
|
i_brand_id integer,
|
|
i_brand character(50),
|
|
i_class_id integer,
|
|
i_class character(50),
|
|
i_category_id integer,
|
|
i_category character(50),
|
|
i_manufact_id integer,
|
|
i_manufact character(50),
|
|
i_size numeric(20,2),
|
|
i_formulation character(50),
|
|
i_color numeric(19,18),
|
|
i_units numeric(19,0),
|
|
i_container numeric(39,2),
|
|
i_manager_id integer,
|
|
i_product_name character(50)
|
|
)
|
|
WITH (orientation=column, compression=low)
|
|
DISTRIBUTE BY REPLICATION;
|
|
|
|
COPY item_less_1 (i_item_sk, i_item_id, i_rec_start_date, i_rec_end_date, i_item_desc, i_current_price, i_wholesale_cost, i_brand_id, i_brand, i_class_id, i_class, i_category_id, i_category, i_manufact_id, i_manufact, i_size, i_formulation, i_color, i_units, i_container, i_manager_id, i_product_name) FROM stdin;
|
|
60 AAAAAAAAKDAAAAAA 2001-10-27 00:00:00 \N Cuts may hold already; daughters can like exclusively pregnant, fresh police; actual, 0.00 3243655.503585 3004002 maxicorp #5 9 womens watch 6 Jewelry 849 85.37 0.00 \N \N 60 898.40 19 barcally
|
|
\.
|
|
|
|
CREATE TABLE catalog_sales_less (
|
|
cs_sold_date_sk integer,
|
|
cs_sold_time_sk integer,
|
|
cs_ship_date_sk integer,
|
|
cs_bill_customer_sk character varying,
|
|
cs_bill_cdemo_sk numeric(30,20),
|
|
cs_bill_hdemo_sk character varying(19),
|
|
cs_bill_addr_sk character varying(39),
|
|
cs_ship_customer_sk bigint,
|
|
cs_ship_cdemo_sk numeric(10,2),
|
|
cs_ship_hdemo_sk numeric(20,7),
|
|
cs_ship_addr_sk numeric(10,0),
|
|
cs_call_center_sk double precision,
|
|
cs_catalog_page_sk numeric(19,0),
|
|
cs_ship_mode_sk numeric(20,18),
|
|
cs_warehouse_sk numeric(30,19),
|
|
cs_item_sk integer NOT NULL,
|
|
cs_promo_sk bigint,
|
|
cs_order_number bigint NOT NULL,
|
|
cs_quantity text,
|
|
cs_wholesale_cost numeric(7,2),
|
|
cs_list_price numeric(15,4),
|
|
cs_sales_price character varying(30),
|
|
cs_ext_discount_amt numeric(15,2),
|
|
cs_ext_sales_price numeric(13,6),
|
|
cs_ext_wholesale_cost double precision,
|
|
cs_ext_list_price numeric(7,2),
|
|
cs_ext_tax numeric(36,18),
|
|
cs_coupon_amt numeric(27,8),
|
|
cs_ext_ship_cost numeric(20,4),
|
|
cs_net_paid numeric(7,2),
|
|
cs_net_paid_inc_tax numeric(20,5),
|
|
cs_net_paid_inc_ship numeric(25,5),
|
|
cs_net_paid_inc_ship_tax numeric(18,9),
|
|
cs_net_profit numeric(30,20)
|
|
)
|
|
WITH (orientation=column, compression=low)
|
|
DISTRIBUTE BY HASH (cs_ext_tax, cs_coupon_amt, cs_net_paid_inc_tax)
|
|
PARTITION BY RANGE (cs_net_paid_inc_tax)
|
|
(
|
|
PARTITION p1 VALUES LESS THAN (-3768.01),
|
|
PARTITION p2 VALUES LESS THAN (-603.67),
|
|
PARTITION p3 VALUES LESS THAN (-339.35),
|
|
PARTITION p4 VALUES LESS THAN (-46.92),
|
|
PARTITION p5 VALUES LESS THAN (84.24),
|
|
PARTITION p6 VALUES LESS THAN (1098.66),
|
|
PARTITION p7 VALUES LESS THAN (MAXVALUE)
|
|
)
|
|
ENABLE ROW MOVEMENT;
|
|
|
|
COPY catalog_sales_less (cs_sold_date_sk, cs_sold_time_sk, cs_ship_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_bill_addr_sk, cs_ship_customer_sk, cs_ship_cdemo_sk, cs_ship_hdemo_sk, cs_ship_addr_sk, cs_call_center_sk, cs_catalog_page_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_list_price, cs_sales_price, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price, cs_ext_tax, cs_coupon_amt, cs_ext_ship_cost, cs_net_paid, cs_net_paid_inc_tax, cs_net_paid_inc_ship, cs_net_paid_inc_ship_tax, cs_net_profit) FROM stdin;
|
|
2451114 34062 2451155 9512 1743406.00000000000000000000 2547 43641 9512 1743406.00 2547.0000000 43641 2 202 5.000000000000000000 3.0000000000000000000 550 67 20797 41 7.59 8.2700 5.70 105.37 233.700000 311.189999999999998 339.07 2.330000000000000000 0.00000000 77.9000 233.70 236.03000 311.60000 313.930000000 -77.49000000000000000000
|
|
\.
|
|
|
|
select cs_wholesale_cost, cs_ext_list_price, i_color, cs_coupon_amt, cs_net_paid_inc_tax, i_container, cs_bill_cdemo_sk from item_less_1 inner join catalog_sales_less on cs_wholesale_cost <> greatest(cs_ext_list_price * i_color, cs_coupon_amt / cs_net_paid_inc_tax) and i_container <> cs_bill_cdemo_sk;
|
|
|
|
|
|
drop table item_less_1;
|
|
drop table catalog_sales_less;
|
|
|
|
-- Both COALESCE and GREATEST Expression
|
|
create table test_coalesce_greatest (id int, val1 numeric, val2 numeric) with(orientation=column) distribute by hash(id);
|
|
insert into test_coalesce_greatest values (1, 1, NULL), (1, NULL, 2), (1, 3, NULL), (1, NULL, 4);
|
|
select id, coalesce(val1, greatest(val2)) from test_coalesce_greatest order by 1, 2;
|
|
|
|
|