You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/03/20 20:43:59 UTC

[01/21] impala git commit: IMPALA-6551: Change Kudu TPCDS and TPCH columns to DECIMAL

Repository: impala
Updated Branches:
  refs/heads/2.x 7336839db -> b99a5d97b


http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q17.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q17.test b/testdata/workloads/tpch/queries/tpch-kudu-q17.test
deleted file mode 100644
index 81f9d35..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q17.test
+++ /dev/null
@@ -1,25 +0,0 @@
-====
----- QUERY: TPCH-Q17
-# Q17 - Small-Quantity-Order Revenue Query
-select
-  round(sum(l_extendedprice) / 7.0, 2) as avg_yearly
-from
-  lineitem,
-  part
-where
-  p_partkey = l_partkey
-  and p_brand = 'Brand#23'
-  and p_container = 'MED BOX'
-  and l_quantity < (
-    select
-      round(0.2 * avg(l_quantity), 2)
-    from
-      lineitem
-    where
-      l_partkey = p_partkey
-  )
----- RESULTS
-348406.05
----- TYPES
-double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q18.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q18.test b/testdata/workloads/tpch/queries/tpch-kudu-q18.test
deleted file mode 100644
index fc8f306..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q18.test
+++ /dev/null
@@ -1,98 +0,0 @@
-====
----- QUERY: TPCH-Q18
-# Q18 - Large Value Customer Query
-select
-  c_name,
-  c_custkey,
-  o_orderkey,
-  o_orderdate,
-  o_totalprice,
-  round(sum(l_quantity), 2)
-from
-  customer,
-  orders,
-  lineitem
-where
-  o_orderkey in (
-    select
-      l_orderkey
-    from
-      lineitem
-    group by
-      l_orderkey
-    having
-      sum(l_quantity) > 300
-    )
-  and c_custkey = o_custkey
-  and o_orderkey = l_orderkey
-group by
-  c_name,
-  c_custkey,
-  o_orderkey,
-  o_orderdate,
-  o_totalprice
-order by
-  o_totalprice desc,
-  o_orderdate
-limit 100
----- RESULTS
-'Customer#000128120',128120,4722021,'1994-04-07',544089.09,323
-'Customer#000144617',144617,3043270,'1997-02-12',530604.4399999999,317
-'Customer#000013940',13940,2232932,'1997-04-13',522720.61,304
-'Customer#000066790',66790,2199712,'1996-09-30',515531.82,327
-'Customer#000046435',46435,4745607,'1997-07-03',508047.99,309
-'Customer#000015272',15272,3883783,'1993-07-28',500241.33,302
-'Customer#000146608',146608,3342468,'1994-06-12',499794.58,303
-'Customer#000096103',96103,5984582,'1992-03-16',494398.79,312
-'Customer#000024341',24341,1474818,'1992-11-15',491348.26,302
-'Customer#000137446',137446,5489475,'1997-05-23',487763.25,311
-'Customer#000107590',107590,4267751,'1994-11-04',485141.38,301
-'Customer#000050008',50008,2366755,'1996-12-09',483891.26,302
-'Customer#000015619',15619,3767271,'1996-08-07',480083.96,318
-'Customer#000077260',77260,1436544,'1992-09-12',479499.43,307
-'Customer#000109379',109379,5746311,'1996-10-10',478064.11,302
-'Customer#000054602',54602,5832321,'1997-02-09',471220.08,307
-'Customer#000105995',105995,2096705,'1994-07-03',469692.58,307
-'Customer#000148885',148885,2942469,'1992-05-31',469630.44,313
-'Customer#000114586',114586,551136,'1993-05-19',469605.59,308
-'Customer#000105260',105260,5296167,'1996-09-06',469360.57,303
-'Customer#000147197',147197,1263015,'1997-02-02',467149.67,320
-'Customer#000064483',64483,2745894,'1996-07-04',466991.35,304
-'Customer#000136573',136573,2761378,'1996-05-31',461282.73,301
-'Customer#000016384',16384,502886,'1994-04-12',458378.92,312
-'Customer#000117919',117919,2869152,'1996-06-20',456815.92,317
-'Customer#000012251',12251,735366,'1993-11-24',455107.26,309
-'Customer#000120098',120098,1971680,'1995-06-14',453451.23,308
-'Customer#000066098',66098,5007490,'1992-08-07',453436.16,304
-'Customer#000117076',117076,4290656,'1997-02-05',449545.85,301
-'Customer#000129379',129379,4720454,'1997-06-07',448665.79,303
-'Customer#000126865',126865,4702759,'1994-11-07',447606.65,320
-'Customer#000088876',88876,983201,'1993-12-30',446717.46,304
-'Customer#000036619',36619,4806726,'1995-01-17',446704.09,328
-'Customer#000141823',141823,2806245,'1996-12-29',446269.12,310
-'Customer#000053029',53029,2662214,'1993-08-13',446144.49,302
-'Customer#000018188',18188,3037414,'1995-01-25',443807.22,308
-'Customer#000066533',66533,29158,'1995-10-21',443576.5,305
-'Customer#000037729',37729,4134341,'1995-06-29',441082.97,309
-'Customer#000003566',3566,2329187,'1998-01-04',439803.36,304
-'Customer#000045538',45538,4527553,'1994-05-22',436275.31,305
-'Customer#000081581',81581,4739650,'1995-11-04',435405.9,305
-'Customer#000119989',119989,1544643,'1997-09-20',434568.25,320
-'Customer#000003680',3680,3861123,'1998-07-03',433525.97,301
-'Customer#000113131',113131,967334,'1995-12-15',432957.75,301
-'Customer#000141098',141098,565574,'1995-09-24',430986.69,301
-'Customer#000093392',93392,5200102,'1997-01-22',425487.51,304
-'Customer#000015631',15631,1845057,'1994-05-12',419879.59,302
-'Customer#000112987',112987,4439686,'1996-09-17',418161.49,305
-'Customer#000012599',12599,4259524,'1998-02-12',415200.61,304
-'Customer#000105410',105410,4478371,'1996-03-05',412754.51,302
-'Customer#000149842',149842,5156581,'1994-05-30',411329.35,302
-'Customer#000010129',10129,5849444,'1994-03-21',409129.85,309
-'Customer#000069904',69904,1742403,'1996-10-19',408513,305
-'Customer#000017746',17746,6882,'1997-04-09',408446.93,303
-'Customer#000013072',13072,1481925,'1998-03-15',399195.47,301
-'Customer#000082441',82441,857959,'1994-02-07',382579.74,305
-'Customer#000088703',88703,2995076,'1994-01-30',363812.12,302
----- TYPES
-STRING, BIGINT, BIGINT, STRING, DOUBLE, DOUBLE
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q19.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q19.test b/testdata/workloads/tpch/queries/tpch-kudu-q19.test
deleted file mode 100644
index 7254390..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q19.test
+++ /dev/null
@@ -1,43 +0,0 @@
-====
----- QUERY: TPCH-Q19
-# Q19 - Discounted Revenue Query
-select
-  round(sum(l_extendedprice * (1 - l_discount)), 2) as revenue
-from
-  lineitem,
-  part
-where
-  p_partkey = l_partkey
-  and (
-    (
-      p_brand = 'Brand#12'
-      and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
-      and l_quantity >= 1 and l_quantity <= 11
-      and p_size between 1 and 5
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-    or
-    (
-      p_brand = 'Brand#23'
-      and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')
-      and l_quantity >= 10 and l_quantity <= 20
-      and p_size between 1 and 10
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-    or
-    (
-      p_brand = 'Brand#34'
-      and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
-      and l_quantity >= 20 and l_quantity <= 30
-      and p_size between 1 and 15
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-  )
----- RESULTS
-3083843.06
----- TYPES
-double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q2.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q2.test b/testdata/workloads/tpch/queries/tpch-kudu-q2.test
deleted file mode 100644
index 2a3b7f6..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q2.test
+++ /dev/null
@@ -1,151 +0,0 @@
-====
----- QUERY: TPCH-Q2
-# Q2 - Minimum Cost Supplier Query
-select
-  round(s_acctbal, 2),
-  s_name,
-  n_name,
-  p_partkey,
-  p_mfgr,
-  s_address,
-  s_phone,
-  s_comment
-from
-  part,
-  supplier,
-  partsupp,
-  nation,
-  region
-where
-  p_partkey = ps_partkey
-  and s_suppkey = ps_suppkey
-  and p_size = 15
-  and p_type like '%BRASS'
-  and s_nationkey = n_nationkey
-  and n_regionkey = r_regionkey
-  and r_name = 'EUROPE'
-  and ps_supplycost = (
-    select
-      min(ps_supplycost)
-    from
-      partsupp,
-      supplier,
-      nation,
-      region
-    where
-      p_partkey = ps_partkey
-      and s_suppkey = ps_suppkey
-      and s_nationkey = n_nationkey
-      and n_regionkey = r_regionkey
-      and r_name = 'EUROPE'
-    )
-order by
-  s_acctbal desc,
-  n_name,
-  s_name,
-  p_partkey
-limit 100
----- RESULTS
-9938.530000000001,'Supplier#000005359','UNITED KINGDOM',185358,'Manufacturer#4','QKuHYh,vZGiwu2FWEJoLDx04','33-429-790-6131','uriously regular requests hag'
-9937.84,'Supplier#000005969','ROMANIA',108438,'Manufacturer#1','ANDENSOSmk,miq23Xfb5RWt6dvUcvt6Qa','29-520-692-3537','efully express instructions. regular requests against the slyly fin'
-9936.219999999999,'Supplier#000005250','UNITED KINGDOM',249,'Manufacturer#4','B3rqp0xbSEim4Mpy2RH J','33-320-228-2957','etect about the furiously final accounts. slyly ironic pinto beans sleep inside the furiously'
-9923.77,'Supplier#000002324','GERMANY',29821,'Manufacturer#4','y3OD9UywSTOk','17-779-299-1839','ackages boost blithely. blithely regular deposits c'
-9871.219999999999,'Supplier#000006373','GERMANY',43868,'Manufacturer#5','J8fcXWsTqM','17-813-485-8637','etect blithely bold asymptotes. fluffily ironic platelets wake furiously; blit'
-9870.780000000001,'Supplier#000001286','GERMANY',81285,'Manufacturer#2','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
-9870.780000000001,'Supplier#000001286','GERMANY',181285,'Manufacturer#4','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
-9852.52,'Supplier#000008973','RUSSIA',18972,'Manufacturer#2','t5L67YdBYYH6o,Vz24jpDyQ9','32-188-594-7038','rns wake final foxes. carefully unusual depende'
-9847.83,'Supplier#000008097','RUSSIA',130557,'Manufacturer#2','xMe97bpE69NzdwLoX','32-375-640-3593',' the special excuses. silent sentiments serve carefully final ac'
-9847.57,'Supplier#000006345','FRANCE',86344,'Manufacturer#1','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
-9847.57,'Supplier#000006345','FRANCE',173827,'Manufacturer#2','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
-9836.93,'Supplier#000007342','RUSSIA',4841,'Manufacturer#4','JOlK7C1,7xrEZSSOw','32-399-414-5385','blithely carefully bold theodolites. fur'
-9817.1,'Supplier#000002352','RUSSIA',124815,'Manufacturer#2','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
-9817.1,'Supplier#000002352','RUSSIA',152351,'Manufacturer#3','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
-9739.860000000001,'Supplier#000003384','FRANCE',138357,'Manufacturer#2','o,Z3v4POifevE k9U1b 6J1ucX,I','16-494-913-5925','s after the furiously bold packages sleep fluffily idly final requests: quickly final'
-9721.950000000001,'Supplier#000008757','UNITED KINGDOM',156241,'Manufacturer#3','Atg6GnM4dT2','33-821-407-2995','eep furiously sauternes; quickl'
-9681.33,'Supplier#000008406','RUSSIA',78405,'Manufacturer#1',',qUuXcftUl','32-139-873-8571','haggle slyly regular excuses. quic'
-9643.549999999999,'Supplier#000005148','ROMANIA',107617,'Manufacturer#1','kT4ciVFslx9z4s79p Js825','29-252-617-4850','final excuses. final ideas boost quickly furiously speci'
-9624.82,'Supplier#000001816','FRANCE',34306,'Manufacturer#3','e7vab91vLJPWxxZnewmnDBpDmxYHrb','16-392-237-6726','e packages are around the special ideas. special, pending foxes us'
-9624.780000000001,'Supplier#000009658','ROMANIA',189657,'Manufacturer#1','oE9uBgEfSS4opIcepXyAYM,x','29-748-876-2014','ronic asymptotes wake bravely final'
-9612.940000000001,'Supplier#000003228','ROMANIA',120715,'Manufacturer#2','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
-9612.940000000001,'Supplier#000003228','ROMANIA',198189,'Manufacturer#4','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
-9571.83,'Supplier#000004305','ROMANIA',179270,'Manufacturer#2','qNHZ7WmCzygwMPRDO9Ps','29-973-481-1831','kly carefully express asymptotes. furiou'
-9558.1,'Supplier#000003532','UNITED KINGDOM',88515,'Manufacturer#4','EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp','33-152-301-2164',' foxes. quickly even excuses use. slyly special foxes nag bl'
-9492.790000000001,'Supplier#000005975','GERMANY',25974,'Manufacturer#5','S6mIiCTx82z7lV','17-992-579-4839','arefully pending accounts. blithely regular excuses boost carefully carefully ironic p'
-9461.049999999999,'Supplier#000002536','UNITED KINGDOM',20033,'Manufacturer#1','8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA','33-556-973-5522','. slyly regular deposits wake slyly. furiously regular warthogs are.'
-9453.01,'Supplier#000000802','ROMANIA',175767,'Manufacturer#1',',6HYXb4uaHITmtMBj4Ak57Pd','29-342-882-6463','gular frets. permanently special multipliers believe blithely alongs'
-9408.65,'Supplier#000007772','UNITED KINGDOM',117771,'Manufacturer#4','AiC5YAH,gdu0i7','33-152-491-1126','nag against the final requests. furiously unusual packages cajole blit'
-9359.610000000001,'Supplier#000004856','ROMANIA',62349,'Manufacturer#5','HYogcF3Jb yh1','29-334-870-9731','y ironic theodolites. blithely sile'
-9357.450000000001,'Supplier#000006188','UNITED KINGDOM',138648,'Manufacturer#1','g801,ssP8wpTk4Hm','33-583-607-1633','ously always regular packages. fluffily even accounts beneath the furiously final pack'
-9352.040000000001,'Supplier#000003439','GERMANY',170921,'Manufacturer#4','qYPDgoiBGhCYxjgC','17-128-996-4650',' according to the carefully bold ideas'
-9312.969999999999,'Supplier#000007807','RUSSIA',90279,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
-9312.969999999999,'Supplier#000007807','RUSSIA',100276,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
-9280.27,'Supplier#000007194','ROMANIA',47193,'Manufacturer#3','zhRUQkBSrFYxIAXTfInj vyGRQjeK','29-318-454-2133','o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully'
-9274.799999999999,'Supplier#000008854','RUSSIA',76346,'Manufacturer#3','1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa','32-524-148-5221','y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the'
-9249.35,'Supplier#000003973','FRANCE',26466,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
-9249.35,'Supplier#000003973','FRANCE',33972,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
-9208.700000000001,'Supplier#000007769','ROMANIA',40256,'Manufacturer#5','rsimdze 5o9P Ht7xS','29-964-424-9649','lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold '
-9201.469999999999,'Supplier#000009690','UNITED KINGDOM',67183,'Manufacturer#5','CB BnUTlmi5zdeEl7R7','33-121-267-9529','e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide'
-9192.1,'Supplier#000000115','UNITED KINGDOM',85098,'Manufacturer#3','nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV','33-597-248-1220','es across the carefully express accounts boost caref'
-9189.98,'Supplier#000001226','GERMANY',21225,'Manufacturer#4','qsLCqSvLyZfuXIpjz','17-725-903-1381',' deposits. blithely bold excuses about the slyly bold forges wake '
-9128.969999999999,'Supplier#000004311','RUSSIA',146768,'Manufacturer#5','I8IjnXd7NSJRs594RxsRR0','32-155-440-7120','refully. blithely unusual asymptotes haggle '
-9104.83,'Supplier#000008520','GERMANY',150974,'Manufacturer#4','RqRVDgD0ER J9 b41vR2,3','17-728-804-1793','ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print'
-9101,'Supplier#000005791','ROMANIA',128254,'Manufacturer#5','zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG','29-549-251-5384','ts. notornis detect blithely above the carefully bold requests. blithely even package'
-9094.57,'Supplier#000004582','RUSSIA',39575,'Manufacturer#1','WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf','32-587-577-1351','jole. regular accounts sleep blithely frets. final pinto beans play furiously past the '
-8996.870000000001,'Supplier#000004702','FRANCE',102191,'Manufacturer#5','8XVcQK23akp','16-811-269-8946','ickly final packages along the express plat'
-8996.139999999999,'Supplier#000009814','ROMANIA',139813,'Manufacturer#2','af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR','29-995-571-8781',' dependencies boost quickly across the furiously pending requests! unusual dolphins play sl'
-8968.42,'Supplier#000010000','ROMANIA',119999,'Manufacturer#5','aTGLEusCiL4F PDBdv665XBJhPyCOB0i','29-578-432-2146','ly regular foxes boost slyly. quickly special waters boost carefully ironi'
-8936.82,'Supplier#000007043','UNITED KINGDOM',109512,'Manufacturer#1','FVajceZInZdbJE6Z9XsRUxrUEpiwHDrOXi,1Rz','33-784-177-8208','efully regular courts. furiousl'
-8929.42,'Supplier#000008770','FRANCE',173735,'Manufacturer#4','R7cG26TtXrHAP9 HckhfRi','16-242-746-9248','cajole furiously unusual requests. quickly stealthy requests are. '
-8920.59,'Supplier#000003967','ROMANIA',26460,'Manufacturer#1','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
-8920.59,'Supplier#000003967','ROMANIA',173966,'Manufacturer#2','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
-8913.959999999999,'Supplier#000004603','UNITED KINGDOM',137063,'Manufacturer#2','OUzlvMUr7n,utLxmPNeYKSf3T24OXskxB5','33-789-255-7342',' haggle slyly above the furiously regular pinto beans. even '
-8877.82,'Supplier#000007967','FRANCE',167966,'Manufacturer#5','A3pi1BARM4nx6R,qrwFoRPU','16-442-147-9345','ously foxes. express, ironic requests im'
-8862.24,'Supplier#000003323','ROMANIA',73322,'Manufacturer#3','W9 lYcsC9FwBqk3ItL','29-736-951-3710','ly pending ideas sleep about the furiously unu'
-8841.59,'Supplier#000005750','ROMANIA',100729,'Manufacturer#5','Erx3lAgu0g62iaHF9x50uMH4EgeN9hEG','29-344-502-5481','gainst the pinto beans. fluffily unusual dependencies affix slyly even deposits.'
-8781.709999999999,'Supplier#000003121','ROMANIA',13120,'Manufacturer#5','wNqTogx238ZYCamFb,50v,bj 4IbNFW9Bvw1xP','29-707-291-5144','s wake quickly ironic ideas'
-8754.24,'Supplier#000009407','UNITED KINGDOM',179406,'Manufacturer#4','CHRCbkaWcf5B','33-903-970-9604','e ironic requests. carefully even foxes above the furious'
-8691.059999999999,'Supplier#000004429','UNITED KINGDOM',126892,'Manufacturer#2','k,BQms5UhoAF1B2Asi,fLib','33-964-337-5038','efully express deposits kindle after the deposits. final '
-8655.99,'Supplier#000006330','RUSSIA',193810,'Manufacturer#2','UozlaENr0ytKe2w6CeIEWFWn iO3S8Rae7Ou','32-561-198-3705','symptotes use about the express dolphins. requests use after the express platelets. final, ex'
-8638.360000000001,'Supplier#000002920','RUSSIA',75398,'Manufacturer#1','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
-8638.360000000001,'Supplier#000002920','RUSSIA',170402,'Manufacturer#3','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
-8607.690000000001,'Supplier#000006003','UNITED KINGDOM',76002,'Manufacturer#2','EH9wADcEiuenM0NR08zDwMidw,52Y2RyILEiA','33-416-807-5206','ar, pending accounts. pending depende'
-8569.52,'Supplier#000005936','RUSSIA',5935,'Manufacturer#5','jXaNZ6vwnEWJ2ksLZJpjtgt0bY2a3AU','32-644-251-7916','. regular foxes nag carefully atop the regular, silent deposits. quickly regular packages '
-8564.120000000001,'Supplier#000000033','GERMANY',110032,'Manufacturer#1','gfeKpYw3400L0SDywXA6Ya1Qmq1w6YB9f3R','17-138-897-9374','n sauternes along the regular asymptotes are regularly along the '
-8553.82,'Supplier#000003979','ROMANIA',143978,'Manufacturer#4','BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU','29-124-646-4897','ic requests wake against the blithely unusual accounts. fluffily r'
-8517.23,'Supplier#000009529','RUSSIA',37025,'Manufacturer#5','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
-8517.23,'Supplier#000009529','RUSSIA',59528,'Manufacturer#2','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
-8503.700000000001,'Supplier#000006830','RUSSIA',44325,'Manufacturer#4','BC4WFCYRUZyaIgchU 4S','32-147-878-5069','pades cajole. furious packages among the carefully express excuses boost furiously across th'
-8457.09,'Supplier#000009456','UNITED KINGDOM',19455,'Manufacturer#1','7SBhZs8gP1cJjT0Qf433YBk','33-858-440-4349','cing requests along the furiously unusual deposits promise among the furiously unus'
-8441.4,'Supplier#000003817','FRANCE',141302,'Manufacturer#2','hU3fz3xL78','16-339-356-5115','ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag'
-8432.889999999999,'Supplier#000003990','RUSSIA',191470,'Manufacturer#1','wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m','32-839-509-9301','ep furiously. packages should have to haggle slyly across the deposits. furiously regu'
-8431.4,'Supplier#000002675','ROMANIA',5174,'Manufacturer#1','HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w','29-474-643-1443','ithely express pinto beans. blithely even foxes haggle. furiously regular theodol'
-8407.040000000001,'Supplier#000005406','RUSSIA',162889,'Manufacturer#4','j7 gYF5RW8DC5UrjKC','32-626-152-4621','r the blithely regular packages. slyly ironic theodoli'
-8386.08,'Supplier#000008518','FRANCE',36014,'Manufacturer#3','2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV','16-618-780-7481','blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special'
-8376.52,'Supplier#000005306','UNITED KINGDOM',190267,'Manufacturer#5','9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9','33-632-514-7931','ly final accounts sleep special, regular requests. furiously regular'
-8348.74,'Supplier#000008851','FRANCE',66344,'Manufacturer#4','nWxi7GwEbjhw1','16-796-240-2472',' boldly final deposits. regular, even instructions detect slyly. fluffily unusual pinto bea'
-8338.58,'Supplier#000007269','FRANCE',17268,'Manufacturer#4','ZwhJSwABUoiB04,3','16-267-277-4365','iously final accounts. even pinto beans cajole slyly regular'
-8328.459999999999,'Supplier#000001744','ROMANIA',69237,'Manufacturer#5','oLo3fV64q2,FKHa3p,qHnS7Yzv,ps8','29-330-728-5873','ep carefully-- even, careful packages are slyly along t'
-8307.93,'Supplier#000003142','GERMANY',18139,'Manufacturer#1','dqblvV8dCNAorGlJ','17-595-447-6026','olites wake furiously regular decoys. final requests nod '
-8231.610000000001,'Supplier#000009558','RUSSIA',192000,'Manufacturer#2','mcdgen,yT1iJDHDS5fV','32-762-137-5858',' foxes according to the furi'
-8152.61,'Supplier#000002731','ROMANIA',15227,'Manufacturer#4',' nluXJCuY1tu','29-805-463-2030',' special requests. even, regular warhorses affix among the final gr'
-8109.09,'Supplier#000009186','FRANCE',99185,'Manufacturer#1','wgfosrVPexl9pEXWywaqlBMDYYf','16-668-570-1402','tions haggle slyly about the sil'
-8102.62,'Supplier#000003347','UNITED KINGDOM',18344,'Manufacturer#5','m CtXS2S16i','33-454-274-8532','egrate with the slyly bold instructions. special foxes haggle silently among the'
-8046.07,'Supplier#000008780','FRANCE',191222,'Manufacturer#3','AczzuE0UK9osj ,Lx0Jmh','16-473-215-6395','onic platelets cajole after the regular instructions. permanently bold excuses'
-8042.09,'Supplier#000003245','RUSSIA',135705,'Manufacturer#4','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
-8042.09,'Supplier#000003245','RUSSIA',150729,'Manufacturer#1','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
-7992.4,'Supplier#000006108','FRANCE',118574,'Manufacturer#1','8tBydnTDwUqfBfFV4l3','16-974-998-8937',' ironic ideas? fluffily even instructions wake. blithel'
-7980.65,'Supplier#000001288','FRANCE',13784,'Manufacturer#4','zE,7HgVPrCn','16-646-464-8247','ully bold courts. escapades nag slyly. furiously fluffy theodo'
-7950.37,'Supplier#000008101','GERMANY',33094,'Manufacturer#5','kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj','17-627-663-8014','arefully unusual requests x-ray above the quickly final deposits. '
-7937.93,'Supplier#000009012','ROMANIA',83995,'Manufacturer#2','iUiTziH,Ek3i4lwSgunXMgrcTzwdb','29-250-925-9690','to the blithely ironic deposits nag sly'
-7914.45,'Supplier#000001013','RUSSIA',125988,'Manufacturer#2','riRcntps4KEDtYScjpMIWeYF6mNnR','32-194-698-3365',' busily bold packages are dolphi'
-7912.91,'Supplier#000004211','GERMANY',159180,'Manufacturer#5','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
-7912.91,'Supplier#000004211','GERMANY',184210,'Manufacturer#4','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
-7894.56,'Supplier#000007981','GERMANY',85472,'Manufacturer#4','NSJ96vMROAbeXP','17-963-404-3760','ic platelets affix after the furiously'
-7887.08,'Supplier#000009792','GERMANY',164759,'Manufacturer#3','Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz','17-988-938-4296','ckly around the carefully fluffy theodolites. slyly ironic pack'
-7871.5,'Supplier#000007206','RUSSIA',104695,'Manufacturer#1','3w fNCnrVmvJjE95sgWZzvW','32-432-452-7731','ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg'
-7852.45,'Supplier#000005864','RUSSIA',8363,'Manufacturer#4','WCNfBPZeSXh3h,c','32-454-883-3821','usly unusual pinto beans. brave ideas sleep carefully quickly ironi'
-7850.66,'Supplier#000001518','UNITED KINGDOM',86501,'Manufacturer#1','ONda3YJiHKJOC','33-730-383-3892','ifts haggle fluffily pending pai'
-7843.52,'Supplier#000006683','FRANCE',11680,'Manufacturer#4','2Z0JGkiv01Y00oCFwUGfviIbhzCdy','16-464-517-8943',' express, final pinto beans x-ray slyly asymptotes. unusual, unusual'
----- TYPES
-DOUBLE, STRING, STRING, BIGINT, STRING, STRING, STRING, STRING
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q20.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q20.test b/testdata/workloads/tpch/queries/tpch-kudu-q20.test
deleted file mode 100644
index 64568a3..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q20.test
+++ /dev/null
@@ -1,229 +0,0 @@
-====
----- QUERY: TPCH-Q20
-# Q20 - Potential Part Promotion Query
-select
-  s_name,
-  s_address
-from
-  supplier, nation
-where
-  s_suppkey in (
-    select
-      ps_suppkey
-    from
-      partsupp
-    where
-      ps_partkey in (
-        select
-          p_partkey
-        from
-          part
-        where
-          p_name like 'forest%'
-        )
-      and ps_availqty > (
-        select
-          0.5 * sum(l_quantity)
-        from
-          lineitem
-        where
-          l_partkey = ps_partkey
-          and l_suppkey = ps_suppkey
-          and l_shipdate >= '1994-01-01'
-          and l_shipdate < '1995-01-01'
-        )
-    )
-  and s_nationkey = n_nationkey
-  and n_name = 'CANADA'
-order by
-  s_name
----- RESULTS
-'Supplier#000000020','iybAE,RmTymrZVYaFZva2SH,j'
-'Supplier#000000091','YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3'
-'Supplier#000000205','rF uV8d0JNEk'
-'Supplier#000000285','Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf'
-'Supplier#000000287','7a9SP7qW5Yku5PvSg'
-'Supplier#000000354','w8fOo5W,aS'
-'Supplier#000000378','FfbhyCxWvcPrO8ltp9'
-'Supplier#000000402','i9Sw4DoyMhzhKXCH9By,AYSgmD'
-'Supplier#000000530','0qwCMwobKY OcmLyfRXlagA8ukENJv,'
-'Supplier#000000555','TfB,a5bfl3Ah 3Z 74GqnNs6zKVGM'
-'Supplier#000000640','mvvtlQKsTOsJj5Ihk7,cq'
-'Supplier#000000729','pqck2ppy758TQpZCUAjPvlU55K3QjfL7Bi'
-'Supplier#000000736','l6i2nMwVuovfKnuVgaSGK2rDy65DlAFLegiL7'
-'Supplier#000000761','zlSLelQUj2XrvTTFnv7WAcYZGvvMTx882d4'
-'Supplier#000000887','urEaTejH5POADP2ARrf'
-'Supplier#000000935','ij98czM 2KzWe7dDTOxB8sq0UfCdvrX'
-'Supplier#000000975',',AC e,tBpNwKb5xMUzeohxlRn, hdZJo73gFQF8y'
-'Supplier#000001263','rQWr6nf8ZhB2TAiIDIvo5Io'
-'Supplier#000001367','42YSkFcAXMMcucsqeEefOE4HeCC'
-'Supplier#000001426','bPOCc086oFm8sLtS,fGrH'
-'Supplier#000001446','lch9HMNU1R7a0LIybsUodVknk6'
-'Supplier#000001500','wDmF5xLxtQch9ctVu,'
-'Supplier#000001602','uKNWIeafaM644'
-'Supplier#000001626','UhxNRzUu1dtFmp0'
-'Supplier#000001682','pXTkGxrTQVyH1Rr'
-'Supplier#000001700','7hMlCof1Y5zLFg'
-'Supplier#000001726','TeRY7TtTH24sEword7yAaSkjx8'
-'Supplier#000001730','Rc8e,1Pybn r6zo0VJIEiD0UD vhk'
-'Supplier#000001746','qWsendlOekQG1aW4uq06uQaCm51se8lirv7 hBRd'
-'Supplier#000001806','M934fuZSnLW'
-'Supplier#000001855','MWk6EAeozXb'
-'Supplier#000001931','FpJbMU2h6ZR2eBv8I9NIxF'
-'Supplier#000002022',' dwebGX7Id2pc25YvY33'
-'Supplier#000002036','20ytTtVObjKUUI2WCB0A'
-'Supplier#000002096','kuxseyLtq QPLXxm9ZUrnB6Kkh92JtK5cQzzXNU '
-'Supplier#000002117','MRtkgKolHJ9Wh X9J,urANHKDzvjr'
-'Supplier#000002204','uYmlr46C06udCqanj0KiRsoTQakZsEyssL'
-'Supplier#000002218','nODZw5q4dx kp0K5'
-'Supplier#000002243','nSOEV3JeOU79'
-'Supplier#000002245','hz2qWXWVjOyKhqPYMoEwz6zFkrTaDM'
-'Supplier#000002282','ES21K9dxoW1I1TzWCj7ekdlNwSWnv1Z  6mQ,BKn'
-'Supplier#000002303','nCoWfpB6YOymbgOht7ltfklpkHl'
-'Supplier#000002331','WRh2w5WFvRg7Z0S1AvSvHCL'
-'Supplier#000002373','RzHSxOTQmElCjxIBiVA52Z JB58rJhPRylR'
-'Supplier#000002419','qydBQd14I5l5mVXa4fYY'
-'Supplier#000002571','JZUugz04c iJFLrlGsz9O N,W 1rVHNIReyq'
-'Supplier#000002585','CsPoKpw2QuTY4AV1NkWuttneIa4SN'
-'Supplier#000002629','0Bw,q5Zp8su9XrzoCngZ3cAEXZwZ'
-'Supplier#000002721','HVdFAN2JHMQSpKm'
-'Supplier#000002730','lIFxR4fzm31C6,muzJwl84z'
-'Supplier#000002775','yDclaDaBD4ihH'
-'Supplier#000002799','lwr, 6L3gdfc79PQut,4XO6nQsTJY63cAyYO'
-'Supplier#000002934','m,trBENywSArwg3DhB'
-'Supplier#000002941','Naddba 8YTEKekZyP0'
-'Supplier#000003028','jouzgX0WZjhNMWLaH4fy'
-'Supplier#000003095','HxON3jJhUi3zjt,r mTD'
-'Supplier#000003143','hdolgh608uTkHh7t6qfSqkifKaiFjnCH'
-'Supplier#000003185','hMa535Cbf2mj1Nw4OWOKWVrsK0VdDkJURrdjSIJe'
-'Supplier#000003189','DWdPxt7 RnkZv6VOByR0em'
-'Supplier#000003201','E87yws6I,t0qNs4QW7UzExKiJnJDZWue'
-'Supplier#000003213','pxrRP4irQ1VoyfQ,dTf3'
-'Supplier#000003275','9xO4nyJ2QJcX6vGf'
-'Supplier#000003288','EDdfNt7E5Uc,xLTupoIgYL4yY7ujh,'
-'Supplier#000003314','jnisU8MzqO4iUB3zsPcrysMw3DDUojS4q7LD'
-'Supplier#000003373','iy8VM48ynpc3N2OsBwAvhYakO2us9R1bi'
-'Supplier#000003421','Sh3dt9W5oeofFWovnFhrg,'
-'Supplier#000003422','DJoCEapUeBXoV1iYiCcPFQvzsTv2ZI960'
-'Supplier#000003441','zvFJIzS,oUuShHjpcX'
-'Supplier#000003590','sy79CMLxqb,Cbo'
-'Supplier#000003607','lNqFHQYjwSAkf'
-'Supplier#000003625','qY588W0Yk5iaUy1RXTgNrEKrMAjBYHcKs'
-'Supplier#000003723','jZEp0OEythCLcS OmJSrFtxJ66bMlzSp'
-'Supplier#000003849','KgbZEaRk,6Q3mWvwh6uptrs1KRUHg 0'
-'Supplier#000003894','vvGC rameLOk'
-'Supplier#000003941','Pmb05mQfBMS618O7WKqZJ 9vyv'
-'Supplier#000004059','umEYZSq9RJ2WEzdsv9meU8rmqwzVLRgiZwC'
-'Supplier#000004207','tF64pwiOM4IkWjN3mS,e06WuAjLx'
-'Supplier#000004236','dl,HPtJmGipxYsSqn9wmqkuWjst,mCeJ8O6T'
-'Supplier#000004278','bBddbpBxIVp Di9'
-'Supplier#000004281','1OwPHh Pgiyeus,iZS5eA23JDOipwk'
-'Supplier#000004304','hQCAz59k,HLlp2CKUrcBIL'
-'Supplier#000004346','S3076LEOwo'
-'Supplier#000004406','Ah0ZaLu6VwufPWUz,7kbXgYZhauEaHqGIg'
-'Supplier#000004430','yvSsKNSTL5HLXBET4luOsPNLxKzAMk'
-'Supplier#000004527','p pVXCnxgcklWF6A1o3OHY3qW6'
-'Supplier#000004655','67NqBc4 t3PG3F8aO IsqWNq4kGaPowYL'
-'Supplier#000004851','Rj,x6IgLT7kBL99nqp'
-'Supplier#000004871',',phpt6AWEnUS8t4Avb50rFfdg7O9c6nU8xxv8eC5'
-'Supplier#000004884','42Z1uLye9nsn6aTGBNd dI8 x'
-'Supplier#000004975','GPq5PMKY6Wy'
-'Supplier#000005076','Xl7h9ifgvIHmqxFLgWfHK4Gjav BkP'
-'Supplier#000005195','Woi3b2ZaicPh ZSfu1EfXhE'
-'Supplier#000005256','Onc3t57VAMchm,pmoVLaU8bONni9NsuaM PzMMFz'
-'Supplier#000005257','f9g8SEHB7obMj3QXAjXS2vfYY22'
-'Supplier#000005300','gXG28YqpxU'
-'Supplier#000005323','tMCkdqbDoyNo8vMIkzjBqYexoRAuv,T6 qzcu'
-'Supplier#000005386','Ub6AAfHpWLWP'
-'Supplier#000005426','9Dz2OVT1q sb4BK71ljQ1XjPBYRPvO'
-'Supplier#000005465','63cYZenZBRZ613Q1FaoG0,smnC5zl9'
-'Supplier#000005484','saFdOR qW7AFY,3asPqiiAa11Mo22pCoN0BtPrKo'
-'Supplier#000005505','d2sbjG43KwMPX'
-'Supplier#000005506','On f5ypzoWgB'
-'Supplier#000005631','14TVrjlzo2SJEBYCDgpMwTlvwSqC'
-'Supplier#000005642','ZwKxAv3V40tW E8P7Qwu,zlu,kPsL'
-'Supplier#000005686','f2RBKec2T1NIi7yS M'
-'Supplier#000005730','5rkb0PSews HvxkL8JaD41UpnSF2cg8H1'
-'Supplier#000005736','2dq XTYhtYWSfp'
-'Supplier#000005737','dmEWcS32C3kx,d,B95 OmYn48'
-'Supplier#000005797',',o,OebwRbSDmVl9gN9fpWPCiqB UogvlSR'
-'Supplier#000005875','lK,sYiGzB94hSyHy9xvSZFbVQNCZe2LXZuGbS'
-'Supplier#000005974','REhR5jE,lLusQXvf54SwYySgsSSVFhu'
-'Supplier#000006059','4m0cv8MwJ9yX2vlwI Z'
-'Supplier#000006065','UiI2Cy3W4Tu5sLk LuvXLRy6KihlGv'
-'Supplier#000006093','KJNUg1odUT2wtCS2s6PrH3D6fd'
-'Supplier#000006099','aZilwQKYDTVPoK'
-'Supplier#000006109','rY5gbfh3dKHnylcQUTPGCwnbe'
-'Supplier#000006217','RVN23SYT9jenUeaWGXUd'
-'Supplier#000006297','73VRDOO56GUCyvc40oYJ'
-'Supplier#000006435','xIgE69XszYbnO4Eon7cHHO8y'
-'Supplier#000006463','7 wkdj2EO49iotley2kmIM ADpLSszGV3RNWj'
-'Supplier#000006478','bQYPnj9lpmW3U'
-'Supplier#000006521','b9 2zjHzxR'
-'Supplier#000006642','N,CUclSqRLJcS8zQ'
-'Supplier#000006659','iTLsnvD8D2GzWNUv kRInwRjk5rDeEmfup1'
-'Supplier#000006669','NQ4Yryj624p7K53'
-'Supplier#000006748','rC,2rEn8gKDIS5Q0dJEoiF'
-'Supplier#000006761','n4jhxGMqB5prD1HhpLvwrWStOLlla'
-'Supplier#000006808','HGd2Xo 9nEcHJhZvXjXxWKIpApT'
-'Supplier#000006858','fnlINT885vBBhsWwTGiZ0o22thwGY16h GHJj21'
-'Supplier#000006946','To6Slo0GJTqcIvD'
-'Supplier#000006949','mLxYUJhsGcLtKe ,GFirNu183AvT'
-'Supplier#000007072','2tRyX9M1a 4Rcm57s779F1ANG9jlpK'
-'Supplier#000007098','G3j8g0KC4OcbAu2OVoPHrXQWMCUdjq8wgCHOExu'
-'Supplier#000007132','xonvn0KAQIL3p8kYk HC1FSSDSUSTC'
-'Supplier#000007135','ls DoKV7V5ulfQy9V'
-'Supplier#000007147','Xzb16kC63wmLVYexUEgB0hXFvHkjT5iPpq'
-'Supplier#000007160','TqDGBULB3cTqIT6FKDvm9BS4e4v,zwYiQPb'
-'Supplier#000007169','tEc95D2moN9S84nd55O,dlnW'
-'Supplier#000007278','I2ae3rS7KVF8GVHtB'
-'Supplier#000007365','51xhROLvQMJ05DndtZWt'
-'Supplier#000007398','V8eE6oZ00OFNU,'
-'Supplier#000007402','4UVv58ery1rjmqSR5'
-'Supplier#000007448','yhhpWiJi7EJ6Q5VCaQ'
-'Supplier#000007458','BYuucapYkptZl6fnd2QaDyZmI9gR1Ih16e'
-'Supplier#000007477','9m9j0wfhWzCvVHxkU,PpAxwSH0h'
-'Supplier#000007509','q8,V6LJRoHJjHcOuSG7aLTMg'
-'Supplier#000007561','rMcFg2530VC'
-'Supplier#000007616','R IovIqzDi3,QHnaqZk1xS4hGAgelhP4yj'
-'Supplier#000007760','JsPE18PvcdFTK'
-'Supplier#000007801','69fi,U1r6enUb '
-'Supplier#000007865','5cDGCS,T6N'
-'Supplier#000007885','u3sicchh5ZpyTUpN1cJKNcAoabIWgY'
-'Supplier#000007926','ErzCF80K9Uy'
-'Supplier#000007998','LnASFBfYRFOo9d6d,asBvVq9Lo2P'
-'Supplier#000008090','eonbJZvoDFYBNUinYfp6yERIg'
-'Supplier#000008224','TWxt9f,LVER'
-'Supplier#000008231','IK7eGw Yj90sTdpsP,vcqWxLB'
-'Supplier#000008243','2AyePMkDqmzVzjGTizXthFLo8h EiudCMxOmIIG'
-'Supplier#000008323','75I18sZmASwm POeheRMdj9tmpyeQ,BfCXN5BIAb'
-'Supplier#000008366','h778cEj14BuW9OEKlvPTWq4iwASR6EBBXN7zeS8'
-'Supplier#000008532','Uc29q4,5xVdDOF87UZrxhr4xWS0ihEUXuh'
-'Supplier#000008595','MH0iB73GQ3z UW3O DbCbqmc'
-'Supplier#000008610','SgVgP90vP452sUNTgzL9zKwXHXAzV6tV'
-'Supplier#000008683','gLuGcugfpJSeGQARnaHNCaWnGaqsNnjyl20'
-'Supplier#000008705','aE,trRNdPx,4yinTD9O3DebDIp'
-'Supplier#000008742','HmPlQEzKCPEcTUL14,kKq'
-'Supplier#000008841','I 85Lu1sekbg2xrSIzm0'
-'Supplier#000008872','8D 45GgxJO2OwwYP9S4AaXJKvDwPfLM'
-'Supplier#000008879','rDSA,D9oPM,65NMWEFrmGKAu'
-'Supplier#000008967','2kwEHyMG 7FwozNImAUE6mH0hYtqYculJM'
-'Supplier#000008972','w2vF6 D5YZO3visPXsqVfLADTK'
-'Supplier#000009032','qK,trB6Sdy4Dz1BRUFNy'
-'Supplier#000009043','57OPvKH4qyXIZ7IzYeCaw11a5N1Ki9f1WWmVQ,'
-'Supplier#000009278','RqYTzgxj93CLX 0mcYfCENOefD'
-'Supplier#000009326','XmiC,uy36B9,fb0zhcjaagiXQutg'
-'Supplier#000009430','igRqmneFt '
-'Supplier#000009549','h3RVchUf8MzY46IzbZ0ng09'
-'Supplier#000009601','51m637bO,Rw5DnHWFUvLacRx9'
-'Supplier#000009709','rRnCbHYgDgl9PZYnyWKVYSUW0vKg'
-'Supplier#000009753','wLhVEcRmd7PkJF4FBnGK7Z'
-'Supplier#000009799',' 4wNjXGa4OKWl'
-'Supplier#000009811','E3iuyq7UnZxU7oPZIe2Gu6'
-'Supplier#000009812','APFRMy3lCbgFga53n5t9DxzFPQPgnjrGt32'
-'Supplier#000009846','57sNwJJ3PtBDu,hMPP5QvpcOcSNRXn3PypJJrh'
-'Supplier#000009899','7XdpAHrzr1t,UQFZE'
-'Supplier#000009974','7wJ,J5DKcxSU4Kp1cQLpbcAvB5AsvKT'
----- TYPES
-string, string
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q21.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q21.test b/testdata/workloads/tpch/queries/tpch-kudu-q21.test
deleted file mode 100644
index 3fbadc4..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q21.test
+++ /dev/null
@@ -1,147 +0,0 @@
-====
----- QUERY: TPCH-Q21
-# Q21 - Suppliers Who Kept Orders Waiting Query
-select
-  s_name,
-  count(*) as numwait
-from
-  supplier,
-  lineitem l1,
-  orders,
-  nation
-where
-  s_suppkey = l1.l_suppkey
-  and o_orderkey = l1.l_orderkey
-  and o_orderstatus = 'F'
-  and l1.l_receiptdate > l1.l_commitdate
-  and exists (
-    select
-      *
-    from
-      lineitem l2
-    where
-      l2.l_orderkey = l1.l_orderkey
-      and l2.l_suppkey <> l1.l_suppkey
-  )
-  and not exists (
-    select
-      *
-    from
-      lineitem l3
-    where
-      l3.l_orderkey = l1.l_orderkey
-      and l3.l_suppkey <> l1.l_suppkey
-      and l3.l_receiptdate > l3.l_commitdate
-  )
-  and s_nationkey = n_nationkey
-  and n_name = 'SAUDI ARABIA'
-group by
-  s_name
-order by
-  numwait desc,
-  s_name
-limit 100
----- RESULTS
-'Supplier#000002829',20
-'Supplier#000005808',18
-'Supplier#000000262',17
-'Supplier#000000496',17
-'Supplier#000002160',17
-'Supplier#000002301',17
-'Supplier#000002540',17
-'Supplier#000003063',17
-'Supplier#000005178',17
-'Supplier#000008331',17
-'Supplier#000002005',16
-'Supplier#000002095',16
-'Supplier#000005799',16
-'Supplier#000005842',16
-'Supplier#000006450',16
-'Supplier#000006939',16
-'Supplier#000009200',16
-'Supplier#000009727',16
-'Supplier#000000486',15
-'Supplier#000000565',15
-'Supplier#000001046',15
-'Supplier#000001047',15
-'Supplier#000001161',15
-'Supplier#000001336',15
-'Supplier#000001435',15
-'Supplier#000003075',15
-'Supplier#000003335',15
-'Supplier#000005649',15
-'Supplier#000006027',15
-'Supplier#000006795',15
-'Supplier#000006800',15
-'Supplier#000006824',15
-'Supplier#000007131',15
-'Supplier#000007382',15
-'Supplier#000008913',15
-'Supplier#000009787',15
-'Supplier#000000633',14
-'Supplier#000001960',14
-'Supplier#000002323',14
-'Supplier#000002490',14
-'Supplier#000002993',14
-'Supplier#000003101',14
-'Supplier#000004489',14
-'Supplier#000005435',14
-'Supplier#000005583',14
-'Supplier#000005774',14
-'Supplier#000007579',14
-'Supplier#000008180',14
-'Supplier#000008695',14
-'Supplier#000009224',14
-'Supplier#000000357',13
-'Supplier#000000436',13
-'Supplier#000000610',13
-'Supplier#000000788',13
-'Supplier#000000889',13
-'Supplier#000001062',13
-'Supplier#000001498',13
-'Supplier#000002056',13
-'Supplier#000002312',13
-'Supplier#000002344',13
-'Supplier#000002596',13
-'Supplier#000002615',13
-'Supplier#000002978',13
-'Supplier#000003048',13
-'Supplier#000003234',13
-'Supplier#000003727',13
-'Supplier#000003806',13
-'Supplier#000004472',13
-'Supplier#000005236',13
-'Supplier#000005906',13
-'Supplier#000006241',13
-'Supplier#000006326',13
-'Supplier#000006384',13
-'Supplier#000006394',13
-'Supplier#000006624',13
-'Supplier#000006629',13
-'Supplier#000006682',13
-'Supplier#000006737',13
-'Supplier#000006825',13
-'Supplier#000007021',13
-'Supplier#000007417',13
-'Supplier#000007497',13
-'Supplier#000007602',13
-'Supplier#000008134',13
-'Supplier#000008234',13
-'Supplier#000009435',13
-'Supplier#000009436',13
-'Supplier#000009564',13
-'Supplier#000009896',13
-'Supplier#000000379',12
-'Supplier#000000673',12
-'Supplier#000000762',12
-'Supplier#000000811',12
-'Supplier#000000821',12
-'Supplier#000001337',12
-'Supplier#000001916',12
-'Supplier#000001925',12
-'Supplier#000002039',12
-'Supplier#000002357',12
-'Supplier#000002483',12
----- TYPES
-string, bigint
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q22.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q22.test b/testdata/workloads/tpch/queries/tpch-kudu-q22.test
deleted file mode 100644
index 4790b48..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q22.test
+++ /dev/null
@@ -1,48 +0,0 @@
-====
----- QUERY: TPCH-Q22
-# Q22 - Global Sales Opportunity Query
-select
-  cntrycode,
-  count(*) as numcust,
-  round(sum(c_acctbal), 2) as totacctbal
-from (
-  select
-    substr(c_phone, 1, 2) as cntrycode,
-    c_acctbal
-  from
-    customer
-  where
-    substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
-    and c_acctbal > (
-      select
-        round(avg(c_acctbal), 1)
-      from
-        customer
-      where
-        c_acctbal > 0.00
-        and substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
-      )
-    and not exists (
-      select
-        *
-      from
-        orders
-      where
-        o_custkey = c_custkey
-    )
-  ) as custsale
-group by
-  cntrycode
-order by
-  cntrycode
----- RESULTS
-'13',888,6737713.99
-'17',861,6460573.72
-'18',964,7236687.40
-'23',892,6701457.95
-'29',948,7158866.63
-'30',909,6808436.13
-'31',922,6806670.18
----- TYPES
-string, bigint, double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q3.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q3.test b/testdata/workloads/tpch/queries/tpch-kudu-q3.test
deleted file mode 100644
index 1355e69..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q3.test
+++ /dev/null
@@ -1,40 +0,0 @@
-====
----- QUERY: TPCH-Q3
-# Q3 - Shipping Priority Query
-select
-  l_orderkey,
-  round(sum(l_extendedprice * (1 - l_discount)), 2) as revenue,
-  o_orderdate,
-  o_shippriority
-from
-  customer,
-  orders,
-  lineitem
-where
-  c_mktsegment = 'BUILDING'
-  and c_custkey = o_custkey
-  and l_orderkey = o_orderkey
-  and o_orderdate < '1995-03-15'
-  and l_shipdate > '1995-03-15'
-group by
-  l_orderkey,
-  o_orderdate,
-  o_shippriority
-order by
-  revenue desc,
-  o_orderdate
-limit 10
----- RESULTS
-2456423,406181.01,'1995-03-05',0
-3459808,405838.70,'1995-03-04',0
-492164,390324.06,'1995-02-19',0
-1188320,384537.94,'1995-03-09',0
-2435712,378673.06,'1995-02-26',0
-4878020,378376.80,'1995-03-12',0
-5521732,375153.92,'1995-03-13',0
-2628192,373133.31,'1995-02-22',0
-993600,371407.46,'1995-03-05',0
-2300070,367371.15,'1995-03-13',0
----- TYPES
-BIGINT, DOUBLE, STRING, INT
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q4.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q4.test b/testdata/workloads/tpch/queries/tpch-kudu-q4.test
deleted file mode 100644
index 00c3a87..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q4.test
+++ /dev/null
@@ -1,33 +0,0 @@
-====
----- QUERY: TPCH-Q4
-# Q4 - Order Priority Checking Query
-select
-  o_orderpriority,
-  count(*) as order_count
-from
-  orders
-where
-  o_orderdate >= '1993-07-01'
-  and o_orderdate < '1993-10-01'
-  and exists (
-    select
-      *
-    from
-      lineitem
-    where
-      l_orderkey = o_orderkey
-      and l_commitdate < l_receiptdate
-    )
-group by
-  o_orderpriority
-order by
-  o_orderpriority
----- RESULTS
-'1-URGENT',10594
-'2-HIGH',10476
-'3-MEDIUM',10410
-'4-NOT SPECIFIED',10556
-'5-LOW',10487
----- TYPES
-string, bigint
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q5.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q5.test b/testdata/workloads/tpch/queries/tpch-kudu-q5.test
deleted file mode 100644
index ab67779..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q5.test
+++ /dev/null
@@ -1,36 +0,0 @@
-====
----- QUERY: TPCH-Q5
-# Q5 - Local Supplier Volume Query
-select
-  n_name,
-  round(sum(l_extendedprice * (1 - l_discount)), 2) as revenue
-from
-  customer,
-  orders,
-  lineitem,
-  supplier,
-  nation,
-  region
-where
-  c_custkey = o_custkey
-  and l_orderkey = o_orderkey
-  and l_suppkey = s_suppkey
-  and c_nationkey = s_nationkey
-  and s_nationkey = n_nationkey
-  and n_regionkey = r_regionkey
-  and r_name = 'ASIA'
-  and o_orderdate >= '1994-01-01'
-  and o_orderdate < '1995-01-01'
-group by
-  n_name
-order by
-  revenue desc
----- RESULTS
-'INDONESIA',55502041.17
-'VIETNAM',55295087.00
-'CHINA',53724494.26
-'INDIA',52035512.00
-'JAPAN',45410175.70
----- TYPES
-string, double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q6.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q6.test b/testdata/workloads/tpch/queries/tpch-kudu-q6.test
deleted file mode 100644
index 7194e1c..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q6.test
+++ /dev/null
@@ -1,17 +0,0 @@
-====
----- QUERY: TPCH-Q6
-# Q6 - Forecasting Revenue Change Query
-select
- round(sum(l_extendedprice * l_discount), 2) as revenue
-from
-  lineitem
-where
-  l_shipdate >= '1994-01-01'
-  and l_shipdate < '1995-01-01'
-  and l_discount between 0.05 and 0.07
-  and l_quantity < 24
----- RESULTS
-123141078.23
----- TYPES
-double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q7.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q7.test b/testdata/workloads/tpch/queries/tpch-kudu-q7.test
deleted file mode 100644
index c7eeb04..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q7.test
+++ /dev/null
@@ -1,49 +0,0 @@
-====
----- QUERY: TPCH-Q7
-# Q7 - Volume Shipping Query
-select
-  supp_nation,
-  cust_nation,
-  l_year,
-  round(sum(volume), 2) as revenue
-from (
-  select
-    n1.n_name as supp_nation,
-    n2.n_name as cust_nation,
-    year(l_shipdate) as l_year,
-    round(l_extendedprice * (1 - l_discount), 2) as volume
-  from
-    supplier,
-    lineitem,
-    orders,
-    customer,
-    nation n1,
-    nation n2
-  where
-    s_suppkey = l_suppkey
-    and o_orderkey = l_orderkey
-    and c_custkey = o_custkey
-    and s_nationkey = n1.n_nationkey
-    and c_nationkey = n2.n_nationkey
-    and (
-      (n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY')
-      or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE')
-    )
-    and l_shipdate between '1995-01-01' and '1996-12-31'
-  ) as shipping
-group by
-  supp_nation,
-  cust_nation,
-  l_year
-order by
-  supp_nation,
-  cust_nation,
-  l_year
----- RESULTS
-'FRANCE','GERMANY',1995,54639732.82
-'FRANCE','GERMANY',1996,54633083.44
-'GERMANY','FRANCE',1995,52531746.60
-'GERMANY','FRANCE',1996,52520548.99
----- TYPES
-STRING, STRING, INT, DOUBLE
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q8.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q8.test b/testdata/workloads/tpch/queries/tpch-kudu-q8.test
deleted file mode 100644
index 1ca6a66..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q8.test
+++ /dev/null
@@ -1,46 +0,0 @@
-====
----- QUERY: TPCH-Q8
-# Q8 - National Market Share Query
-select
-  o_year,
-  round(sum(case
-    when nation = 'BRAZIL'
-    then volume
-    else 0
-  end) / sum(volume), 4) as mkt_share
-from (
-  select
-    year(o_orderdate) as o_year,
-    round(l_extendedprice * (1 - l_discount), 2) as volume,
-    n2.n_name as nation
-  from
-    part,
-    supplier,
-    lineitem,
-    orders,
-    customer,
-    nation n1,
-    nation n2,
-    region
-  where
-    p_partkey = l_partkey
-    and s_suppkey = l_suppkey
-    and l_orderkey = o_orderkey
-    and o_custkey = c_custkey
-    and c_nationkey = n1.n_nationkey
-    and n1.n_regionkey = r_regionkey
-    and r_name = 'AMERICA'
-    and s_nationkey = n2.n_nationkey
-    and o_orderdate between '1995-01-01' and '1996-12-31'
-    and p_type = 'ECONOMY ANODIZED STEEL'
-  ) as all_nations
-group by
-  o_year
-order by
-  o_year
----- RESULTS
-1995,0.0344
-1996,0.0415
----- TYPES
-int, double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q9.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q9.test b/testdata/workloads/tpch/queries/tpch-kudu-q9.test
deleted file mode 100644
index 3fb6685..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q9.test
+++ /dev/null
@@ -1,213 +0,0 @@
-====
----- QUERY: TPCH-Q9
-# Q9 - Product Type Measure Query
-select
-  nation,
-  o_year,
-  round(sum(amount), 2) as sum_profit
-from(
-  select
-    n_name as nation,
-    year(o_orderdate) as o_year,
-    round(l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity, 2) as amount
-  from
-    part,
-    supplier,
-    lineitem,
-    partsupp,
-    orders,
-    nation
-  where
-    s_suppkey = l_suppkey
-    and ps_suppkey = l_suppkey
-    and ps_partkey = l_partkey
-    and p_partkey = l_partkey
-    and o_orderkey = l_orderkey
-    and s_nationkey = n_nationkey
-    and p_name like '%green%'
-  ) as profit
-group by
-  nation,
-  o_year
-order by
-  nation,
-  o_year desc
----- RESULTS
-'ALGERIA',1998,27136900.28
-'ALGERIA',1997,48611833.43
-'ALGERIA',1996,48285482.72
-'ALGERIA',1995,44402273.75
-'ALGERIA',1994,48694008.05
-'ALGERIA',1993,46044207.83
-'ALGERIA',1992,45636849.53
-'ARGENTINA',1998,28341663.78
-'ARGENTINA',1997,47143964.27
-'ARGENTINA',1996,45255278.67
-'ARGENTINA',1995,45631769.29
-'ARGENTINA',1994,48268856.35
-'ARGENTINA',1993,48605593.59
-'ARGENTINA',1992,46654240.88
-'BRAZIL',1998,26527736.60
-'BRAZIL',1997,45640660.78
-'BRAZIL',1996,45090647.16
-'BRAZIL',1995,44015888.61
-'BRAZIL',1994,44854219.18
-'BRAZIL',1993,45766603.83
-'BRAZIL',1992,45280217.03
-'CANADA',1998,26828985.41
-'CANADA',1997,44849954.37
-'CANADA',1996,46307936.30
-'CANADA',1995,47311993.22
-'CANADA',1994,46691492.14
-'CANADA',1993,46634791.12
-'CANADA',1992,45873849.65
-'CHINA',1998,27510180.35
-'CHINA',1997,46123865.57
-'CHINA',1996,49532807.30
-'CHINA',1995,46734651.69
-'CHINA',1994,46397896.61
-'CHINA',1993,49634674.15
-'CHINA',1992,46949457.76
-'EGYPT',1998,28401491.73
-'EGYPT',1997,47674857.92
-'EGYPT',1996,47745727.75
-'EGYPT',1995,45897160.80
-'EGYPT',1994,47194895.49
-'EGYPT',1993,49133627.89
-'EGYPT',1992,47000574.63
-'ETHIOPIA',1998,25135046.16
-'ETHIOPIA',1997,43010596.18
-'ETHIOPIA',1996,43636287.12
-'ETHIOPIA',1995,43575757.53
-'ETHIOPIA',1994,41597208.56
-'ETHIOPIA',1993,42622804.38
-'ETHIOPIA',1992,44385735.82
-'FRANCE',1998,26210392.43
-'FRANCE',1997,42392969.67
-'FRANCE',1996,43306318.11
-'FRANCE',1995,46377408.57
-'FRANCE',1994,43447353.27
-'FRANCE',1993,43729961.17
-'FRANCE',1992,44052308.28
-'GERMANY',1998,25991257.35
-'GERMANY',1997,43968355.88
-'GERMANY',1996,45882074.92
-'GERMANY',1995,43314338.22
-'GERMANY',1994,44616995.42
-'GERMANY',1993,45126646.10
-'GERMANY',1992,44361141.24
-'INDIA',1998,29626417.37
-'INDIA',1997,51386111.45
-'INDIA',1996,47571018.40
-'INDIA',1995,49344062.66
-'INDIA',1994,50106952.51
-'INDIA',1993,48112766.93
-'INDIA',1992,47914303.24
-'INDONESIA',1998,27734909.82
-'INDONESIA',1997,44593813.16
-'INDONESIA',1996,44746730.00
-'INDONESIA',1995,45593622.88
-'INDONESIA',1994,45988483.99
-'INDONESIA',1993,46147963.85
-'INDONESIA',1992,45185777.26
-'IRAN',1998,26661609.15
-'IRAN',1997,45019114.34
-'IRAN',1996,45891397.36
-'IRAN',1995,44414285.20
-'IRAN',1994,43696360.46
-'IRAN',1993,45362775.84
-'IRAN',1992,43052338.57
-'IRAQ',1998,31188498.22
-'IRAQ',1997,48585307.79
-'IRAQ',1996,50036593.96
-'IRAQ',1995,48774801.92
-'IRAQ',1994,48795847.42
-'IRAQ',1993,47435691.62
-'IRAQ',1992,47562355.64
-'JAPAN',1998,24694102.28
-'JAPAN',1997,42377052.33
-'JAPAN',1996,40267778.92
-'JAPAN',1995,40925317.74
-'JAPAN',1994,41159518.59
-'JAPAN',1993,39589074.40
-'JAPAN',1992,39113494.09
-'JORDAN',1998,23489867.79
-'JORDAN',1997,41615962.72
-'JORDAN',1996,41860855.56
-'JORDAN',1995,39931672.03
-'JORDAN',1994,40707555.57
-'JORDAN',1993,39060405.72
-'JORDAN',1992,41657604.23
-'KENYA',1998,25566337.53
-'KENYA',1997,43108847.87
-'KENYA',1996,43482953.61
-'KENYA',1995,42517989.18
-'KENYA',1994,43612479.34
-'KENYA',1993,42724038.88
-'KENYA',1992,43217106.33
-'MOROCCO',1998,24915497.00
-'MOROCCO',1997,42698383.09
-'MOROCCO',1996,42986113.41
-'MOROCCO',1995,42316089.25
-'MOROCCO',1994,43458604.84
-'MOROCCO',1993,42672288.09
-'MOROCCO',1992,42800781.57
-'MOZAMBIQUE',1998,28279875.98
-'MOZAMBIQUE',1997,51159216.31
-'MOZAMBIQUE',1996,48072525.21
-'MOZAMBIQUE',1995,48905200.82
-'MOZAMBIQUE',1994,46092076.35
-'MOZAMBIQUE',1993,48555926.23
-'MOZAMBIQUE',1992,47809075.36
-'PERU',1998,26713966.40
-'PERU',1997,48324008.57
-'PERU',1996,50310008.87
-'PERU',1995,49647080.89
-'PERU',1994,46420910.15
-'PERU',1993,51536906.45
-'PERU',1992,47711665.28
-'ROMANIA',1998,27271992.98
-'ROMANIA',1997,45063059.33
-'ROMANIA',1996,47492335.15
-'ROMANIA',1995,45710636.24
-'ROMANIA',1994,46088041.34
-'ROMANIA',1993,47515092.77
-'ROMANIA',1992,44111439.92
-'RUSSIA',1998,27935323.85
-'RUSSIA',1997,48222347.45
-'RUSSIA',1996,47553559.65
-'RUSSIA',1995,46755990.02
-'RUSSIA',1994,48000515.83
-'RUSSIA',1993,48569624.74
-'RUSSIA',1992,47672831.69
-'SAUDI ARABIA',1998,27113517.02
-'SAUDI ARABIA',1997,46690468.87
-'SAUDI ARABIA',1996,47775782.69
-'SAUDI ARABIA',1995,46657107.96
-'SAUDI ARABIA',1994,48181673.14
-'SAUDI ARABIA',1993,45692556.61
-'SAUDI ARABIA',1992,48924913.28
-'UNITED KINGDOM',1998,26366682.81
-'UNITED KINGDOM',1997,44518130.03
-'UNITED KINGDOM',1996,45539729.78
-'UNITED KINGDOM',1995,46845879.42
-'UNITED KINGDOM',1994,43081609.54
-'UNITED KINGDOM',1993,44770147.00
-'UNITED KINGDOM',1992,44123402.78
-'UNITED STATES',1998,27826593.86
-'UNITED STATES',1997,46638572.34
-'UNITED STATES',1996,46688280.64
-'UNITED STATES',1995,48951591.81
-'UNITED STATES',1994,45099091.90
-'UNITED STATES',1993,46181600.58
-'UNITED STATES',1992,46168214.21
-'VIETNAM',1998,27281931.07
-'VIETNAM',1997,48735914.28
-'VIETNAM',1996,47824596.08
-'VIETNAM',1995,48235136.01
-'VIETNAM',1994,47729256.41
-'VIETNAM',1993,45352677.14
-'VIETNAM',1992,47846355.72
----- TYPES
-STRING, INT, DOUBLE
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/tests/query_test/test_tpch_queries.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_tpch_queries.py b/tests/query_test/test_tpch_queries.py
index 55c9f3d..ece8347 100644
--- a/tests/query_test/test_tpch_queries.py
+++ b/tests/query_test/test_tpch_queries.py
@@ -38,17 +38,10 @@ class TestTpchQuery(ImpalaTestSuite):
       cls.ImpalaTestMatrix.add_constraint(lambda v:\
           v.get_value('table_format').file_format in ['text', 'parquet', 'kudu'])
 
-  def get_test_file_prefix(self, vector):
-    if vector.get_value('table_format').file_format in ['kudu']:
-      return 'tpch-kudu-q'
-    else:
-      return 'tpch-q'
-
   def idfn(val):
     return "TPC-H: Q{0}".format(val)
 
   @pytest.mark.parametrize("query", xrange(1, 23), ids=idfn)
   def test_tpch(self, vector, query):
-    self.run_test_case('{0}{1}'.format(self.get_test_file_prefix(vector), query),
-        vector)
+    self.run_test_case('tpch-q{0}'.format(query), vector)
 

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/tests/stress/concurrent_select.py
----------------------------------------------------------------------
diff --git a/tests/stress/concurrent_select.py b/tests/stress/concurrent_select.py
index e03c8b2..5146d35 100755
--- a/tests/stress/concurrent_select.py
+++ b/tests/stress/concurrent_select.py
@@ -1059,17 +1059,13 @@ class QueryRunner(object):
     return hash_thread.result
 
 
-def load_tpc_queries(workload, load_in_kudu=False):
-  """Returns a list of TPC queries. 'workload' should either be 'tpch' or 'tpcds'.
-  If 'load_in_kudu' is True, it loads only queries specified for the Kudu storage
-  engine.
-  """
+def load_tpc_queries(workload):
+  """Returns a list of TPC queries. 'workload' should either be 'tpch' or 'tpcds'."""
   LOG.info("Loading %s queries", workload)
   queries = list()
   query_dir = os.path.join(
       os.path.dirname(__file__), "..", "..", "testdata", "workloads", workload, "queries")
-  engine = 'kudu-' if load_in_kudu else ''
-  file_name_pattern = re.compile(r"%s-%s(q\d+).test$" % (workload, engine))
+  file_name_pattern = re.compile(r"-(q\d+).test$")
   for query_file in os.listdir(query_dir):
     match = file_name_pattern.search(query_file)
     if not match:
@@ -1983,7 +1979,7 @@ def main():
       with impala.cursor(db_name=args.tpch_nested_db) as cursor:
         queries.extend(generate_compute_stats_queries(cursor))
   if args.tpch_kudu_db:
-    tpch_kudu_queries = load_tpc_queries("tpch", load_in_kudu=True)
+    tpch_kudu_queries = load_tpc_queries("tpch")
     for query in tpch_kudu_queries:
       query.db_name = args.tpch_kudu_db
     queries.extend(tpch_kudu_queries)
@@ -1995,7 +1991,7 @@ def main():
         prepare_database(cursor)
         queries.extend(generate_DML_queries(cursor, args.dml_mod_values))
   if args.tpcds_kudu_db:
-    tpcds_kudu_queries = load_tpc_queries("tpcds", load_in_kudu=True)
+    tpcds_kudu_queries = load_tpc_queries("tpcds")
     for query in tpcds_kudu_queries:
       query.db_name = args.tpcds_kudu_db
     queries.extend(tpcds_kudu_queries)


[16/21] impala git commit: IMPALA-6652: Rename label of MemTracker for early RPCs

Posted by ta...@apache.org.
IMPALA-6652: Rename label of MemTracker for early RPCs

This change renames the label of the MemTracker in
KrpcDataStreamMgr for tracking payloads of early RPCs
to "Data Stream Manager Early RPCs". This is to distinguish
these RPCs from the deferred RPCs in a receiver. The early
RPCs refer to those RPCs which arrive before a receiver
is ready. The responses to these RPCs are deferred until
the receiver is created. The receiver may also defer
responses to RPCs if the deserialized payloads of RPCs in
an inbound queue exceed FLAGS_exchg_node_buffer_size_bytes.
In this case, the RPCs won't be responded to until the
inbound queue is drained.

Change-Id: I5bb72c28e8d660a6b78543dbc8b5b156e0e7c843
Reviewed-on: http://gerrit.cloudera.org:8080/9633
Reviewed-by: Dan Hecht <dh...@cloudera.com>
Reviewed-by: Michael Ho <kw...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/5eba80be
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/5eba80be
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/5eba80be

Branch: refs/heads/2.x
Commit: 5eba80beef4498e60deb25f8c791e0e73c14081f
Parents: 45568e6
Author: Lars Volker <lv...@cloudera.com>
Authored: Wed Mar 14 10:33:48 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 be/src/runtime/krpc-data-stream-mgr.cc      | 14 +++++++-------
 be/src/runtime/krpc-data-stream-mgr.h       |  8 ++++----
 tests/custom_cluster/test_krpc_mem_usage.py |  8 ++++----
 3 files changed, 15 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/5eba80be/be/src/runtime/krpc-data-stream-mgr.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-mgr.cc b/be/src/runtime/krpc-data-stream-mgr.cc
index b291fee..5a9305f 100644
--- a/be/src/runtime/krpc-data-stream-mgr.cc
+++ b/be/src/runtime/krpc-data-stream-mgr.cc
@@ -78,9 +78,9 @@ KrpcDataStreamMgr::KrpcDataStreamMgr(MetricGroup* metrics)
 }
 
 Status KrpcDataStreamMgr::Init(MemTracker* service_mem_tracker) {
-  // MemTracker for tracking memory used for buffering deferred RPC calls which
+  // MemTracker for tracking memory used for buffering early RPC calls which
   // arrive before the receiver is ready.
-  mem_tracker_.reset(new MemTracker(-1, "Data Stream Manager Deferred RPCs",
+  early_rpcs_tracker_.reset(new MemTracker(-1, "Data Stream Manager Early RPCs",
       ExecEnv::GetInstance()->process_mem_tracker()));
   service_mem_tracker_ = service_mem_tracker;
   RETURN_IF_ERROR(Thread::Create("krpc-data-stream-mgr", "maintenance",
@@ -134,14 +134,14 @@ shared_ptr<DataStreamRecvrBase> KrpcDataStreamMgr::CreateRecvr(
     // Release memory. The receiver will track it in its instance tracker.
     int64_t transfer_size = ctx->rpc_context->GetTransferSize();
     recvr->TakeOverEarlySender(move(ctx));
-    mem_tracker_->Release(transfer_size);
+    early_rpcs_tracker_->Release(transfer_size);
     num_senders_waiting_->Increment(-1);
   }
   for (const unique_ptr<EndDataStreamCtx>& ctx :
       early_senders_for_recvr.closed_sender_ctxs) {
     recvr->RemoveSender(ctx->request->sender_id());
     DataStreamService::RespondAndReleaseRpc(Status::OK(), ctx->response, ctx->rpc_context,
-        mem_tracker_.get());
+        early_rpcs_tracker_.get());
     num_senders_waiting_->Increment(-1);
   }
   return recvr;
@@ -174,7 +174,7 @@ void KrpcDataStreamMgr::AddEarlySender(const TUniqueId& finst_id,
     const TransmitDataRequestPB* request, TransmitDataResponsePB* response,
     kudu::rpc::RpcContext* rpc_context) {
   const int64_t transfer_size = rpc_context->GetTransferSize();
-  mem_tracker_->Consume(transfer_size);
+  early_rpcs_tracker_->Consume(transfer_size);
   service_mem_tracker_->Release(transfer_size);
   RecvrId recvr_id = make_pair(finst_id, request->dest_node_id());
   auto payload = make_unique<TransmitDataCtx>(request, response, rpc_context);
@@ -187,7 +187,7 @@ void KrpcDataStreamMgr::AddEarlyClosedSender(const TUniqueId& finst_id,
     const EndDataStreamRequestPB* request, EndDataStreamResponsePB* response,
     kudu::rpc::RpcContext* rpc_context) {
   const int64_t transfer_size = rpc_context->GetTransferSize();
-  mem_tracker_->Consume(transfer_size);
+  early_rpcs_tracker_->Consume(transfer_size);
   service_mem_tracker_->Release(transfer_size);
   RecvrId recvr_id = make_pair(finst_id, request->dest_node_id());
   auto payload = make_unique<EndDataStreamCtx>(request, response, rpc_context);
@@ -351,7 +351,7 @@ void KrpcDataStreamMgr::RespondToTimedOutSender(const std::unique_ptr<ContextTyp
       ctx->request->dest_node_id());
   VLOG_QUERY << msg.msg();
   DataStreamService::RespondAndReleaseRpc(Status::Expected(msg), ctx->response,
-      ctx->rpc_context, mem_tracker_.get());
+      ctx->rpc_context, early_rpcs_tracker_.get());
   num_senders_waiting_->Increment(-1);
   num_senders_timedout_->Increment(1);
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/5eba80be/be/src/runtime/krpc-data-stream-mgr.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-mgr.h b/be/src/runtime/krpc-data-stream-mgr.h
index 889aee5..3cd2191 100644
--- a/be/src/runtime/krpc-data-stream-mgr.h
+++ b/be/src/runtime/krpc-data-stream-mgr.h
@@ -295,10 +295,10 @@ class KrpcDataStreamMgr : public DataStreamMgrBase {
   friend class KrpcDataStreamRecvr;
   friend class DataStreamTest;
 
-  /// MemTracker for memory used for transmit data requests before we hand them over to a
-  /// specific receiver. Used only to track payloads of deferred RPCs (e.g. early
-  /// senders).
-  std::unique_ptr<MemTracker> mem_tracker_;
+  /// MemTracker for memory used for early transmit data RPCs which arrive before the
+  /// receiver is created. The memory of the RPC payload is transferred to the receiver
+  /// once it's created.
+  std::unique_ptr<MemTracker> early_rpcs_tracker_;
 
   /// MemTracker used by the DataStreamService to track memory for incoming requests.
   /// Memory for new incoming requests is initially tracked against this tracker before

http://git-wip-us.apache.org/repos/asf/impala/blob/5eba80be/tests/custom_cluster/test_krpc_mem_usage.py
----------------------------------------------------------------------
diff --git a/tests/custom_cluster/test_krpc_mem_usage.py b/tests/custom_cluster/test_krpc_mem_usage.py
index a145a7a..c26b776 100644
--- a/tests/custom_cluster/test_krpc_mem_usage.py
+++ b/tests/custom_cluster/test_krpc_mem_usage.py
@@ -22,7 +22,7 @@ from tests.common.impala_cluster import ImpalaCluster
 from tests.common.skip import SkipIf, SkipIfBuildType
 from tests.verifiers.mem_usage_verifier import MemUsageVerifier
 
-DATA_STREAM_MGR_METRIC = "Data Stream Manager Deferred RPCs"
+DATA_STREAM_MGR_METRIC = "Data Stream Manager Early RPCs"
 DATA_STREAM_SVC_METRIC = "Data Stream Service Queue"
 ALL_METRICS = [ DATA_STREAM_MGR_METRIC, DATA_STREAM_SVC_METRIC ]
 
@@ -74,7 +74,7 @@ class TestKrpcMemUsage(CustomClusterTestSuite):
   @SkipIfBuildType.not_dev_build
   @pytest.mark.execute_serially
   @CustomClusterTestSuite.with_args("--stress_datastream_recvr_delay_ms=1000")
-  def test_krpc_deferred_memory_usage(self, vector):
+  def test_krpc_early_sender_memory_usage(self, vector):
     """Executes a simple query. The cluster is started with delayed receiver creation to
     trigger RPC queueing.
     """
@@ -83,9 +83,9 @@ class TestKrpcMemUsage(CustomClusterTestSuite):
   @SkipIfBuildType.not_dev_build
   @pytest.mark.execute_serially
   @CustomClusterTestSuite.with_args("--stress_datastream_recvr_delay_ms=1000")
-  def test_krpc_deferred_memory_cancellation(self, vector):
+  def test_krpc_early_sender_memory_cancellation(self, vector):
     """Executes a query and cancels it while RPCs are still queued up. This exercises the
-    code to flush the deferred RPC queue in the receiver.
+    code to flush the early sender RPC queue in the receiver.
     """
     query = "select count(*) from tpch_parquet.lineitem l1 join tpch_parquet.lineitem l2 \
             where l1.l_orderkey = l2.l_orderkey"


[10/21] impala git commit: IMPALA-6675: Default to --compact_catalog_topic=true.

Posted by ta...@apache.org.
IMPALA-6675: Default to --compact_catalog_topic=true.

Testing:
- Ran a few queries locally
- Ran test_compact_catalog_updates.py locally

Mostafa's perf evaluation:
- 130 node cluster
- Load metadata after invalidate for 4 tables, each
  with 100K partitions and 1 million files

Results compaction on vs. compaction off
- 5.7x reduction in topic size and Network
- 30% reduction in Catalog+Statestore CPU
- 15% speedup in query time
- Compaction of topic takes ~22s in the Catalog
- Time spent by Statestore sending the topics is
  reduced from 90s to 17s
- Max topic update duration reduced from 72s to 11s

Change-Id: I39a2dd42a21ef448b85278a8cef3c1d0112b844f
Reviewed-on: http://gerrit.cloudera.org:8080/9661
Reviewed-by: Alex Behm <al...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/cea50c61
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/cea50c61
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/cea50c61

Branch: refs/heads/2.x
Commit: cea50c61076a26a047c739a3445daad9a6be8eb3
Parents: d981b40
Author: Alex Behm <al...@cloudera.com>
Authored: Thu Mar 15 09:57:10 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 be/src/common/global-flags.cc                        |  2 +-
 tests/custom_cluster/test_compact_catalog_updates.py | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/cea50c61/be/src/common/global-flags.cc
----------------------------------------------------------------------
diff --git a/be/src/common/global-flags.cc b/be/src/common/global-flags.cc
index 4676205..11d8db8 100644
--- a/be/src/common/global-flags.cc
+++ b/be/src/common/global-flags.cc
@@ -88,7 +88,7 @@ DEFINE_bool(abort_on_config_error, true, "Abort Impala startup if there are impr
 DEFINE_bool(disable_mem_pools, false, "Set to true to disable memory pooling. "
     "This can be used to help diagnose memory corruption issues.");
 
-DEFINE_bool(compact_catalog_topic, false, "If true, catalog updates sent via the "
+DEFINE_bool(compact_catalog_topic, true, "If true, catalog updates sent via the "
     "statestore are compacted before transmission. This saves network bandwidth at the"
     " cost of a small quantity of CPU time. Enable this option in cluster with large"
     " catalogs. It must be enabled on both the catalog service, and all Impala demons.");

http://git-wip-us.apache.org/repos/asf/impala/blob/cea50c61/tests/custom_cluster/test_compact_catalog_updates.py
----------------------------------------------------------------------
diff --git a/tests/custom_cluster/test_compact_catalog_updates.py b/tests/custom_cluster/test_compact_catalog_updates.py
index c824ad5..05252d5 100644
--- a/tests/custom_cluster/test_compact_catalog_updates.py
+++ b/tests/custom_cluster/test_compact_catalog_updates.py
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# Test Catalog behavior when --compact_catalog_topic is true.
+# Test Catalog behavior when --compact_catalog_topic is false.
 
 import pytest
 
@@ -23,10 +23,10 @@ from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
 
 class TestCompactCatalogUpdates(CustomClusterTestSuite):
   @pytest.mark.execute_serially
-  @CustomClusterTestSuite.with_args(impalad_args="--compact_catalog_topic=true",
-      catalogd_args="--compact_catalog_topic=true")
-  def test_compact_catalog_topic_updates(self):
-    """Start Impala cluster with compact catalog update topics enabled and run a set
+  @CustomClusterTestSuite.with_args(impalad_args="--compact_catalog_topic=false",
+      catalogd_args="--compact_catalog_topic=false")
+  def test_non_compact_catalog_topic_updates(self):
+    """Start Impala cluster with compact catalog update topics disabled and run a set
     of smoke tests to verify that catalog updates are received properly."""
 
     try:


[17/21] impala git commit: IMPALA-6655: Add owner information on database creation

Posted by ta...@apache.org.
IMPALA-6655: Add owner information on database creation

Add owner information on database creation.

> create database foo;
> describe database extended foo;
+---------+----------+---------+
| name    | location | comment |
+---------+----------+---------+
| foo     |          |         |
| Owner:  |          |         |
|         | user1    | USER    |
+---------+----------+---------+

Testing:
- Ran end-to-end query and metadata tests

Change-Id: Id74ec9bd3cb7954999305e9cd9085cbf50921a78
Reviewed-on: http://gerrit.cloudera.org:8080/9637
Reviewed-by: Fredy Wijaya <fw...@cloudera.com>
Reviewed-by: Alex Behm <al...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/614d0ff5
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/614d0ff5
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/614d0ff5

Branch: refs/heads/2.x
Commit: 614d0ff566df3623d978610d3ddb281242ff7a8c
Parents: cea50c6
Author: Fredy Wijaya <fw...@cloudera.com>
Authored: Tue Mar 13 16:31:23 2018 -0500
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 common/thrift/JniCatalog.thrift                          |  3 +++
 .../java/org/apache/impala/analysis/CreateDbStmt.java    | 11 +++++++++++
 .../org/apache/impala/service/CatalogOpExecutor.java     |  3 +++
 .../functional-query/queries/QueryTest/describe-db.test  | 10 ++++++++++
 tests/common/impala_test_suite.py                        |  3 ++-
 5 files changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/614d0ff5/common/thrift/JniCatalog.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/JniCatalog.thrift b/common/thrift/JniCatalog.thrift
index 4edf4d2..371475b 100644
--- a/common/thrift/JniCatalog.thrift
+++ b/common/thrift/JniCatalog.thrift
@@ -88,6 +88,9 @@ struct TCreateDbParams {
 
   // Do not throw an error if a database of the same name already exists.
   4: optional bool if_not_exists
+
+  // Owner of the database
+  5: required string owner
 }
 
 // Parameters of CREATE DATA SOURCE commands

http://git-wip-us.apache.org/repos/asf/impala/blob/614d0ff5/fe/src/main/java/org/apache/impala/analysis/CreateDbStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/CreateDbStmt.java b/fe/src/main/java/org/apache/impala/analysis/CreateDbStmt.java
index c803910..f71f269 100644
--- a/fe/src/main/java/org/apache/impala/analysis/CreateDbStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/CreateDbStmt.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.analysis;
 
+import com.google.common.base.Preconditions;
 import org.apache.hadoop.fs.permission.FsAction;
 import org.apache.impala.authorization.Privilege;
 import org.apache.impala.catalog.Db;
@@ -32,6 +33,8 @@ public class CreateDbStmt extends StatementBase {
   private final HdfsUri location_;
   private final String comment_;
   private final boolean ifNotExists_;
+  // Database owner. Set during analysis.
+  private String owner_;
 
   /**
    * Creates a database with the given name.
@@ -74,6 +77,7 @@ public class CreateDbStmt extends StatementBase {
     params.setComment(getComment());
     params.setLocation(location_ == null ? null : location_.toString());
     params.setIf_not_exists(getIfNotExists());
+    params.setOwner(getOwner());
     return params;
   }
 
@@ -96,5 +100,12 @@ public class CreateDbStmt extends StatementBase {
     if (location_ != null) {
       location_.analyze(analyzer, Privilege.ALL, FsAction.READ_WRITE);
     }
+    owner_ = analyzer.getUser().getName();
   }
+
+  /**
+   * Can only be called after analysis, returns the owner of this database (the user from
+   * the current session).
+   */
+  public String getOwner() { return Preconditions.checkNotNull(owner_); }
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/614d0ff5/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java b/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
index c3b15a1..9ccfa50 100644
--- a/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
+++ b/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
@@ -46,6 +46,7 @@ import org.apache.hadoop.hive.metastore.api.LongColumnStatsData;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.api.Partition;
+import org.apache.hadoop.hive.metastore.api.PrincipalType;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.metastore.api.StringColumnStatsData;
@@ -956,6 +957,8 @@ public class CatalogOpExecutor {
     if (params.getLocation() != null) {
       db.setLocationUri(params.getLocation());
     }
+    db.setOwnerName(params.getOwner());
+    db.setOwnerType(PrincipalType.USER);
     if (LOG.isTraceEnabled()) LOG.trace("Creating database " + dbName);
     Db newDb = null;
     synchronized (metastoreDdlLock_) {

http://git-wip-us.apache.org/repos/asf/impala/blob/614d0ff5/testdata/workloads/functional-query/queries/QueryTest/describe-db.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/describe-db.test b/testdata/workloads/functional-query/queries/QueryTest/describe-db.test
index 8f55325..027e19a 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/describe-db.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/describe-db.test
@@ -31,6 +31,8 @@ string, string, string
 ---- QUERY
 describe database extended impala_test_desc_db1
 ---- RESULTS
+'','$USER','USER'
+'Owner: ','',''
 'impala_test_desc_db1','$NAMENODE/test-warehouse/impala_test_desc_db1.db',''
 ---- TYPES
 string, string, string
@@ -38,6 +40,8 @@ string, string, string
 ---- QUERY
 describe database extended impala_test_desc_db2
 ---- RESULTS
+'','$USER','USER'
+'Owner: ','',''
 'impala_test_desc_db2','$NAMENODE/test-warehouse/impala_test_desc_db2.db','test comment'
 ---- TYPES
 string, string, string
@@ -45,6 +49,8 @@ string, string, string
 ---- QUERY
 describe database extended impala_test_desc_db3
 ---- RESULTS
+'','$USER','USER'
+'Owner: ','',''
 'impala_test_desc_db3','$NAMENODE/testdb',''
 ---- TYPES
 string, string, string
@@ -52,6 +58,8 @@ string, string, string
 ---- QUERY
 describe database extended impala_test_desc_db4
 ---- RESULTS
+'','$USER','USER'
+'Owner: ','',''
 'impala_test_desc_db4','$NAMENODE/test2.db','test comment'
 ---- TYPES
 string, string, string
@@ -59,6 +67,8 @@ string, string, string
 ---- QUERY
 describe database formatted impala_test_desc_db4
 ---- RESULTS
+'','$USER','USER'
+'Owner: ','',''
 'impala_test_desc_db4','$NAMENODE/test2.db','test comment'
 ---- TYPES
 string, string, string

http://git-wip-us.apache.org/repos/asf/impala/blob/614d0ff5/tests/common/impala_test_suite.py
----------------------------------------------------------------------
diff --git a/tests/common/impala_test_suite.py b/tests/common/impala_test_suite.py
index bdd524f..28d9c2e 100644
--- a/tests/common/impala_test_suite.py
+++ b/tests/common/impala_test_suite.py
@@ -291,7 +291,8 @@ class ImpalaTestSuite(BaseTestSuite):
           replace_filenames_with_placeholder = False
         test_section[section_name] = test_section[section_name] \
                                      .replace('$NAMENODE', NAMENODE) \
-                                     .replace('$IMPALA_HOME', IMPALA_HOME)
+                                     .replace('$IMPALA_HOME', IMPALA_HOME) \
+                                     .replace('$USER', getuser())
         if use_db:
           test_section[section_name] = test_section[section_name].replace('$DATABASE', use_db)
     verify_raw_results(test_section, result, vector.get_value('table_format').file_format,


[02/21] impala git commit: IMPALA-6551: Change Kudu TPCDS and TPCH columns to DECIMAL

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q16.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q16.test b/testdata/workloads/tpch/queries/tpch-kudu-q16.test
deleted file mode 100644
index 20f65df..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q16.test
+++ /dev/null
@@ -1,18351 +0,0 @@
-====
----- QUERY: TPCH-Q16
-# Q16 - Parts/Supplier Relation Query
-select
-  p_brand,
-  p_type,
-  p_size,
-  count(distinct ps_suppkey) as supplier_cnt
-from
-  partsupp,
-  part
-where
-  p_partkey = ps_partkey
-  and p_brand <> 'Brand#45'
-  and p_type not like 'MEDIUM POLISHED%'
-  and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
-  and ps_suppkey not in (
-    select
-      s_suppkey
-    from
-      supplier
-    where
-      s_comment like '%Customer%Complaints%'
-  )
-group by
-  p_brand,
-  p_type,
-  p_size
-order by
-  supplier_cnt desc,
-  p_brand,
-  p_type,
-  p_size
----- RESULTS
-'Brand#41','MEDIUM BRUSHED TIN',3,28
-'Brand#54','STANDARD BRUSHED COPPER',14,27
-'Brand#11','STANDARD BRUSHED TIN',23,24
-'Brand#11','STANDARD BURNISHED BRASS',36,24
-'Brand#15','MEDIUM ANODIZED NICKEL',3,24
-'Brand#15','SMALL ANODIZED BRASS',45,24
-'Brand#15','SMALL BURNISHED NICKEL',19,24
-'Brand#21','MEDIUM ANODIZED COPPER',3,24
-'Brand#22','SMALL BRUSHED NICKEL',3,24
-'Brand#22','SMALL BURNISHED BRASS',19,24
-'Brand#25','MEDIUM BURNISHED COPPER',36,24
-'Brand#31','PROMO POLISHED COPPER',36,24
-'Brand#33','LARGE POLISHED TIN',23,24
-'Brand#33','PROMO POLISHED STEEL',14,24
-'Brand#35','PROMO BRUSHED NICKEL',14,24
-'Brand#41','ECONOMY BRUSHED STEEL',9,24
-'Brand#41','ECONOMY POLISHED TIN',19,24
-'Brand#41','LARGE PLATED COPPER',36,24
-'Brand#42','ECONOMY PLATED BRASS',3,24
-'Brand#42','STANDARD POLISHED TIN',49,24
-'Brand#43','PROMO BRUSHED TIN',3,24
-'Brand#43','SMALL ANODIZED COPPER',36,24
-'Brand#44','STANDARD POLISHED NICKEL',3,24
-'Brand#52','ECONOMY PLATED TIN',14,24
-'Brand#52','STANDARD BURNISHED NICKEL',3,24
-'Brand#53','MEDIUM ANODIZED STEEL',14,24
-'Brand#14','PROMO ANODIZED NICKEL',45,23
-'Brand#32','ECONOMY PLATED BRASS',9,23
-'Brand#52','SMALL ANODIZED COPPER',3,23
-'Brand#11','ECONOMY BRUSHED COPPER',45,20
-'Brand#11','ECONOMY PLATED BRASS',23,20
-'Brand#11','LARGE BRUSHED COPPER',49,20
-'Brand#11','LARGE POLISHED COPPER',49,20
-'Brand#12','STANDARD ANODIZED TIN',49,20
-'Brand#12','STANDARD PLATED BRASS',19,20
-'Brand#13','ECONOMY BRUSHED BRASS',9,20
-'Brand#13','ECONOMY BURNISHED STEEL',14,20
-'Brand#13','LARGE BURNISHED NICKEL',19,20
-'Brand#13','MEDIUM BURNISHED COPPER',36,20
-'Brand#13','SMALL BRUSHED TIN',45,20
-'Brand#13','STANDARD ANODIZED COPPER',3,20
-'Brand#13','STANDARD PLATED NICKEL',23,20
-'Brand#14','ECONOMY ANODIZED COPPER',14,20
-'Brand#14','ECONOMY PLATED TIN',36,20
-'Brand#14','ECONOMY POLISHED NICKEL',3,20
-'Brand#14','MEDIUM ANODIZED NICKEL',3,20
-'Brand#14','SMALL POLISHED TIN',14,20
-'Brand#15','MEDIUM ANODIZED COPPER',9,20
-'Brand#15','MEDIUM PLATED TIN',23,20
-'Brand#15','PROMO PLATED BRASS',14,20
-'Brand#15','SMALL ANODIZED COPPER',45,20
-'Brand#15','SMALL PLATED COPPER',49,20
-'Brand#15','STANDARD PLATED TIN',3,20
-'Brand#21','LARGE ANODIZED COPPER',36,20
-'Brand#21','LARGE BRUSHED TIN',3,20
-'Brand#21','MEDIUM ANODIZED COPPER',14,20
-'Brand#21','PROMO BRUSHED TIN',36,20
-'Brand#21','PROMO POLISHED NICKEL',45,20
-'Brand#21','SMALL ANODIZED COPPER',9,20
-'Brand#21','SMALL POLISHED NICKEL',23,20
-'Brand#22','LARGE ANODIZED COPPER',36,20
-'Brand#22','LARGE BRUSHED COPPER',49,20
-'Brand#22','PROMO ANODIZED TIN',49,20
-'Brand#22','PROMO POLISHED BRASS',45,20
-'Brand#22','SMALL BURNISHED STEEL',45,20
-'Brand#23','MEDIUM ANODIZED STEEL',45,20
-'Brand#23','PROMO POLISHED STEEL',23,20
-'Brand#23','STANDARD BRUSHED TIN',14,20
-'Brand#23','STANDARD PLATED NICKEL',36,20
-'Brand#24','PROMO PLATED COPPER',49,20
-'Brand#24','PROMO PLATED STEEL',49,20
-'Brand#24','PROMO POLISHED STEEL',9,20
-'Brand#24','STANDARD BRUSHED TIN',36,20
-'Brand#25','LARGE ANODIZED BRASS',3,20
-'Brand#25','PROMO BURNISHED TIN',3,20
-'Brand#31','ECONOMY POLISHED NICKEL',3,20
-'Brand#31','MEDIUM PLATED TIN',45,20
-'Brand#31','SMALL ANODIZED STEEL',14,20
-'Brand#32','ECONOMY ANODIZED COPPER',36,20
-'Brand#32','ECONOMY BRUSHED NICKEL',49,20
-'Brand#32','LARGE ANODIZED TIN',19,20
-'Brand#32','MEDIUM BURNISHED COPPER',19,20
-'Brand#32','SMALL ANODIZED STEEL',45,20
-'Brand#33','ECONOMY POLISHED COPPER',19,20
-'Brand#33','PROMO PLATED NICKEL',14,20
-'Brand#33','SMALL POLISHED TIN',9,20
-'Brand#33','STANDARD ANODIZED BRASS',49,20
-'Brand#33','STANDARD BURNISHED BRASS',45,20
-'Brand#34','ECONOMY BRUSHED NICKEL',49,20
-'Brand#34','LARGE BRUSHED BRASS',19,20
-'Brand#34','SMALL BRUSHED TIN',3,20
-'Brand#34','STANDARD PLATED COPPER',9,20
-'Brand#35','LARGE ANODIZED NICKEL',3,20
-'Brand#35','MEDIUM ANODIZED BRASS',45,20
-'Brand#35','MEDIUM ANODIZED STEEL',23,20
-'Brand#35','PROMO ANODIZED COPPER',49,20
-'Brand#35','SMALL POLISHED COPPER',14,20
-'Brand#41','LARGE ANODIZED STEEL',3,20
-'Brand#41','LARGE BRUSHED NICKEL',23,20
-'Brand#41','LARGE BURNISHED COPPER',3,20
-'Brand#41','MEDIUM PLATED STEEL',19,20
-'Brand#41','SMALL BURNISHED COPPER',23,20
-'Brand#42','MEDIUM BURNISHED BRASS',14,20
-'Brand#42','SMALL BURNISHED COPPER',3,20
-'Brand#43','ECONOMY POLISHED COPPER',9,20
-'Brand#43','SMALL PLATED STEEL',3,20
-'Brand#43','STANDARD BURNISHED TIN',23,20
-'Brand#44','LARGE ANODIZED STEEL',23,20
-'Brand#44','PROMO ANODIZED TIN',23,20
-'Brand#51','ECONOMY BRUSHED BRASS',49,20
-'Brand#51','ECONOMY POLISHED NICKEL',9,20
-'Brand#51','MEDIUM BRUSHED TIN',9,20
-'Brand#51','MEDIUM PLATED BRASS',9,20
-'Brand#51','PROMO BURNISHED BRASS',9,20
-'Brand#51','SMALL PLATED NICKEL',49,20
-'Brand#51','STANDARD ANODIZED NICKEL',49,20
-'Brand#51','STANDARD BRUSHED COPPER',3,20
-'Brand#52','ECONOMY ANODIZED BRASS',3,20
-'Brand#52','ECONOMY BRUSHED COPPER',49,20
-'Brand#52','LARGE ANODIZED NICKEL',45,20
-'Brand#52','MEDIUM ANODIZED TIN',23,20
-'Brand#52','MEDIUM BURNISHED TIN',45,20
-'Brand#52','SMALL PLATED COPPER',36,20
-'Brand#52','STANDARD ANODIZED BRASS',45,20
-'Brand#53','ECONOMY PLATED COPPER',45,20
-'Brand#53','PROMO ANODIZED COPPER',49,20
-'Brand#53','PROMO BRUSHED COPPER',23,20
-'Brand#53','PROMO PLATED TIN',19,20
-'Brand#53','PROMO POLISHED NICKEL',3,20
-'Brand#53','SMALL ANODIZED STEEL',9,20
-'Brand#53','SMALL BRUSHED COPPER',3,20
-'Brand#53','SMALL BRUSHED NICKEL',3,20
-'Brand#54','ECONOMY PLATED STEEL',9,20
-'Brand#54','ECONOMY POLISHED TIN',3,20
-'Brand#54','SMALL BRUSHED BRASS',19,20
-'Brand#55','MEDIUM ANODIZED COPPER',3,20
-'Brand#55','PROMO BURNISHED STEEL',14,20
-'Brand#55','PROMO POLISHED NICKEL',49,20
-'Brand#55','STANDARD ANODIZED BRASS',19,20
-'Brand#55','STANDARD BURNISHED COPPER',45,20
-'Brand#43','ECONOMY ANODIZED TIN',3,19
-'Brand#11','ECONOMY ANODIZED BRASS',14,16
-'Brand#11','ECONOMY ANODIZED BRASS',23,16
-'Brand#11','ECONOMY ANODIZED COPPER',14,16
-'Brand#11','ECONOMY BRUSHED BRASS',49,16
-'Brand#11','ECONOMY BRUSHED STEEL',19,16
-'Brand#11','ECONOMY BURNISHED NICKEL',23,16
-'Brand#11','LARGE ANODIZED COPPER',14,16
-'Brand#11','LARGE BRUSHED TIN',45,16
-'Brand#11','LARGE BURNISHED COPPER',23,16
-'Brand#11','LARGE BURNISHED NICKEL',36,16
-'Brand#11','LARGE PLATED STEEL',14,16
-'Brand#11','MEDIUM BRUSHED NICKEL',14,16
-'Brand#11','MEDIUM BRUSHED STEEL',49,16
-'Brand#11','MEDIUM BURNISHED NICKEL',49,16
-'Brand#11','MEDIUM BURNISHED TIN',3,16
-'Brand#11','MEDIUM PLATED COPPER',9,16
-'Brand#11','PROMO ANODIZED BRASS',19,16
-'Brand#11','PROMO ANODIZED BRASS',49,16
-'Brand#11','PROMO ANODIZED STEEL',45,16
-'Brand#11','PROMO PLATED BRASS',45,16
-'Brand#11','SMALL ANODIZED TIN',45,16
-'Brand#11','SMALL BRUSHED STEEL',49,16
-'Brand#11','SMALL BURNISHED COPPER',19,16
-'Brand#11','SMALL BURNISHED COPPER',45,16
-'Brand#11','SMALL BURNISHED NICKEL',14,16
-'Brand#11','SMALL POLISHED NICKEL',36,16
-'Brand#11','STANDARD ANODIZED BRASS',19,16
-'Brand#11','STANDARD ANODIZED COPPER',14,16
-'Brand#11','STANDARD BRUSHED STEEL',45,16
-'Brand#11','STANDARD POLISHED NICKEL',23,16
-'Brand#12','ECONOMY ANODIZED TIN',14,16
-'Brand#12','ECONOMY BRUSHED COPPER',9,16
-'Brand#12','ECONOMY BRUSHED COPPER',36,16
-'Brand#12','ECONOMY BURNISHED BRASS',9,16
-'Brand#12','ECONOMY BURNISHED NICKEL',36,16
-'Brand#12','LARGE ANODIZED BRASS',14,16
-'Brand#12','LARGE ANODIZED COPPER',9,16
-'Brand#12','LARGE ANODIZED STEEL',23,16
-'Brand#12','LARGE BURNISHED TIN',36,16
-'Brand#12','LARGE PLATED COPPER',49,16
-'Brand#12','LARGE POLISHED COPPER',49,16
-'Brand#12','MEDIUM PLATED COPPER',19,16
-'Brand#12','MEDIUM PLATED NICKEL',23,16
-'Brand#12','PROMO ANODIZED BRASS',45,16
-'Brand#12','PROMO ANODIZED STEEL',49,16
-'Brand#12','PROMO BURNISHED STEEL',9,16
-'Brand#12','SMALL BRUSHED NICKEL',36,16
-'Brand#12','SMALL BRUSHED TIN',45,16
-'Brand#12','STANDARD ANODIZED BRASS',3,16
-'Brand#12','STANDARD ANODIZED NICKEL',14,16
-'Brand#12','STANDARD BRUSHED BRASS',3,16
-'Brand#12','STANDARD BRUSHED TIN',9,16
-'Brand#12','STANDARD BRUSHED TIN',36,16
-'Brand#12','STANDARD POLISHED COPPER',9,16
-'Brand#13','ECONOMY ANODIZED STEEL',45,16
-'Brand#13','ECONOMY POLISHED BRASS',3,16
-'Brand#13','LARGE BRUSHED NICKEL',23,16
-'Brand#13','LARGE BURNISHED NICKEL',9,16
-'Brand#13','MEDIUM BRUSHED STEEL',49,16
-'Brand#13','MEDIUM BURNISHED NICKEL',49,16
-'Brand#13','MEDIUM PLATED BRASS',49,16
-'Brand#13','PROMO ANODIZED BRASS',14,16
-'Brand#13','PROMO ANODIZED COPPER',3,16
-'Brand#13','SMALL ANODIZED STEEL',45,16
-'Brand#13','SMALL BURNISHED STEEL',19,16
-'Brand#13','SMALL PLATED BRASS',36,16
-'Brand#13','STANDARD ANODIZED BRASS',23,16
-'Brand#13','STANDARD ANODIZED STEEL',23,16
-'Brand#13','STANDARD BURNISHED BRASS',9,16
-'Brand#13','STANDARD PLATED NICKEL',9,16
-'Brand#13','STANDARD PLATED TIN',23,16
-'Brand#14','ECONOMY BRUSHED STEEL',3,16
-'Brand#14','ECONOMY PLATED NICKEL',9,16
-'Brand#14','ECONOMY PLATED STEEL',9,16
-'Brand#14','ECONOMY POLISHED NICKEL',19,16
-'Brand#14','LARGE ANODIZED COPPER',14,16
-'Brand#14','LARGE BRUSHED NICKEL',19,16
-'Brand#14','LARGE POLISHED STEEL',3,16
-'Brand#14','LARGE POLISHED TIN',23,16
-'Brand#14','MEDIUM BURNISHED COPPER',3,16
-'Brand#14','PROMO ANODIZED STEEL',36,16
-'Brand#14','PROMO PLATED BRASS',9,16
-'Brand#14','PROMO PLATED NICKEL',49,16
-'Brand#14','PROMO POLISHED BRASS',19,16
-'Brand#14','PROMO POLISHED STEEL',19,16
-'Brand#14','PROMO POLISHED TIN',45,16
-'Brand#14','SMALL BRUSHED BRASS',14,16
-'Brand#14','SMALL BURNISHED COPPER',45,16
-'Brand#14','STANDARD BRUSHED TIN',19,16
-'Brand#14','STANDARD PLATED COPPER',45,16
-'Brand#14','STANDARD PLATED TIN',9,16
-'Brand#14','STANDARD POLISHED TIN',49,16
-'Brand#15','ECONOMY BRUSHED STEEL',19,16
-'Brand#15','LARGE BRUSHED BRASS',14,16
-'Brand#15','LARGE BRUSHED STEEL',14,16
-'Brand#15','LARGE BURNISHED NICKEL',3,16
-'Brand#15','LARGE PLATED COPPER',49,16
-'Brand#15','PROMO ANODIZED NICKEL',3,16
-'Brand#15','PROMO BURNISHED TIN',49,16
-'Brand#15','PROMO PLATED STEEL',3,16
-'Brand#15','PROMO POLISHED STEEL',49,16
-'Brand#15','SMALL BRUSHED COPPER',9,16
-'Brand#15','SMALL BRUSHED NICKEL',23,16
-'Brand#15','SMALL PLATED BRASS',49,16
-'Brand#15','STANDARD ANODIZED COPPER',45,16
-'Brand#15','STANDARD BRUSHED COPPER',14,16
-'Brand#15','STANDARD PLATED TIN',36,16
-'Brand#21','ECONOMY ANODIZED STEEL',45,16
-'Brand#21','ECONOMY BRUSHED COPPER',9,16
-'Brand#21','ECONOMY POLISHED STEEL',19,16
-'Brand#21','LARGE ANODIZED STEEL',14,16
-'Brand#21','MEDIUM ANODIZED STEEL',36,16
-'Brand#21','PROMO POLISHED BRASS',14,16
-'Brand#21','PROMO POLISHED TIN',49,16
-'Brand#21','SMALL BRUSHED COPPER',3,16
-'Brand#21','SMALL PLATED STEEL',45,16
-'Brand#21','SMALL PLATED TIN',45,16
-'Brand#21','STANDARD POLISHED STEEL',36,16
-'Brand#22','ECONOMY BRUSHED BRASS',9,16
-'Brand#22','ECONOMY BRUSHED NICKEL',36,16
-'Brand#22','ECONOMY POLISHED TIN',36,16
-'Brand#22','LARGE BRUSHED COPPER',19,16
-'Brand#22','LARGE BRUSHED TIN',36,16
-'Brand#22','LARGE POLISHED COPPER',19,16
-'Brand#22','MEDIUM ANODIZED BRASS',23,16
-'Brand#22','MEDIUM ANODIZED NICKEL',9,16
-'Brand#22','MEDIUM BRUSHED NICKEL',14,16
-'Brand#22','MEDIUM PLATED NICKEL',23,16
-'Brand#22','PROMO ANODIZED TIN',45,16
-'Brand#22','PROMO POLISHED STEEL',49,16
-'Brand#22','SMALL BRUSHED NICKEL',45,16
-'Brand#22','SMALL POLISHED BRASS',36,16
-'Brand#22','SMALL POLISHED STEEL',9,16
-'Brand#22','STANDARD BURNISHED BRASS',45,16
-'Brand#22','STANDARD BURNISHED NICKEL',3,16
-'Brand#22','STANDARD PLATED BRASS',9,16
-'Brand#23','ECONOMY BRUSHED TIN',49,16
-'Brand#23','ECONOMY BURNISHED COPPER',45,16
-'Brand#23','ECONOMY BURNISHED NICKEL',19,16
-'Brand#23','ECONOMY BURNISHED TIN',9,16
-'Brand#23','ECONOMY PLATED BRASS',9,16
-'Brand#23','ECONOMY PLATED COPPER',14,16
-'Brand#23','LARGE ANODIZED STEEL',23,16
-'Brand#23','LARGE ANODIZED STEEL',49,16
-'Brand#23','LARGE BURNISHED COPPER',23,16
-'Brand#23','LARGE POLISHED NICKEL',9,16
-'Brand#23','MEDIUM BRUSHED STEEL',3,16
-'Brand#23','PROMO ANODIZED COPPER',19,16
-'Brand#23','PROMO ANODIZED TIN',3,16
-'Brand#23','PROMO BURNISHED COPPER',14,16
-'Brand#23','PROMO PLATED BRASS',3,16
-'Brand#23','SMALL ANODIZED BRASS',23,16
-'Brand#23','SMALL BRUSHED BRASS',45,16
-'Brand#23','SMALL POLISHED TIN',3,16
-'Brand#23','STANDARD BURNISHED COPPER',19,16
-'Brand#23','STANDARD BURNISHED NICKEL',49,16
-'Brand#23','STANDARD PLATED BRASS',9,16
-'Brand#23','STANDARD PLATED COPPER',45,16
-'Brand#23','STANDARD POLISHED BRASS',9,16
-'Brand#24','ECONOMY ANODIZED BRASS',3,16
-'Brand#24','ECONOMY BRUSHED COPPER',36,16
-'Brand#24','ECONOMY BRUSHED STEEL',14,16
-'Brand#24','ECONOMY POLISHED COPPER',36,16
-'Brand#24','ECONOMY POLISHED NICKEL',3,16
-'Brand#24','LARGE ANODIZED BRASS',23,16
-'Brand#24','LARGE BURNISHED BRASS',45,16
-'Brand#24','LARGE BURNISHED STEEL',14,16
-'Brand#24','LARGE PLATED TIN',9,16
-'Brand#24','MEDIUM BRUSHED NICKEL',49,16
-'Brand#24','MEDIUM BURNISHED STEEL',3,16
-'Brand#24','PROMO BURNISHED COPPER',49,16
-'Brand#24','PROMO BURNISHED STEEL',49,16
-'Brand#24','PROMO POLISHED STEEL',23,16
-'Brand#24','SMALL ANODIZED NICKEL',19,16
-'Brand#24','STANDARD BURNISHED COPPER',19,16
-'Brand#24','STANDARD BURNISHED STEEL',36,16
-'Brand#24','STANDARD PLATED NICKEL',23,16
-'Brand#24','STANDARD PLATED TIN',49,16
-'Brand#25','ECONOMY ANODIZED COPPER',14,16
-'Brand#25','ECONOMY BURNISHED NICKEL',9,16
-'Brand#25','ECONOMY PLATED TIN',14,16
-'Brand#25','ECONOMY POLISHED TIN',45,16
-'Brand#25','LARGE ANODIZED STEEL',9,16
-'Brand#25','LARGE ANODIZED TIN',45,16
-'Brand#25','LARGE BRUSHED NICKEL',36,16
-'Brand#25','LARGE BURNISHED NICKEL',14,16
-'Brand#25','LARGE POLISHED STEEL',19,16
-'Brand#25','MEDIUM BRUSHED COPPER',9,16
-'Brand#25','MEDIUM BURNISHED COPPER',49,16
-'Brand#25','MEDIUM BURNISHED TIN',3,16
-'Brand#25','MEDIUM PLATED STEEL',9,16
-'Brand#25','PROMO ANODIZED BRASS',49,16
-'Brand#25','PROMO ANODIZED STEEL',19,16
-'Brand#25','PROMO ANODIZED TIN',23,16
-'Brand#25','PROMO BURNISHED COPPER',49,16
-'Brand#25','PROMO POLISHED COPPER',14,16
-'Brand#25','SMALL ANODIZED COPPER',23,16
-'Brand#25','SMALL BRUSHED STEEL',23,16
-'Brand#25','SMALL POLISHED COPPER',23,16
-'Brand#25','STANDARD BURNISHED STEEL',23,16
-'Brand#25','STANDARD BURNISHED TIN',3,16
-'Brand#25','STANDARD BURNISHED TIN',36,16
-'Brand#25','STANDARD PLATED BRASS',45,16
-'Brand#25','STANDARD PLATED COPPER',49,16
-'Brand#31','ECONOMY ANODIZED BRASS',45,16
-'Brand#31','ECONOMY BRUSHED COPPER',14,16
-'Brand#31','ECONOMY BRUSHED COPPER',36,16
-'Brand#31','LARGE ANODIZED STEEL',45,16
-'Brand#31','LARGE BURNISHED NICKEL',45,16
-'Brand#31','LARGE PLATED TIN',14,16
-'Brand#31','LARGE POLISHED COPPER',49,16
-'Brand#31','MEDIUM ANODIZED NICKEL',49,16
-'Brand#31','MEDIUM BURNISHED BRASS',19,16
-'Brand#31','PROMO ANODIZED NICKEL',14,16
-'Brand#31','PROMO BRUSHED TIN',45,16
-'Brand#31','PROMO BURNISHED STEEL',36,16
-'Brand#31','SMALL ANODIZED NICKEL',23,16
-'Brand#31','SMALL BRUSHED NICKEL',14,16
-'Brand#31','SMALL BRUSHED TIN',19,16
-'Brand#31','SMALL PLATED NICKEL',23,16
-'Brand#31','SMALL POLISHED BRASS',23,16
-'Brand#31','SMALL POLISHED TIN',14,16
-'Brand#31','SMALL POLISHED TIN',45,16
-'Brand#31','STANDARD BRUSHED COPPER',45,16
-'Brand#31','STANDARD POLISHED STEEL',36,16
-'Brand#32','ECONOMY BRUSHED STEEL',9,16
-'Brand#32','ECONOMY PLATED STEEL',14,16
-'Brand#32','LARGE ANODIZED BRASS',36,16
-'Brand#32','LARGE BURNISHED NICKEL',36,16
-'Brand#32','LARGE PLATED BRASS',36,16
-'Brand#32','LARGE PLATED STEEL',23,16
-'Brand#32','MEDIUM BRUSHED BRASS',49,16
-'Brand#32','MEDIUM BRUSHED TIN',9,16
-'Brand#32','MEDIUM PLATED COPPER',36,16
-'Brand#32','PROMO ANODIZED TIN',36,16
-'Brand#32','PROMO BRUSHED BRASS',9,16
-'Brand#32','PROMO BURNISHED STEEL',36,16
-'Brand#32','PROMO PLATED STEEL',3,16
-'Brand#32','PROMO PLATED TIN',45,16
-'Brand#32','SMALL BURNISHED TIN',49,16
-'Brand#32','SMALL PLATED NICKEL',36,16
-'Brand#32','SMALL POLISHED NICKEL',36,16
-'Brand#32','SMALL POLISHED STEEL',9,16
-'Brand#32','SMALL POLISHED TIN',36,16
-'Brand#32','STANDARD ANODIZED COPPER',14,16
-'Brand#32','STANDARD ANODIZED TIN',9,16
-'Brand#32','STANDARD BURNISHED COPPER',45,16
-'Brand#32','STANDARD BURNISHED COPPER',49,16
-'Brand#32','STANDARD POLISHED BRASS',14,16
-'Brand#32','STANDARD POLISHED STEEL',14,16
-'Brand#33','ECONOMY ANODIZED STEEL',49,16
-'Brand#33','ECONOMY PLATED BRASS',36,16
-'Brand#33','ECONOMY PLATED COPPER',19,16
-'Brand#33','ECONOMY POLISHED NICKEL',19,16
-'Brand#33','LARGE ANODIZED STEEL',45,16
-'Brand#33','LARGE ANODIZED TIN',45,16
-'Brand#33','LARGE BURNISHED COPPER',45,16
-'Brand#33','LARGE POLISHED STEEL',3,16
-'Brand#33','MEDIUM ANODIZED BRASS',23,16
-'Brand#33','MEDIUM ANODIZED NICKEL',3,16
-'Brand#33','MEDIUM ANODIZED TIN',14,16
-'Brand#33','MEDIUM BRUSHED COPPER',49,16
-'Brand#33','MEDIUM BURNISHED COPPER',9,16
-'Brand#33','PROMO BURNISHED BRASS',9,16
-'Brand#33','PROMO BURNISHED BRASS',19,16
-'Brand#33','PROMO PLATED STEEL',49,16
-'Brand#33','SMALL ANODIZED BRASS',36,16
-'Brand#33','SMALL BRUSHED BRASS',3,16
-'Brand#33','SMALL BRUSHED STEEL',9,16
-'Brand#33','SMALL POLISHED BRASS',14,16
-'Brand#33','SMALL POLISHED COPPER',36,16
-'Brand#33','SMALL POLISHED NICKEL',19,16
-'Brand#33','STANDARD ANODIZED BRASS',9,16
-'Brand#33','STANDARD ANODIZED TIN',3,16
-'Brand#33','STANDARD BURNISHED NICKEL',49,16
-'Brand#33','STANDARD PLATED NICKEL',49,16
-'Brand#33','STANDARD POLISHED BRASS',9,16
-'Brand#33','STANDARD POLISHED BRASS',14,16
-'Brand#33','STANDARD POLISHED COPPER',49,16
-'Brand#33','STANDARD POLISHED STEEL',3,16
-'Brand#34','ECONOMY BURNISHED BRASS',14,16
-'Brand#34','ECONOMY POLISHED STEEL',36,16
-'Brand#34','LARGE BRUSHED BRASS',23,16
-'Brand#34','LARGE PLATED BRASS',36,16
-'Brand#34','LARGE PLATED TIN',3,16
-'Brand#34','LARGE POLISHED COPPER',14,16
-'Brand#34','MEDIUM ANODIZED COPPER',36,16
-'Brand#34','MEDIUM BRUSHED STEEL',23,16
-'Brand#34','MEDIUM PLATED NICKEL',23,16
-'Brand#34','PROMO BRUSHED NICKEL',45,16
-'Brand#34','PROMO POLISHED TIN',3,16
-'Brand#34','SMALL ANODIZED NICKEL',14,16
-'Brand#34','SMALL BURNISHED TIN',3,16
-'Brand#34','SMALL POLISHED NICKEL',36,16
-'Brand#34','STANDARD ANODIZED STEEL',9,16
-'Brand#34','STANDARD BURNISHED NICKEL',19,16
-'Brand#34','STANDARD BURNISHED NICKEL',23,16
-'Brand#34','STANDARD POLISHED COPPER',23,16
-'Brand#35','ECONOMY ANODIZED COPPER',36,16
-'Brand#35','ECONOMY BURNISHED NICKEL',19,16
-'Brand#35','ECONOMY BURNISHED TIN',9,16
-'Brand#35','ECONOMY PLATED STEEL',14,16
-'Brand#35','LARGE ANODIZED BRASS',9,16
-'Brand#35','LARGE ANODIZED COPPER',49,16
-'Brand#35','LARGE ANODIZED NICKEL',9,16
-'Brand#35','LARGE BRUSHED TIN',49,16
-'Brand#35','LARGE BURNISHED COPPER',23,16
-'Brand#35','LARGE BURNISHED NICKEL',9,16
-'Brand#35','LARGE BURNISHED STEEL',3,16
-'Brand#35','LARGE PLATED COPPER',19,16
-'Brand#35','MEDIUM BRUSHED STEEL',23,16
-'Brand#35','MEDIUM PLATED NICKEL',23,16
-'Brand#35','PROMO BRUSHED NICKEL',19,16
-'Brand#35','SMALL ANODIZED BRASS',45,16
-'Brand#35','SMALL BRUSHED TIN',49,16
-'Brand#41','ECONOMY ANODIZED STEEL',49,16
-'Brand#41','ECONOMY PLATED STEEL',3,16
-'Brand#41','ECONOMY PLATED TIN',3,16
-'Brand#41','ECONOMY POLISHED STEEL',19,16
-'Brand#41','ECONOMY POLISHED STEEL',45,16
-'Brand#41','LARGE ANODIZED BRASS',36,16
-'Brand#41','LARGE BURNISHED BRASS',23,16
-'Brand#41','LARGE POLISHED BRASS',36,16
-'Brand#41','LARGE POLISHED NICKEL',3,16
-'Brand#41','MEDIUM BURNISHED TIN',3,16
-'Brand#41','MEDIUM PLATED STEEL',3,16
-'Brand#41','PROMO PLATED BRASS',9,16
-'Brand#41','PROMO PLATED STEEL',36,16
-'Brand#41','PROMO POLISHED STEEL',36,16
-'Brand#41','PROMO POLISHED TIN',19,16
-'Brand#41','SMALL ANODIZED COPPER',23,16
-'Brand#41','SMALL ANODIZED STEEL',45,16
-'Brand#41','SMALL BRUSHED NICKEL',45,16
-'Brand#41','SMALL BURNISHED NICKEL',36,16
-'Brand#41','SMALL POLISHED NICKEL',9,16
-'Brand#41','SMALL POLISHED STEEL',45,16
-'Brand#41','SMALL POLISHED TIN',14,16
-'Brand#41','STANDARD BRUSHED NICKEL',45,16
-'Brand#42','ECONOMY BRUSHED STEEL',14,16
-'Brand#42','ECONOMY BURNISHED STEEL',9,16
-'Brand#42','ECONOMY BURNISHED STEEL',45,16
-'Brand#42','LARGE ANODIZED TIN',23,16
-'Brand#42','LARGE BRUSHED STEEL',14,16
-'Brand#42','LARGE BURNISHED NICKEL',19,16
-'Brand#42','LARGE PLATED STEEL',45,16
-'Brand#42','LARGE POLISHED STEEL',14,16
-'Brand#42','MEDIUM ANODIZED STEEL',14,16
-'Brand#42','MEDIUM ANODIZED TIN',19,16
-'Brand#42','MEDIUM BRUSHED COPPER',9,16
-'Brand#42','MEDIUM BRUSHED STEEL',14,16
-'Brand#42','MEDIUM BURNISHED COPPER',49,16
-'Brand#42','MEDIUM BURNISHED NICKEL',23,16
-'Brand#42','MEDIUM BURNISHED TIN',49,16
-'Brand#42','PROMO ANODIZED NICKEL',49,16
-'Brand#42','PROMO ANODIZED STEEL',49,16
-'Brand#42','PROMO BURNISHED TIN',49,16
-'Brand#42','SMALL ANODIZED BRASS',23,16
-'Brand#42','SMALL ANODIZED NICKEL',19,16
-'Brand#42','SMALL ANODIZED TIN',49,16
-'Brand#42','SMALL PLATED COPPER',23,16
-'Brand#42','STANDARD ANODIZED BRASS',9,16
-'Brand#42','STANDARD ANODIZED NICKEL',9,16
-'Brand#42','STANDARD BRUSHED STEEL',49,16
-'Brand#42','STANDARD BRUSHED TIN',45,16
-'Brand#42','STANDARD PLATED TIN',23,16
-'Brand#43','ECONOMY BRUSHED STEEL',23,16
-'Brand#43','ECONOMY PLATED TIN',49,16
-'Brand#43','ECONOMY POLISHED TIN',14,16
-'Brand#43','LARGE BRUSHED COPPER',9,16
-'Brand#43','LARGE BURNISHED STEEL',9,16
-'Brand#43','LARGE PLATED BRASS',14,16
-'Brand#43','LARGE PLATED BRASS',19,16
-'Brand#43','LARGE PLATED NICKEL',45,16
-'Brand#43','MEDIUM ANODIZED COPPER',49,16
-'Brand#43','PROMO BRUSHED BRASS',36,16
-'Brand#43','PROMO BRUSHED STEEL',49,16
-'Brand#43','PROMO PLATED BRASS',45,16
-'Brand#43','SMALL BURNISHED COPPER',19,16
-'Brand#43','SMALL BURNISHED TIN',23,16
-'Brand#43','SMALL BURNISHED TIN',45,16
-'Brand#43','SMALL PLATED COPPER',23,16
-'Brand#43','SMALL POLISHED STEEL',19,16
-'Brand#43','STANDARD ANODIZED TIN',45,16
-'Brand#43','STANDARD PLATED BRASS',3,16
-'Brand#44','ECONOMY ANODIZED BRASS',45,16
-'Brand#44','ECONOMY BRUSHED TIN',45,16
-'Brand#44','ECONOMY PLATED COPPER',23,16
-'Brand#44','ECONOMY PLATED STEEL',3,16
-'Brand#44','LARGE BRUSHED BRASS',9,16
-'Brand#44','LARGE PLATED BRASS',49,16
-'Brand#44','LARGE PLATED STEEL',14,16
-'Brand#44','LARGE POLISHED TIN',19,16
-'Brand#44','MEDIUM ANODIZED NICKEL',9,16
-'Brand#44','MEDIUM ANODIZED TIN',49,16
-'Brand#44','MEDIUM BRUSHED NICKEL',36,16
-'Brand#44','MEDIUM BURNISHED NICKEL',23,16
-'Brand#44','MEDIUM BURNISHED NICKEL',45,16
-'Brand#44','MEDIUM PLATED BRASS',9,16
-'Brand#44','MEDIUM PLATED STEEL',49,16
-'Brand#44','PROMO BURNISHED TIN',3,16
-'Brand#44','SMALL ANODIZED COPPER',9,16
-'Brand#44','SMALL ANODIZED STEEL',14,16
-'Brand#44','SMALL BRUSHED STEEL',19,16
-'Brand#44','SMALL BRUSHED TIN',14,16
-'Brand#44','SMALL BURNISHED STEEL',23,16
-'Brand#44','SMALL PLATED STEEL',19,16
-'Brand#44','STANDARD ANODIZED NICKEL',45,16
-'Brand#44','STANDARD ANODIZED STEEL',19,16
-'Brand#44','STANDARD BRUSHED COPPER',36,16
-'Brand#44','STANDARD PLATED BRASS',49,16
-'Brand#44','STANDARD PLATED NICKEL',45,16
-'Brand#44','STANDARD PLATED STEEL',36,16
-'Brand#51','ECONOMY ANODIZED STEEL',9,16
-'Brand#51','ECONOMY BRUSHED STEEL',23,16
-'Brand#51','ECONOMY PLATED STEEL',9,16
-'Brand#51','LARGE BURNISHED COPPER',14,16
-'Brand#51','LARGE PLATED BRASS',3,16
-'Brand#51','LARGE PLATED BRASS',36,16
-'Brand#51','LARGE PLATED BRASS',49,16
-'Brand#51','LARGE POLISHED BRASS',3,16
-'Brand#51','LARGE POLISHED NICKEL',19,16
-'Brand#51','MEDIUM ANODIZED BRASS',9,16
-'Brand#51','MEDIUM ANODIZED TIN',9,16
-'Brand#51','MEDIUM PLATED BRASS',14,16
-'Brand#51','PROMO BURNISHED NICKEL',14,16
-'Brand#51','PROMO BURNISHED TIN',9,16
-'Brand#51','PROMO PLATED NICKEL',14,16
-'Brand#51','SMALL ANODIZED COPPER',45,16
-'Brand#51','SMALL BURNISHED COPPER',36,16
-'Brand#51','SMALL BURNISHED TIN',9,16
-'Brand#51','STANDARD BURNISHED STEEL',45,16
-'Brand#51','STANDARD BURNISHED TIN',9,16
-'Brand#51','STANDARD PLATED BRASS',36,16
-'Brand#51','STANDARD PLATED STEEL',45,16
-'Brand#52','ECONOMY BRUSHED NICKEL',3,16
-'Brand#52','ECONOMY BURNISHED COPPER',9,16
-'Brand#52','ECONOMY BURNISHED STEEL',14,16
-'Brand#52','LARGE ANODIZED BRASS',23,16
-'Brand#52','LARGE BRUSHED BRASS',14,16
-'Brand#52','LARGE BURNISHED TIN',23,16
-'Brand#52','MEDIUM ANODIZED COPPER',23,16
-'Brand#52','PROMO BRUSHED STEEL',36,16
-'Brand#52','PROMO PLATED COPPER',14,16
-'Brand#52','SMALL PLATED COPPER',3,16
-'Brand#52','STANDARD BRUSHED COPPER',14,16
-'Brand#52','STANDARD BURNISHED BRASS',14,16
-'Brand#52','STANDARD BURNISHED BRASS',19,16
-'Brand#52','STANDARD POLISHED NICKEL',36,16
-'Brand#53','ECONOMY ANODIZED BRASS',19,16
-'Brand#53','LARGE BRUSHED COPPER',14,16
-'Brand#53','LARGE BRUSHED NICKEL',45,16
-'Brand#53','LARGE BURNISHED COPPER',36,16
-'Brand#53','LARGE PLATED COPPER',36,16
-'Brand#53','LARGE PLATED STEEL',36,16
-'Brand#53','LARGE PLATED TIN',14,16
-'Brand#53','LARGE POLISHED BRASS',14,16
-'Brand#53','LARGE POLISHED STEEL',49,16
-'Brand#53','MEDIUM BRUSHED NICKEL',49,16
-'Brand#53','MEDIUM BURNISHED BRASS',3,16
-'Brand#53','MEDIUM BURNISHED COPPER',49,16
-'Brand#53','PROMO ANODIZED COPPER',36,16
-'Brand#53','PROMO ANODIZED NICKEL',3,16
-'Brand#53','PROMO BURNISHED STEEL',9,16
-'Brand#53','PROMO PLATED COPPER',3,16
-'Brand#53','SMALL ANODIZED TIN',9,16
-'Brand#53','STANDARD PLATED BRASS',23,16
-'Brand#54','ECONOMY BRUSHED BRASS',45,16
-'Brand#54','ECONOMY BRUSHED COPPER',14,16
-'Brand#54','LARGE ANODIZED NICKEL',49,16
-'Brand#54','LARGE BURNISHED BRASS',49,16
-'Brand#54','LARGE BURNISHED COPPER',19,16
-'Brand#54','LARGE POLISHED NICKEL',36,16
-'Brand#54','PROMO BURNISHED TIN',19,16
-'Brand#54','PROMO PLATED BRASS',49,16
-'Brand#54','PROMO POLISHED TIN',23,16
-'Brand#54','SMALL ANODIZED COPPER',14,16
-'Brand#54','SMALL BRUSHED COPPER',9,16
-'Brand#54','SMALL PLATED NICKEL',9,16
-'Brand#54','STANDARD ANODIZED COPPER',49,16
-'Brand#54','STANDARD ANODIZED TIN',14,16
-'Brand#54','STANDARD BRUSHED COPPER',45,16
-'Brand#54','STANDARD PLATED COPPER',23,16
-'Brand#54','STANDARD PLATED COPPER',45,16
-'Brand#54','STANDARD POLISHED BRASS',19,16
-'Brand#54','STANDARD POLISHED STEEL',14,16
-'Brand#55','ECONOMY BRUSHED TIN',36,16
-'Brand#55','ECONOMY POLISHED TIN',14,16
-'Brand#55','LARGE PLATED BRASS',9,16
-'Brand#55','LARGE POLISHED STEEL',9,16
-'Brand#55','MEDIUM BURNISHED TIN',36,16
-'Brand#55','PROMO ANODIZED BRASS',14,16
-'Brand#55','PROMO ANODIZED COPPER',14,16
-'Brand#55','SMALL BURNISHED STEEL',9,16
-'Brand#55','STANDARD POLISHED COPPER',19,16
-'Brand#23','PROMO POLISHED COPPER',36,15
-'Brand#33','PROMO POLISHED STEEL',9,15
-'Brand#34','LARGE BURNISHED BRASS',23,15
-'Brand#41','PROMO ANODIZED BRASS',49,15
-'Brand#11','ECONOMY ANODIZED NICKEL',14,12
-'Brand#11','ECONOMY ANODIZED NICKEL',23,12
-'Brand#11','ECONOMY ANODIZED STEEL',36,12
-'Brand#11','ECONOMY ANODIZED TIN',14,12
-'Brand#11','ECONOMY BRUSHED COPPER',14,12
-'Brand#11','ECONOMY BURNISHED BRASS',36,12
-'Brand#11','ECONOMY BURNISHED COPPER',3,12
-'Brand#11','ECONOMY BURNISHED COPPER',49,12
-'Brand#11','ECONOMY PLATED COPPER',3,12
-'Brand#11','ECONOMY PLATED COPPER',19,12
-'Brand#11','ECONOMY PLATED NICKEL',14,12
-'Brand#11','ECONOMY POLISHED COPPER',14,12
-'Brand#11','ECONOMY POLISHED TIN',23,12
-'Brand#11','LARGE ANODIZED NICKEL',9,12
-'Brand#11','LARGE ANODIZED STEEL',23,12
-'Brand#11','LARGE ANODIZED TIN',36,12
-'Brand#11','LARGE BRUSHED BRASS',19,12
-'Brand#11','LARGE BRUSHED STEEL',19,12
-'Brand#11','LARGE BRUSHED STEEL',36,12
-'Brand#11','LARGE BURNISHED BRASS',3,12
-'Brand#11','LARGE PLATED TIN',19,12
-'Brand#11','MEDIUM ANODIZED BRASS',45,12
-'Brand#11','MEDIUM BRUSHED BRASS',3,12
-'Brand#11','MEDIUM BRUSHED BRASS',23,12
-'Brand#11','MEDIUM BRUSHED BRASS',45,12
-'Brand#11','MEDIUM BRUSHED NICKEL',36,12
-'Brand#11','MEDIUM BRUSHED STEEL',19,12
-'Brand#11','MEDIUM BRUSHED STEEL',23,12
-'Brand#11','MEDIUM BURNISHED NICKEL',23,12
-'Brand#11','MEDIUM BURNISHED STEEL',9,12
-'Brand#11','MEDIUM PLATED BRASS',14,12
-'Brand#11','MEDIUM PLATED COPPER',3,12
-'Brand#11','MEDIUM PLATED STEEL',14,12
-'Brand#11','PROMO ANODIZED BRASS',45,12
-'Brand#11','PROMO BRUSHED NICKEL',9,12
-'Brand#11','PROMO BRUSHED STEEL',45,12
-'Brand#11','PROMO BURNISHED BRASS',23,12
-'Brand#11','PROMO BURNISHED COPPER',23,12
-'Brand#11','PROMO BURNISHED NICKEL',36,12
-'Brand#11','PROMO PLATED BRASS',14,12
-'Brand#11','PROMO PLATED COPPER',14,12
-'Brand#11','PROMO PLATED STEEL',49,12
-'Brand#11','PROMO PLATED TIN',3,12
-'Brand#11','PROMO POLISHED COPPER',14,12
-'Brand#11','PROMO POLISHED NICKEL',3,12
-'Brand#11','PROMO POLISHED STEEL',3,12
-'Brand#11','PROMO POLISHED STEEL',23,12
-'Brand#11','PROMO POLISHED TIN',14,12
-'Brand#11','SMALL ANODIZED BRASS',49,12
-'Brand#11','SMALL ANODIZED COPPER',49,12
-'Brand#11','SMALL ANODIZED NICKEL',9,12
-'Brand#11','SMALL ANODIZED STEEL',45,12
-'Brand#11','SMALL BURNISHED BRASS',19,12
-'Brand#11','SMALL BURNISHED BRASS',49,12
-'Brand#11','SMALL BURNISHED NICKEL',9,12
-'Brand#11','SMALL BURNISHED NICKEL',49,12
-'Brand#11','SMALL PLATED COPPER',45,12
-'Brand#11','SMALL PLATED NICKEL',45,12
-'Brand#11','SMALL PLATED TIN',36,12
-'Brand#11','SMALL POLISHED BRASS',14,12
-'Brand#11','SMALL POLISHED BRASS',19,12
-'Brand#11','SMALL POLISHED STEEL',3,12
-'Brand#11','SMALL POLISHED STEEL',36,12
-'Brand#11','STANDARD ANODIZED COPPER',49,12
-'Brand#11','STANDARD BRUSHED COPPER',23,12
-'Brand#11','STANDARD BRUSHED NICKEL',9,12
-'Brand#11','STANDARD BURNISHED BRASS',19,12
-'Brand#11','STANDARD BURNISHED COPPER',9,12
-'Brand#11','STANDARD PLATED STEEL',19,12
-'Brand#11','STANDARD PLATED TIN',45,12
-'Brand#11','STANDARD POLISHED STEEL',9,12
-'Brand#11','STANDARD POLISHED STEEL',19,12
-'Brand#11','STANDARD POLISHED TIN',14,12
-'Brand#12','ECONOMY ANODIZED BRASS',49,12
-'Brand#12','ECONOMY ANODIZED COPPER',14,12
-'Brand#12','ECONOMY ANODIZED NICKEL',19,12
-'Brand#12','ECONOMY ANODIZED NICKEL',45,12
-'Brand#12','ECONOMY BRUSHED BRASS',23,12
-'Brand#12','ECONOMY BRUSHED STEEL',9,12
-'Brand#12','ECONOMY BRUSHED TIN',3,12
-'Brand#12','ECONOMY BRUSHED TIN',19,12
-'Brand#12','ECONOMY BURNISHED BRASS',19,12
-'Brand#12','ECONOMY BURNISHED COPPER',49,12
-'Brand#12','ECONOMY BURNISHED STEEL',9,12
-'Brand#12','ECONOMY BURNISHED STEEL',36,12
-'Brand#12','ECONOMY PLATED BRASS',3,12
-'Brand#12','ECONOMY PLATED NICKEL',9,12
-'Brand#12','ECONOMY PLATED TIN',45,12
-'Brand#12','ECONOMY POLISHED NICKEL',45,12
-'Brand#12','ECONOMY POLISHED STEEL',9,12
-'Brand#12','ECONOMY POLISHED STEEL',19,12
-'Brand#12','ECONOMY POLISHED TIN',14,12
-'Brand#12','LARGE ANODIZED COPPER',19,12
-'Brand#12','LARGE ANODIZED NICKEL',49,12
-'Brand#12','LARGE ANODIZED TIN',49,12
-'Brand#12','LARGE BRUSHED BRASS',9,12
-'Brand#12','LARGE BRUSHED BRASS',23,12
-'Brand#12','LARGE BRUSHED BRASS',49,12
-'Brand#12','LARGE BURNISHED NICKEL',45,12
-'Brand#12','LARGE PLATED BRASS',3,12
-'Brand#12','LARGE POLISHED BRASS',23,12
-'Brand#12','LARGE POLISHED COPPER',19,12
-'Brand#12','MEDIUM ANODIZED BRASS',3,12
-'Brand#12','MEDIUM ANODIZED COPPER',9,12
-'Brand#12','MEDIUM BRUSHED BRASS',14,12
-'Brand#12','MEDIUM BRUSHED BRASS',23,12
-'Brand#12','MEDIUM BRUSHED BRASS',45,12
-'Brand#12','MEDIUM BRUSHED COPPER',23,12
-'Brand#12','MEDIUM BRUSHED NICKEL',14,12
-'Brand#12','MEDIUM BRUSHED TIN',14,12
-'Brand#12','MEDIUM BRUSHED TIN',36,12
-'Brand#12','MEDIUM BURNISHED BRASS',19,12
-'Brand#12','MEDIUM PLATED BRASS',23,12
-'Brand#12','MEDIUM PLATED NICKEL',45,12
-'Brand#12','MEDIUM PLATED STEEL',19,12
-'Brand#12','MEDIUM PLATED TIN',23,12
-'Brand#12','PROMO BRUSHED COPPER',36,12
-'Brand#12','PROMO BRUSHED STEEL',19,12
-'Brand#12','PROMO BRUSHED STEEL',45,12
-'Brand#12','PROMO PLATED COPPER',14,12
-'Brand#12','PROMO PLATED STEEL',19,12
-'Brand#12','PROMO POLISHED COPPER',45,12
-'Brand#12','PROMO POLISHED STEEL',45,12
-'Brand#12','PROMO POLISHED TIN',3,12
-'Brand#12','PROMO POLISHED TIN',14,12
-'Brand#12','SMALL ANODIZED BRASS',9,12
-'Brand#12','SMALL ANODIZED STEEL',14,12
-'Brand#12','SMALL BRUSHED BRASS',36,12
-'Brand#12','SMALL BRUSHED NICKEL',3,12
-'Brand#12','SMALL BRUSHED NICKEL',9,12
-'Brand#12','SMALL BURNISHED BRASS',14,12
-'Brand#12','SMALL BURNISHED BRASS',23,12
-'Brand#12','SMALL BURNISHED TIN',14,12
-'Brand#12','SMALL POLISHED NICKEL',23,12
-'Brand#12','STANDARD ANODIZED COPPER',45,12
-'Brand#12','STANDARD BRUSHED COPPER',3,12
-'Brand#12','STANDARD BRUSHED NICKEL',23,12
-'Brand#12','STANDARD BRUSHED STEEL',3,12
-'Brand#12','STANDARD BRUSHED TIN',45,12
-'Brand#12','STANDARD BURNISHED BRASS',14,12
-'Brand#12','STANDARD BURNISHED COPPER',3,12
-'Brand#12','STANDARD BURNISHED COPPER',45,12
-'Brand#12','STANDARD BURNISHED STEEL',9,12
-'Brand#12','STANDARD BURNISHED TIN',3,12
-'Brand#12','STANDARD PLATED COPPER',49,12
-'Brand#12','STANDARD PLATED NICKEL',19,12
-'Brand#12','STANDARD PLATED NICKEL',45,12
-'Brand#12','STANDARD PLATED STEEL',19,12
-'Brand#12','STANDARD PLATED STEEL',36,12
-'Brand#12','STANDARD POLISHED BRASS',45,12
-'Brand#13','ECONOMY ANODIZED BRASS',36,12
-'Brand#13','ECONOMY ANODIZED BRASS',45,12
-'Brand#13','ECONOMY ANODIZED COPPER',14,12
-'Brand#13','ECONOMY ANODIZED NICKEL',14,12
-'Brand#13','ECONOMY ANODIZED NICKEL',19,12
-'Brand#13','ECONOMY ANODIZED TIN',23,12
-'Brand#13','ECONOMY BRUSHED BRASS',45,12
-'Brand#13','ECONOMY BRUSHED NICKEL',45,12
-'Brand#13','ECONOMY BURNISHED BRASS',3,12
-'Brand#13','ECONOMY BURNISHED COPPER',19,12
-'Brand#13','ECONOMY BURNISHED NICKEL',36,12
-'Brand#13','ECONOMY PLATED COPPER',49,12
-'Brand#13','ECONOMY PLATED NICKEL',3,12
-'Brand#13','ECONOMY PLATED NICKEL',19,12
-'Brand#13','ECONOMY PLATED STEEL',23,12
-'Brand#13','ECONOMY POLISHED STEEL',19,12
-'Brand#13','ECONOMY POLISHED STEEL',36,12
-'Brand#13','LARGE ANODIZED BRASS',49,12
-'Brand#13','LARGE ANODIZED TIN',9,12
-'Brand#13','LARGE ANODIZED TIN',19,12
-'Brand#13','LARGE BRUSHED BRASS',3,12
-'Brand#13','LARGE BRUSHED COPPER',9,12
-'Brand#13','LARGE BRUSHED NICKEL',3,12
-'Brand#13','LARGE BURNISHED COPPER',45,12
-'Brand#13','LARGE PLATED COPPER',23,12
-'Brand#13','LARGE PLATED COPPER',36,12
-'Brand#13','LARGE PLATED NICKEL',23,12
-'Brand#13','LARGE PLATED NICKEL',49,12
-'Brand#13','LARGE PLATED STEEL',14,12
-'Brand#13','LARGE PLATED TIN',9,12
-'Brand#13','LARGE POLISHED BRASS',49,12
-'Brand#13','LARGE POLISHED STEEL',9,12
-'Brand#13','MEDIUM ANODIZED NICKEL',3,12
-'Brand#13','MEDIUM ANODIZED NICKEL',36,12
-'Brand#13','MEDIUM ANODIZED NICKEL',45,12
-'Brand#13','MEDIUM ANODIZED STEEL',9,12
-'Brand#13','MEDIUM ANODIZED STEEL',14,12
-'Brand#13','MEDIUM BRUSHED BRASS',9,12
-'Brand#13','MEDIUM BRUSHED COPPER',3,12
-'Brand#13','MEDIUM BRUSHED COPPER',14,12
-'Brand#13','MEDIUM BRUSHED STEEL',19,12
-'Brand#13','MEDIUM BRUSHED TIN',19,12
-'Brand#13','MEDIUM BURNISHED NICKEL',36,12
-'Brand#13','MEDIUM PLATED BRASS',9,12
-'Brand#13','PROMO ANODIZED COPPER',45,12
-'Brand#13','PROMO BRUSHED NICKEL',23,12
-'Brand#13','PROMO BRUSHED STEEL',45,12
-'Brand#13','PROMO BRUSHED TIN',3,12
-'Brand#13','PROMO BURNISHED BRASS',19,12
-'Brand#13','PROMO BURNISHED COPPER',19,12
-'Brand#13','PROMO BURNISHED NICKEL',3,12
-'Brand#13','PROMO BURNISHED NICKEL',49,12
-'Brand#13','PROMO PLATED COPPER',3,12
-'Brand#13','PROMO PLATED NICKEL',3,12
-'Brand#13','PROMO PLATED STEEL',45,12
-'Brand#13','PROMO POLISHED NICKEL',3,12
-'Brand#13','PROMO POLISHED STEEL',14,12
-'Brand#13','SMALL ANODIZED BRASS',49,12
-'Brand#13','SMALL ANODIZED COPPER',36,12
-'Brand#13','SMALL ANODIZED TIN',9,12
-'Brand#13','SMALL ANODIZED TIN',23,12
-'Brand#13','SMALL BRUSHED COPPER',14,12
-'Brand#13','SMALL BRUSHED COPPER',45,12
-'Brand#13','SMALL BURNISHED NICKEL',3,12
-'Brand#13','SMALL PLATED BRASS',45,12
-'Brand#13','SMALL PLATED NICKEL',45,12
-'Brand#13','SMALL PLATED TIN',14,12
-'Brand#13','SMALL POLISHED BRASS',49,12
-'Brand#13','SMALL POLISHED NICKEL',19,12
-'Brand#13','STANDARD BRUSHED BRASS',14,12
-'Brand#13','STANDARD BRUSHED COPPER',23,12
-'Brand#13','STANDARD BURNISHED COPPER',3,12
-'Brand#13','STANDARD BURNISHED COPPER',23,12
-'Brand#13','STANDARD BURNISHED COPPER',45,12
-'Brand#13','STANDARD BURNISHED STEEL',3,12
-'Brand#13','STANDARD BURNISHED STEEL',19,12
-'Brand#13','STANDARD BURNISHED TIN',23,12
-'Brand#13','STANDARD PLATED BRASS',14,12
-'Brand#13','STANDARD PLATED COPPER',45,12
-'Brand#13','STANDARD PLATED NICKEL',45,12
-'Brand#13','STANDARD PLATED STEEL',9,12
-'Brand#13','STANDARD POLISHED BRASS',19,12
-'Brand#13','STANDARD POLISHED NICKEL',19,12
-'Brand#14','ECONOMY ANODIZED COPPER',9,12
-'Brand#14','ECONOMY ANODIZED NICKEL',49,12
-'Brand#14','ECONOMY ANODIZED STEEL',45,12
-'Brand#14','ECONOMY BRUSHED BRASS',23,12
-'Brand#14','ECONOMY BRUSHED COPPER',19,12
-'Brand#14','ECONOMY BRUSHED COPPER',45,12
-'Brand#14','ECONOMY BRUSHED NICKEL',36,12
-'Brand#14','ECONOMY BRUSHED TIN',14,12
-'Brand#14','ECONOMY BURNISHED COPPER',9,12
-'Brand#14','ECONOMY BURNISHED COPPER',23,12
-'Brand#14','ECONOMY BURNISHED STEEL',9,12
-'Brand#14','ECONOMY BURNISHED STEEL',14,12
-'Brand#14','ECONOMY PLATED BRASS',9,12
-'Brand#14','ECONOMY POLISHED BRASS',19,12
-'Brand#14','ECONOMY POLISHED COPPER',23,12
-'Brand#14','ECONOMY POLISHED STEEL',45,12
-'Brand#14','LARGE ANODIZED COPPER',49,12
-'Brand#14','LARGE ANODIZED NICKEL',23,12
-'Brand#14','LARGE ANODIZED NICKEL',45,12
-'Brand#14','LARGE ANODIZED STEEL',9,12
-'Brand#14','LARGE BRUSHED COPPER',14,12
-'Brand#14','LARGE BRUSHED TIN',3,12
-'Brand#14','LARGE BRUSHED TIN',45,12
-'Brand#14','LARGE BURNISHED COPPER',49,12
-'Brand#14','LARGE PLATED BRASS',19,12
-'Brand#14','LARGE PLATED COPPER',3,12
-'Brand#14','LARGE PLATED NICKEL',36,12
-'Brand#14','MEDIUM ANODIZED STEEL',36,12
-'Brand#14','MEDIUM BRUSHED BRASS',9,12
-'Brand#14','MEDIUM BRUSHED TIN',19,12
-'Brand#14','MEDIUM BURNISHED BRASS',49,12
-'Brand#14','MEDIUM BURNISHED COPPER',14,12
-'Brand#14','MEDIUM BURNISHED NICKEL',36,12
-'Brand#14','MEDIUM BURNISHED STEEL',3,12
-'Brand#14','MEDIUM BURNISHED STEEL',19,12
-'Brand#14','MEDIUM PLATED COPPER',36,12
-'Brand#14','MEDIUM PLATED TIN',49,12
-'Brand#14','PROMO ANODIZED NICKEL',36,12
-'Brand#14','PROMO BRUSHED COPPER',14,12
-'Brand#14','PROMO BURNISHED NICKEL',14,12
-'Brand#14','PROMO PLATED COPPER',45,12
-'Brand#14','PROMO PLATED NICKEL',36,12
-'Brand#14','PROMO PLATED STEEL',9,12
-'Brand#14','PROMO PLATED TIN',19,12
-'Brand#14','PROMO PLATED TIN',45,12
-'Brand#14','PROMO PLATED TIN',49,12
-'Brand#14','PROMO POLISHED BRASS',9,12
-'Brand#14','PROMO POLISHED COPPER',14,12
-'Brand#14','PROMO POLISHED NICKEL',9,12
-'Brand#14','SMALL ANODIZED NICKEL',45,12
-'Brand#14','SMALL ANODIZED TIN',45,12
-'Brand#14','SMALL BRUSHED NICKEL',19,12
-'Brand#14','SMALL BRUSHED TIN',19,12
-'Brand#14','SMALL BURNISHED STEEL',9,12
-'Brand#14','SMALL BURNISHED STEEL',36,12
-'Brand#14','SMALL PLATED BRASS',23,12
-'Brand#14','SMALL PLATED COPPER',9,12
-'Brand#14','SMALL PLATED STEEL',23,12
-'Brand#14','SMALL POLISHED BRASS',3,12
-'Brand#14','SMALL POLISHED BRASS',9,12
-'Brand#14','SMALL POLISHED COPPER',36,12
-'Brand#14','SMALL POLISHED NICKEL',49,12
-'Brand#14','SMALL POLISHED STEEL',14,12
-'Brand#14','SMALL POLISHED TIN',49,12
-'Brand#14','STANDARD ANODIZED STEEL',49,12
-'Brand#14','STANDARD BRUSHED BRASS',3,12
-'Brand#14','STANDARD BRUSHED STEEL',49,12
-'Brand#14','STANDARD BURNISHED BRASS',23,12
-'Brand#14','STANDARD PLATED NICKEL',49,12
-'Brand#14','STANDARD POLISHED COPPER',36,12
-'Brand#14','STANDARD POLISHED COPPER',45,12
-'Brand#15','ECONOMY ANODIZED TIN',19,12
-'Brand#15','ECONOMY BRUSHED NICKEL',14,12
-'Brand#15','ECONOMY BURNISHED STEEL',19,12
-'Brand#15','ECONOMY PLATED NICKEL',9,12
-'Brand#15','ECONOMY PLATED STEEL',3,12
-'Brand#15','ECONOMY PLATED STEEL',19,12
-'Brand#15','ECONOMY PLATED TIN',9,12
-'Brand#15','ECONOMY POLISHED COPPER',36,12
-'Brand#15','ECONOMY POLISHED NICKEL',45,12
-'Brand#15','LARGE ANODIZED BRASS',19,12
-'Brand#15','LARGE ANODIZED STEEL',14,12
-'Brand#15','LARGE ANODIZED TIN',23,12
-'Brand#15','LARGE BRUSHED BRASS',19,12
-'Brand#15','LARGE BRUSHED BRASS',49,12
-'Brand#15','LARGE BURNISHED BRASS',3,12
-'Brand#15','LARGE BURNISHED BRASS',23,12
-'Brand#15','LARGE BURNISHED COPPER',9,12
-'Brand#15','LARGE BURNISHED COPPER',49,12
-'Brand#15','LARGE BURNISHED STEEL',9,12
-'Brand#15','LARGE PLATED BRASS',9,12
-'Brand#15','MEDIUM BRUSHED BRASS',14,12
-'Brand#15','MEDIUM BRUSHED NICKEL',14,12
-'Brand#15','MEDIUM BRUSHED NICKEL',19,12
-'Brand#15','MEDIUM BRUSHED STEEL',36,12
-'Brand#15','MEDIUM BRUSHED TIN',14,12
-'Brand#15','MEDIUM BURNISHED STEEL',3,12
-'Brand#15','MEDIUM PLATED TIN',9,12
-'Brand#15','MEDIUM PLATED TIN',45,12
-'Brand#15','PROMO BRUSHED BRASS',36,12
-'Brand#15','PROMO BRUSHED STEEL',9,12
-'Brand#15','PROMO BURNISHED NICKEL',9,12
-'Brand#15','PROMO PLATED COPPER',36,12
-'Brand#15','PROMO POLISHED BRASS',14,12
-'Brand#15','PROMO POLISHED COPPER',9,12
-'Brand#15','PROMO POLISHED NICKEL',36,12
-'Brand#15','PROMO POLISHED TIN',49,12
-'Brand#15','SMALL ANODIZED STEEL',45,12
-'Brand#15','SMALL BRUSHED BRASS',45,12
-'Brand#15','SMALL BRUSHED COPPER',14,12
-'Brand#15','SMALL BRUSHED COPPER',19,12
-'Brand#15','SMALL BRUSHED NICKEL',36,12
-'Brand#15','SMALL BURNISHED BRASS',3,12
-'Brand#15','SMALL PLATED COPPER',19,12
-'Brand#15','SMALL PLATED COPPER',23,12
-'Brand#15','SMALL PLATED NICKEL',19,12
-'Brand#15','SMALL POLISHED BRASS',45,12
-'Brand#15','SMALL POLISHED NICKEL',19,12
-'Brand#15','SMALL POLISHED NICKEL',23,12
-'Brand#15','SMALL POLISHED TIN',3,12
-'Brand#15','SMALL POLISHED TIN',49,12
-'Brand#15','STANDARD ANODIZED NICKEL',3,12
-'Brand#15','STANDARD ANODIZED STEEL',19,12
-'Brand#15','STANDARD ANODIZED TIN',36,12
-'Brand#15','STANDARD BRUSHED BRASS',49,12
-'Brand#15','STANDARD BRUSHED COPPER',49,12
-'Brand#15','STANDARD BRUSHED NICKEL',3,12
-'Brand#15','STANDARD BRUSHED STEEL',19,12
-'Brand#15','STANDARD BURNISHED BRASS',19,12
-'Brand#15','STANDARD BURNISHED COPPER',14,12
-'Brand#15','STANDARD BURNISHED COPPER',36,12
-'Brand#15','STANDARD BURNISHED TIN',49,12
-'Brand#15','STANDARD PLATED COPPER',14,12
-'Brand#15','STANDARD PLATED STEEL',3,12
-'Brand#15','STANDARD PLATED TIN',9,12
-'Brand#15','STANDARD PLATED TIN',45,12
-'Brand#15','STANDARD POLISHED TIN',14,12
-'Brand#21','ECONOMY ANODIZED STEEL',19,12
-'Brand#21','ECONOMY BRUSHED COPPER',14,12
-'Brand#21','ECONOMY BRUSHED NICKEL',23,12
-'Brand#21','ECONOMY BRUSHED STEEL',45,12
-'Brand#21','ECONOMY BRUSHED TIN',19,12
-'Brand#21','ECONOMY BURNISHED BRASS',19,12
-'Brand#21','ECONOMY BURNISHED COPPER',45,12
-'Brand#21','ECONOMY BURNISHED STEEL',9,12
-'Brand#21','ECONOMY BURNISHED STEEL',14,12
-'Brand#21','ECONOMY BURNISHED TIN',49,12
-'Brand#21','ECONOMY PLATED BRASS',49,12
-'Brand#21','ECONOMY PLATED COPPER',14,12
-'Brand#21','ECONOMY PLATED NICKEL',3,12
-'Brand#21','ECONOMY PLATED STEEL',9,12
-'Brand#21','ECONOMY PLATED TIN',19,12
-'Brand#21','ECONOMY PLATED TIN',23,12
-'Brand#21','ECONOMY POLISHED BRASS',9,12
-'Brand#21','ECONOMY POLISHED STEEL',14,12
-'Brand#21','LARGE ANODIZED COPPER',3,12
-'Brand#21','LARGE ANODIZED TIN',3,12
-'Brand#21','LARGE ANODIZED TIN',14,12
-'Brand#21','LARGE ANODIZED TIN',45,12
-'Brand#21','LARGE BRUSHED COPPER',23,12
-'Brand#21','LARGE BRUSHED NICKEL',36,12
-'Brand#21','LARGE BRUSHED STEEL',23,12
-'Brand#21','LARGE BRUSHED TIN',45,12
-'Brand#21','LARGE BRUSHED TIN',49,12
-'Brand#21','LARGE BURNISHED BRASS',14,12
-'Brand#21','LARGE BURNISHED NICKEL',14,12
-'Brand#21','LARGE BURNISHED STEEL',19,12
-'Brand#21','LARGE PLATED BRASS',14,12
-'Brand#21','LARGE PLATED COPPER',19,12
-'Brand#21','LARGE PLATED COPPER',49,12
-'Brand#21','LARGE POLISHED COPPER',14,12
-'Brand#21','LARGE POLISHED STEEL',45,12
-'Brand#21','MEDIUM ANODIZED NICKEL',3,12
-'Brand#21','MEDIUM ANODIZED STEEL',14,12
-'Brand#21','MEDIUM BRUSHED BRASS',23,12
-'Brand#21','MEDIUM BURNISHED COPPER',49,12
-'Brand#21','MEDIUM BURNISHED NICKEL',9,12
-'Brand#21','MEDIUM BURNISHED TIN',9,12
-'Brand#21','MEDIUM PLATED BRASS',36,12
-'Brand#21','MEDIUM PLATED NICKEL',36,12
-'Brand#21','MEDIUM PLATED STEEL',36,12
-'Brand#21','MEDIUM PLATED TIN',9,12
-'Brand#21','PROMO ANODIZED BRASS',9,12
-'Brand#21','PROMO ANODIZED COPPER',9,12
-'Brand#21','PROMO ANODIZED NICKEL',19,12
-'Brand#21','PROMO ANODIZED STEEL',36,12
-'Brand#21','PROMO ANODIZED TIN',45,12
-'Brand#21','PROMO BRUSHED NICKEL',9,12
-'Brand#21','PROMO BRUSHED STEEL',14,12
-'Brand#21','PROMO BRUSHED STEEL',19,12
-'Brand#21','PROMO BRUSHED STEEL',45,12
-'Brand#21','PROMO BRUSHED TIN',14,12
-'Brand#21','PROMO BURNISHED COPPER',3,12
-'Brand#21','PROMO BURNISHED STEEL',14,12
-'Brand#21','PROMO PLATED BRASS',36,12
-'Brand#21','PROMO PLATED COPPER',49,12
-'Brand#21','PROMO PLATED TIN',45,12
-'Brand#21','PROMO POLISHED COPPER',9,12
-'Brand#21','PROMO POLISHED COPPER',19,12
-'Brand#21','PROMO POLISHED NICKEL',23,12
-'Brand#21','PROMO POLISHED STEEL',3,12
-'Brand#21','PROMO POLISHED STEEL',9,12
-'Brand#21','PROMO POLISHED TIN',9,12
-'Brand#21','PROMO POLISHED TIN',14,12
-'Brand#21','PROMO POLISHED TIN',19,12
-'Brand#21','SMALL BRUSHED NICKEL',9,12
-'Brand#21','SMALL BRUSHED NICKEL',45,12
-'Brand#21','SMALL BRUSHED STEEL',3,12
-'Brand#21','SMALL BRUSHED STEEL',9,12
-'Brand#21','SMALL BRUSHED TIN',14,12
-'Brand#21','SMALL PLATED BRASS',36,12
-'Brand#21','SMALL PLATED COPPER',14,12
-'Brand#21','SMALL PLATED COPPER',23,12
-'Brand#21','SMALL POLISHED NICKEL',9,12
-'Brand#21','SMALL POLISHED STEEL',3,12
-'Brand#21','STANDARD ANODIZED NICKEL',3,12
-'Brand#21','STANDARD ANODIZED NICKEL',19,12
-'Brand#21','STANDARD BRUSHED BRASS',9,12
-'Brand#21','STANDARD BRUSHED NICKEL',23,12
-'Brand#21','STANDARD BRUSHED NICKEL',45,12
-'Brand#21','STANDARD BURNISHED BRASS',49,12
-'Brand#21','STANDARD PLATED COPPER',45,12
-'Brand#21','STANDARD PLATED NICKEL',49,12
-'Brand#21','STANDARD PLATED STEEL',36,12
-'Brand#21','STANDARD PLATED TIN',9,12
-'Brand#21','STANDARD POLISHED COPPER',49,12
-'Brand#22','ECONOMY ANODIZED COPPER',36,12
-'Brand#22','ECONOMY ANODIZED COPPER',45,12
-'Brand#22','ECONOMY ANODIZED NICKEL',45,12
-'Brand#22','ECONOMY ANODIZED STEEL',45,12
-'Brand#22','ECONOMY ANODIZED TIN',49,12
-'Brand#22','ECONOMY BRUSHED STEEL',45,12
-'Brand#22','ECONOMY BRUSHED TIN',49,12
-'Brand#22','ECONOMY BURNISHED BRASS',19,12
-'Brand#22','ECONOMY BURNISHED BRASS',23,12
-'Brand#22','ECONOMY BURNISHED BRASS',45,12
-'Brand#22','ECONOMY BURNISHED COPPER',3,12
-'Brand#22','ECONOMY BURNISHED COPPER',9,12
-'Brand#22','ECONOMY BURNISHED COPPER',49,12
-'Brand#22','ECONOMY BURNISHED NICKEL',14,12
-'Brand#22','ECONOMY BURNISHED NICKEL',23,12
-'Brand#22','ECONOMY BURNISHED STEEL',23,12
-'Brand#22','ECONOMY BURNISHED STEEL',45,12
-'Brand#22','ECONOMY BURNISHED STEEL',49,12
-'Brand#22','ECONOMY BURNISHED TIN',9,12
-'Brand#22','ECONOMY BURNISHED TIN',19,12
-'Brand#22','ECONOMY PLATED BRASS',36,12
-'Brand#22','ECONOMY PLATED COPPER',3,12
-'Brand#22','ECONOMY PLATED STEEL',23,12
-'Brand#22','ECONOMY POLISHED COPPER',14,12
-'Brand#22','ECONOMY POLISHED TIN',49,12
-'Brand#22','LARGE ANODIZED NICKEL',14,12
-'Brand#22','LARGE ANODIZED TIN',14,12
-'Brand#22','LARGE BRUSHED BRASS',9,12
-'Brand#22','LARGE BRUSHED BRASS',49,12
-'Brand#22','LARGE BRUSHED COPPER',14,12
-'Brand#22','LARGE BRUSHED STEEL',19,12
-'Brand#22','LARGE BRUSHED TIN',23,12
-'Brand#22','LARGE BURNISHED BRASS',14,12
-'Brand#22','LARGE BURNISHED TIN',36,12
-'Brand#22','LARGE PLATED STEEL',9,12
-'Brand#22','LARGE PLATED TIN',49,12
-'Brand#22','LARGE POLISHED COPPER',23,12
-'Brand#22','LARGE POLISHED NICKEL',19,12
-'Brand#22','LARGE POLISHED NICKEL',23,12
-'Brand#22','LARGE POLISHED STEEL',3,12
-'Brand#22','MEDIUM ANODIZED COPPER',19,12
-'Brand#22','MEDIUM ANODIZED NICKEL',45,12
-'Brand#22','MEDIUM BRUSHED NICKEL',9,12
-'Brand#22','MEDIUM BRUSHED STEEL',3,12
-'Brand#22','MEDIUM PLATED BRASS',36,12
-'Brand#22','MEDIUM PLATED NICKEL',14,12
-'Brand#22','PROMO ANODIZED COPPER',45,12
-'Brand#22','PROMO ANODIZED STEEL',36,12
-'Brand#22','PROMO BURNISHED BRASS',3,12
-'Brand#22','PROMO BURNISHED BRASS',23,12
-'Brand#22','PROMO BURNISHED STEEL',3,12
-'Brand#22','PROMO PLATED BRASS',14,12
-'Brand#22','PROMO POLISHED BRASS',14,12
-'Brand#22','PROMO POLISHED COPPER',3,12
-'Brand#22','PROMO POLISHED COPPER',23,12
-'Brand#22','PROMO POLISHED NICKEL',19,12
-'Brand#22','PROMO POLISHED NICKEL',36,12
-'Brand#22','PROMO POLISHED STEEL',36,12
-'Brand#22','SMALL ANODIZED COPPER',9,12
-'Brand#22','SMALL ANODIZED STEEL',19,12
-'Brand#22','SMALL ANODIZED TIN',19,12
-'Brand#22','SMALL ANODIZED TIN',49,12
-'Brand#22','SMALL BRUSHED COPPER',36,12
-'Brand#22','SMALL BRUSHED TIN',45,12
-'Brand#22','SMALL BURNISHED COPPER',49,12
-'Brand#22','SMALL BURNISHED NICKEL',9,12
-'Brand#22','SMALL PLATED BRASS',9,12
-'Brand#22','SMALL PLATED COPPER',3,12
-'Brand#22','SMALL POLISHED NICKEL',9,12
-'Brand#22','SMALL POLISHED NICKEL',49,12
-'Brand#22','SMALL POLISHED STEEL',49,12
-'Brand#22','STANDARD ANODIZED BRASS',23,12
-'Brand#22','STANDARD ANODIZED STEEL',49,12
-'Brand#22','STANDARD BRUSHED BRASS',36,12
-'Brand#22','STANDARD BRUSHED TIN',19,12
-'Brand#22','STANDARD BRUSHED TIN',49,12
-'Brand#22','STANDARD BURNISHED TIN',14,12
-'Brand#22','STANDARD PLATED BRASS',45,12
-'Brand#22','STANDARD PLATED COPPER',36,12
-'Brand#22','STANDARD PLATED NICKEL',9,12
-'Brand#22','STANDARD PLATED STEEL',36,12
-'Brand#22','STANDARD PLATED STEEL',49,12
-'Brand#22','STANDARD PLATED TIN',3,12
-'Brand#22','STANDARD PLATED TIN',36,12
-'Brand#22','STANDARD PLATED TIN',49,12
-'Brand#22','STANDARD POLISHED BRASS',19,12
-'Brand#22','STANDARD POLISHED COPPER',9,12
-'Brand#22','STANDARD POLISHED NICKEL',19,12
-'Brand#22','STANDARD POLISHED STEEL',9,12
-'Brand#22','STANDARD POLISHED TIN',45,12
-'Brand#23','ECONOMY ANODIZED BRASS',36,12
-'Brand#23','ECONOMY ANODIZED NICKEL',9,12
-'Brand#23','ECONOMY ANODIZED STEEL',49,12
-'Brand#23','ECONOMY BRUSHED COPPER',3,12
-'Brand#23','ECONOMY BRUSHED COPPER',49,12
-'Brand#23','ECONOMY BRUSHED NICKEL',23,12
-'Brand#23','ECONOMY BURNISHED STEEL',49,12
-'Brand#23','ECONOMY BURNISHED TIN',3,12
-'Brand#23','ECONOMY PLATED STEEL',14,12
-'Brand#23','ECONOMY PLATED TIN',49,12
-'Brand#23','ECONOMY POLISHED COPPER',23,12
-'Brand#23','ECONOMY POLISHED NICKEL',36,12
-'Brand#23','ECONOMY POLISHED TIN',3,12
-'Brand#23','LARGE ANODIZED TIN',14,12
-'Brand#23','LARGE BURNISHED STEEL',23,12
-'Brand#23','LARGE BURNISHED TIN',19,12
-'Brand#23','LARGE PLATED COPPER',14,12
-'Brand#23','LARGE PLATED STEEL',9,12
-'Brand#23','LARGE POLISHED BRASS',19,12
-'Brand#23','LARGE POLISHED COPPER',45,12
-'Brand#23','LARGE POLISHED COPPER',49,12
-'Brand#23','LARGE POLISHED TIN',3,12
-'Brand#23','MEDIUM BRUSHED BRASS',9,12
-'Brand#23','MEDIUM BRUSHED COPPER',3,12
-'Brand#23','MEDIUM BRUSHED NICKEL',23,12
-'Brand#23','MEDIUM BRUSHED NICKEL',36,12
-'Brand#23','MEDIUM BURNISHED COPPER',9,12
-'Brand#23','MEDIUM BURNISHED COPPER',19,12
-'Brand#23','MEDIUM PLATED COPPER',19,12
-'Brand#23','MEDIUM PLATED STEEL',14,12
-'Brand#23','PROMO ANODIZED BRASS',9,12
-'Brand#23','PROMO ANODIZED BRASS',19,12
-'Brand#23','PROMO ANODIZED NICKEL',3,12
-'Brand#23','PROMO ANODIZED STEEL',36,12
-'Brand#23','PROMO BRUSHED COPPER',36,12
-'Brand#23','PROMO BURNISHED BRASS',9,12
-'Brand#23','PROMO BURNISHED STEEL',9,12
-'Brand#23','PROMO BURNISHED TIN',3,12
-'Brand#23','PROMO BURNISHED TIN',45,12
-'Brand#23','PROMO PLATED BRASS',19,12
-'Brand#23','PROMO PLATED BRASS',23,12
-'Brand#23','PROMO PLATED BRASS',49,12
-'Brand#23','PROMO PLATED NICKEL',3,12
-'Brand#23','PROMO PLATED TIN',14,12
-'Brand#23','PROMO POLISHED TIN',45,12
-'Brand#23','SMALL ANODIZED STEEL',3,12
-'Brand#23','SMALL ANODIZED TIN',45,12
-'Brand#23','SMALL BRUSHED BRASS',19,12
-'Brand#23','SMALL BRUSHED STEEL',3,12
-'Brand#23','SMALL BURNISHED BRASS',14,12
-'Brand#23','SMALL BURNISHED COPPER',36,12
-'Brand#23','SMALL BURNISHED STEEL',45,12
-'Brand#23','SMALL PLATED BRASS',49,12
-'Brand#23','SMALL PLATED STEEL',23,12
-'Brand#23','SMALL PLATED TIN',14,12
-'Brand#23','SMALL POLISHED COPPER',49,12
-'Brand#23','SMALL POLISHED TIN',23,12
-'Brand#23','STANDARD ANODIZED BRASS',23,12
-'Brand#23','STANDARD ANODIZED TIN',3,12
-'Brand#23','STANDARD ANODIZED TIN',45,12
-'Brand#23','STANDARD BRUSHED BRASS',3,12
-'Brand#23','STANDARD BRUSHED STEEL',9,12
-'Brand#23','STANDARD BRUSHED TIN',19,12
-'Brand#23','STANDARD PLATED BRASS',3,12
-'Brand#23','STANDARD PLATED NICKEL',49,12
-'Brand#23','STANDARD PLATED TIN',9,12
-'Brand#23','STANDARD PLATED TIN',19,12
-'Brand#23','STANDARD POLISHED STEEL',23,12
-'Brand#23','STANDARD POLISHED TIN',23,12
-'Brand#24','ECONOMY ANODIZED BRASS',19,12
-'Brand#24','ECONOMY ANODIZED COPPER',36,12
-'Brand#24','ECONOMY ANODIZED COPPER',49,12
-'Brand#24','ECONOMY ANODIZED NICKEL',3,12
-'Brand#24','ECONOMY ANODIZED STEEL',23,12
-'Brand#24','ECONOMY ANODIZED STEEL',45,12
-'Brand#24','ECONOMY BRUSHED STEEL',9,12
-'Brand#24','ECONOMY BRUSHED TIN',49,12
-'Brand#24','ECONOMY BURNISHED BRASS',14,12
-'Brand#24','ECONOMY BURNISHED COPPER',3,12
-'Brand#24','ECONOMY BURNISHED COPPER',19,12
-'Brand#24','ECONOMY BURNISHED STEEL',45,12
-'Brand#24','ECONOMY PLATED COPPER',49,12
-'Brand#24','ECONOMY PLATED STEEL',45,12
-'Brand#24','ECONOMY POLISHED BRASS',23,12
-'Brand#24','ECONOMY POLISHED STEEL',14,12
-'Brand#24','ECONOMY POLISHED TIN',14,12
-'Brand#24','ECONOMY POLISHED TIN',45,12
-'Brand#24','ECONOMY POLISHED TIN',49,12
-'Brand#24','LARGE ANODIZED BRASS',3,12
-'Brand#24','LARGE ANODIZED BRASS',45,12
-'Brand#24','LARGE BRUSHED BRASS',14,12
-'Brand#24','LARGE BRUSHED BRASS',45,12
-'Brand#24','LARGE BRUSHED STEEL',23,12
-'Brand#24','LARGE BRUSHED STEEL',45,12
-'Brand#24','LARGE BURNISHED STEEL',3,12
-'Brand#24','LARGE BURNISHED TIN',23,12
-'Brand#24','LARGE PLATED COPPER',23,12
-'Brand#24','LARGE PLATED STEEL',3,12
-'Brand#24','LARGE POLISHED COPPER',9,12
-'Brand#24','LARGE POLISHED TIN',14,12
-'Brand#24','MEDIUM ANODIZED BRASS',14,12
-'Brand#24','MEDIUM BRUSHED NICKEL',9,12
-'Brand#24','MEDIUM BRUSHED NICKEL',36,12
-'Brand#24','MEDIUM BRUSHED STEEL',23,12
-'Brand#24','MEDIUM BRUSHED STEEL',49,12
-'Brand#24','MEDIUM BURNISHED BRASS',36,12
-'Brand#24','MEDIUM BURNISHED STEEL',49,12
-'Brand#24','MEDIUM BURNISHED TIN',23,12
-'Brand#24','MEDIUM PLATED BRASS',3,12
-'Brand#24','MEDIUM PLATED NICKEL',36,12
-'Brand#24','PROMO ANODIZED NICKEL',19,12
-'Brand#24','PROMO ANODIZED NICKEL',45,12
-'Brand#24','PROMO ANODIZED TIN',14,12
-'Brand#24','PROMO BRUSHED COPPER',23,12
-'Brand#24','PROMO BRUSHED COPPER',49,12
-'Brand#24','PROMO BRUSHED NICKEL',3,12
-'Brand#24','PROMO BURNISHED BRASS',36,12
-'Brand#24','PROMO BURNISHED STEEL',14,12
-'Brand#24','PROMO BURNISHED TIN',14,12
-'Brand#24','PROMO PLATED STEEL',3,12
-'Brand#24','PROMO POLISHED BRASS',3,12
-'Brand#24','PROMO POLISHED BRASS',14,12
-'Brand#24','PROMO POLISHED COPPER',45,12
-'Brand#24','SMALL ANODIZED COPPER',3,12
-'Brand#24','SMALL ANODIZED NICKEL',23,12
-'Brand#24','SMALL BRUSHED BRASS',45,12
-'Brand#24','SMALL BRUSHED COPPER',9,12
-'Brand#24','SMALL BRUSHED NICKEL',49,12
-'Brand#24','SMALL BURNISHED BRASS',3,12
-'Brand#24','SMALL BURNISHED BRASS',14,12
-'Brand#24','SMALL BURNISHED COPPER',19,12
-'Brand#24','SMALL BURNISHED NICKEL',9,12
-'Brand#24','SMALL PLATED BRASS',3,12
-'Brand#24','SMALL PLATED BRASS',14,12
-'Brand#24','SMALL PLATED NICKEL',14,12
-'Brand#24','SMALL POLISHED BRASS',3,12
-'Brand#24','SMALL POLISHED NICKEL',19,12
-'Brand#24','SMALL POLISHED TIN',9,12
-'Brand#24','STANDARD ANODIZED TIN',49,12
-'Brand#24','STANDARD BRUSHED BRASS',14,12
-'Brand#24','STANDARD BRUSHED BRASS',23,12
-'Brand#24','STANDARD BRUSHED NICKEL',19,12
-'Brand#24','STANDARD BRUSHED STEEL',23,12
-'Brand#24','STANDARD PLATED BRASS',36,12
-'Brand#24','STANDARD PLATED COPPER',49,12
-'Brand#24','STANDARD PLATED NICKEL',36,12
-'Brand#24','STANDARD POLISHED BRASS',9,12
-'Brand#24','STANDARD POLISHED COPPER',9,12
-'Brand#25','ECONOMY ANODIZED STEEL',14,12
-'Brand#25','ECONOMY ANODIZED STEEL',45,12
-'Brand#25','ECONOMY BRUSHED NICKEL',9,12
-'Brand#25','ECONOMY BRUSHED STEEL',3,12
-'Brand#25','ECONOMY BRUSHED TIN',14,12
-'Brand#25','ECONOMY PLATED COPPER',3,12
-'Brand#25','ECONOMY PLATED NICKEL',19,12
-'Brand#25','ECONOMY PLATED STEEL',9,12
-'Brand#25','ECONOMY POLISHED BRASS',3,12
-'Brand#25','ECONOMY POLISHED BRASS',9,12
-'Brand#25','ECONOMY POLISHED NICKEL',3,12
-'Brand#25','LARGE ANODIZED BRASS',14,12
-'Brand#25','LARGE ANODIZED BRASS',23,12
-'Brand#25','LARGE ANODIZED COPPER',19,12
-'Brand#25','LARGE ANODIZED COPPER',36,12
-'Brand#25','LARGE BRUSHED BRASS',19,12
-'Brand#25','LARGE BRUSHED NICKEL',49,12
-'Brand#25','LARGE BRUSHED STEEL',36,12
-'Brand#25','LARGE BRUSHED TIN',3,12
-'Brand#25','LARGE BRUSHED TIN',9,12
-'Brand#25','LARGE BURNISHED BRASS',23,12
-'Brand#25','LARGE BURNISHED STEEL',36,12
-'Brand#25','LARGE BURNISHED TIN',14,12
-'Brand#25','LARGE BURNISHED TIN',36,12
-'Brand#25','LARGE PLATED NICKEL',45,12
-'Brand#25','LARGE PLATED TIN',23,12
-'Brand#25','MEDIUM ANODIZED BRASS',3,12
-'Brand#25','MEDIUM ANODIZED BRASS',9,12
-'Brand#25','MEDIUM ANODIZED BRASS',14,12
-'Brand#25','MEDIUM ANODIZED BRASS',19,12
-'Brand#25','MEDIUM ANODIZED STEEL',36,12
-'Brand#25','MEDIUM ANODIZED TIN',3,12
-'Brand#25','MEDIUM BRUSHED BRASS',14,12
-'Brand#25','MEDIUM BRUSHED BRASS',49,12
-'Brand#25','MEDIUM BRUSHED TIN',9,12
-'Brand#25','MEDIUM BRUSHED TIN',49,12
-'Brand#25','MEDIUM BURNISHED STEEL',36,12
-'Brand#25','MEDIUM PLATED COPPER',14,12
-'Brand#25','MEDIUM PLATED COPPER',23,12
-'Brand#25','MEDIUM PLATED STEEL',36,12
-'Brand#25','MEDIUM PLATED TIN',14,12
-'Brand#25','PROMO ANODIZED COPPER',3,12
-'Brand#25','PROMO ANODIZED NICKEL',23,12
-'Brand#25','PROMO ANODIZED TIN',36,12
-'Brand#25','PROMO BURNISHED COPPER',19,12
-'Brand#25','PROMO BURNISHED COPPER',36,12
-'Brand#25','PROMO BURNISHED COPPER',45,12
-'Brand#25','PROMO BURNISHED STEEL',9,12
-'Brand#25','PROMO PLATED BRASS',9,12
-'Brand#25','PROMO POLISHED BRASS',3,12
-'Brand#25','PROMO POLISHED BRASS',49,12
-'Brand#25','PROMO POLISHED NICKEL',36,12
-'Brand#25','PROMO POLISHED STEEL',45,12
-'Brand#25','SMALL ANODIZED COPPER',45,12
-'Brand#25','SMALL ANODIZED TIN',14,12
-'Brand#25','SMALL BRUSHED COPPER',14,12
-'Brand#25','SMALL BURNISHED BRASS',3,12
-'Brand#25','SMALL BURNISHED NICKEL',45,12
-'Brand#25','SMALL BURNISHED STEEL',14,12
-'Brand#25','SMALL PLATED BRASS',19,12
-'Brand#25','SMALL PLATED BRASS',49,12
-'Brand#25','SMALL PLATED COPPER',23,12
-'Brand#25','SMALL PLATED TIN',3,12
-'Brand#25','SMALL POLISHED COPPER',9,12
-'Brand#25','STANDARD BRUSHED TIN',45,12
-'Brand#25','STANDARD BURNISHED BRASS',3,12
-'Brand#25','STANDARD BURNISHED BRASS',14,12
-'Brand#25','STANDARD BURNISHED NICKEL',36,12
-'Brand#25','STANDARD PLATED COPPER',9,12
-'Brand#25','STANDARD PLATED COPPER',23,12
-'Brand#25','STANDARD PLATED NICKEL',36,12
-'Brand#25','STANDARD PLATED NICKEL',49,12
-'Brand#25','STANDARD PLATED TIN',36,12
-'Brand#25','STANDARD POLISHED COPPER',23,12
-'Brand#25','STANDARD POLISHED NICKEL',45,12
-'Brand#25','STANDARD POLISHED TIN',3,12
-'Brand#31','ECONOMY ANODIZED BRASS',19,12
-'Brand#31','ECONOMY ANODIZED TIN',36,12
-'Brand#31','ECONOMY BRUSHED NICKEL',14,12
-'Brand#31','ECONOMY BURNISHED COPPER',14,12
-'Brand#31','ECONOMY BURNISHED NICKEL',19,12
-'Brand#31','ECONOMY PLATED NICKEL',9,12
-'Brand#31','ECONOMY POLISHED COPPER',3,12
-'Brand#31','ECONOMY POLISHED TIN',36,12
-'Brand#31','LARGE ANODIZED COPPER',3,12
-'Brand#31','LARGE ANODIZED COPPER',14,12
-'Brand#31','LARGE ANODIZED STEEL',36,12
-'Brand#31','LARGE ANODIZED TIN',3,12
-'Brand#31','LARGE BRUSHED BRASS',36,12
-'Brand#31','LARGE BRUSHED NICKEL',19,12
-'Brand#31','LARGE BRUSHED STEEL',36,12
-'Brand#31','LARGE BRUSHED TIN',14,12
-'Brand#31','LARGE BURNISHED BRASS',36,12
-'Brand#31','LARGE BURNISHED NICKEL',14,12
-'Brand#31','LARGE PLATED STEEL',23,12
-'Brand#31','LARGE POLISHED BRASS',9,12
-'Brand#31','LARGE POLISHED STEEL',45,12
-'Brand#31','MEDIUM ANODIZED STEEL',14,12
-'Brand#31','MEDIUM ANODIZED TIN',9,12
-'Brand#31','MEDIUM ANODIZED TIN',23,12
-'Brand#31','MEDIUM BRUSHED BRASS',23,12
-'Brand#31','MEDIUM BRUSHED STEEL',3,12
-'Brand#31','MEDIUM BURNISHED BRASS',14,12
-'Brand#31','MEDIUM BURNISHED STEEL',9,12
-'Brand#31','PROMO ANODIZED COPPER',14,12
-'Brand#31','PROMO ANODIZED TIN',36,12
-'Brand#31','PROMO BRUSHED BRASS',3,12
-'Brand#31','PROMO BRUSHED COPPER',23,12
-'Brand#31','PROMO BRUSHED STEEL',23,12
-'Brand#31','PROMO BURNISHED BRASS',49,12
-'Brand#31','PROMO BURNISHED STEEL',3,12
-'Brand#31','PROMO PLATED BRASS',36,12
-'Brand#31','PROMO POLISHED NICKEL',49,12
-'Brand#31','SMALL ANODIZED COPPER',3,12
-'Brand#31','SMALL ANODIZED NICKEL',9,12
-'Brand#31','SMALL ANODIZED TIN',3,12
-'Brand#31','SMALL BRUSHED COPPER',14,12
-'Brand#31','SMALL BRUSHED COPPER',19,12
-'Brand#31','SMALL BRUSHED NICKEL',3,12
-'Brand#31','SMALL BRUSHED NICKEL',23,12
-'Brand#31','SMALL BRUSHED NICKEL',36,12
-'Brand#31','SMALL BURNISHED BRASS',3,12
-'Brand#31','SMALL BURNISHED NICKEL',9,12
-'Brand#31','SMALL BURNISHED TIN',23,12
-'Brand#31','SMALL PLATED STEEL',19,12
-'Brand#31','SMALL PLATED STEEL',23,12
-'Brand#31','SMALL POLISHED STEEL',3,12
-'Brand#31','STANDARD ANODIZED BRASS',45,12
-'Brand#31','STANDARD ANODIZED NICKEL',3,12
-'Brand#31','STANDARD BRUSHED COPPER',3,12
-'Brand#31','STANDARD BURNISHED STEEL',45,12
-'Brand#31','STANDARD PLATED BRASS',3,12
-'Brand#31','STANDARD PLATED BRASS',19,12
-'Brand#31','STANDARD PLATED STEEL',19,12
-'Brand#31','STANDARD POLISHED BRASS',23,12
-'Brand#31','STANDARD POLISHED COPPER',45,12
-'Brand#32','ECONOMY ANODIZED BRASS',14,12
-'Brand#32','ECONOMY ANODIZED STEEL',23,12
-'Brand#32','ECONOMY ANODIZED STEEL',49,12
-'Brand#32','ECONOMY ANODIZED TIN',23,12
-'Brand#32','ECONOMY BRUSHED NICKEL',3,12
-'Brand#32','ECONOMY BRUSHED STEEL',36,12
-'Brand#32','ECONOMY BRUSHED TIN',19,12
-'Brand#32','ECONOMY BURNISHED TIN',19,12
-'Brand#32','ECONOMY PLATED BRASS',19,12
-'Brand#32','ECONOMY PLATED NICKEL',23,12
-'Brand#32','ECONOMY PLATED TIN',45,12
-'Brand#32','LARGE ANODIZED NICKEL',3,12
-'Brand#32','LARGE ANODIZED STEEL',14,12
-'Brand#32','LARGE BRUSHED BRASS',45,12
-'Brand#32','LARGE BRUSHED NICKEL',3,12
-'Brand#32','LARGE BRUSHED STEEL',45,12
-'Brand#32','LARGE BRUSHED TIN',19,12
-'Brand#32','LARGE PLATED BRASS',3,12
-'Brand#32','LARGE PLATED BRASS',9,12
-'Brand#32','LARGE POLISHED COPPER',19,12
-'Brand#32','LARGE POLISHED NICKEL',3,12
-'Brand#32','MEDIUM ANODIZED COPPER',45,12
-'Brand#32','MEDIUM ANODIZED STEEL',19,12
-'Brand#32','MEDIUM ANODIZED STEEL',49,12
-'Brand#32','MEDIUM ANODIZED TIN',45,12
-'Brand#32','MEDIUM ANODIZED TIN',49,12
-'Brand#32','MEDIUM BURNISHED BRASS',23,12
-'Brand#32','MEDIUM BURNISHED NICKEL',23,12
-'Brand#32','MEDIUM PLATED BRASS',49,12
-'Brand#32','MEDIUM PLATED TIN',3,12
-'Brand#32','PROMO ANODIZED NICKEL',49,12
-'Brand#32','PROMO BRUSHED COPPER',45,12
-'Brand#32','PROMO BRUSHED STEEL',23,12
-'Brand#32','PROMO BRUSHED STEEL',49,12
-'Brand#32','PROMO BRUSHED TIN',14,12
-'Brand#32','PROMO BRUSHED TIN',36,12
-'Brand#32','PROMO BURNISHED NICKEL',45,12
-'Brand#32','PROMO BURNISHED TIN',49,12
-'Brand#32','PROMO PLATED COPPER',49,12
-'Brand#32','PROMO PLATED STEEL',49,12
-'Brand#32','PROMO POLISHED STEEL',49,12
-'Brand#32','PROMO POLISHED TIN',19,12
-'Brand#32','PROMO POLISHED TIN',23,12
-'Brand#32','PROMO POLISHED TIN',45,12
-'Brand#32','SMALL ANODIZED NICKEL',9,12
-'Brand#32','SMALL BRUSHED TIN',3,12
-'Brand#32','SMALL BRUSHED TIN',9,12
-'Brand#32','SMALL BURNISHED TIN',23,12
-'Brand#32','SMALL BURNISHED TIN',36,12
-'Brand#32','SMALL PLATED BRASS',36,12
-'Brand#32','SMALL PLATED COPPER',14,12
-'Brand#32','SMALL PLATED COPPER',45,12
-'Brand#32','SMALL PLATED STEEL',36,12
-'Brand#32','SMALL PLATED TIN',14,12
-'Brand#32','SMALL POLISHED NICKEL',45,12
-'Brand#32','SMALL POLISHED STEEL',23,12
-'Brand#32','SMALL POLISHED STEEL',36,12
-'Brand#32','STANDARD ANODIZED NICKEL',9,12
-'Brand#32','STANDARD ANODIZED STEEL',3,12
-'Brand#32','STANDARD ANODIZED TIN',14,12
-'Brand#32','STANDARD ANODIZED TIN',19,12
-'Brand#32','STANDARD BRUSHED BRASS',14,12
-'Brand#32','STANDARD BRUSHED STEEL',14,12
-'Brand#32','STANDARD BRUSHED TIN',9,12
-'Brand#32','STANDARD BURNISHED BRASS',45,12
-'Brand#32','STANDARD BURNISHED COPPER',3,12
-'Brand#32','STANDARD BURNISHED NICKEL',3,12
-'Brand#32','STANDARD PLATED STEEL',9,12
-'Brand#32','STANDARD PLATED STEEL',49,12
-'Brand#32','STANDARD POLISHED COPPER',36,12
-'Brand#33','ECONOMY ANODIZED NICKEL',36,12
-'Brand#33','ECONOMY ANODIZED STEEL',23,12
-'Brand#33','ECONOMY ANODIZED STEEL',45,12
-'Brand#33','ECONOMY BURNISHED NICKEL',14,12
-'Brand#33','ECONOMY BURNISHED TIN',45,12
-'Brand#33','ECONOMY PLATED STEEL',3,12
-'Brand#33','ECONOMY PLATED TIN',3,12
-'Brand#33','ECONOMY PLATED TIN',9,12
-'Brand#33','ECONOMY POLISHED BRASS',3,12
-'Brand#33','ECONOMY POLISHED BRASS',14,12
-'Brand#33','LARGE ANODIZED BRASS',3,12
-'Brand#33','LARGE ANODIZED BRASS',36,12
-'Brand#33','LARGE ANODIZED NICKEL',23,12
-'Brand#33','LARGE ANODIZED STEEL',3,12
-'Brand#33','LARGE ANODIZED TIN',36,12
-'Brand#33','LARGE BRUSHED BRASS',23,12
-'Brand#33','LARGE BRUSHED STEEL',3,12
-'Brand#33','LARGE BRUSHED TIN',36,12
-'Brand#33','LARGE BURNISHED BRASS',19,12
-'Brand#33','LARGE BURNISHED BRASS',49,12
-'Brand#33','LARGE PLATED NICKEL',9,12
-'Brand#33','LARGE PLATED NICKEL',19,12
-'Brand#33','LARGE POLISHED BRASS',9,12
-'Brand#33','LARGE POLISHED NICKEL',45,12
-'Brand#33','MEDIUM ANODIZED NICKEL',19,12
-'Brand#33','MEDIUM ANODIZED TIN',49,12
-'Brand#33','MEDIUM BRUSHED BRASS',45,12
-'Brand#33','MEDIUM BRUSHED NICKEL',14,12
-'Brand#33','MEDIUM BRUSHED STEEL',14,12
-'Brand#33','MEDIUM BRUSHED STEEL',36,12
-'Brand#33','MEDIUM BURNISHED BRASS',49,12
-'Brand#33','MEDIUM BURNISHED TIN',3,12
-'Brand#33','MEDIUM BURNISHED TIN',49,12
-'Brand#33','MEDIUM PLATED STEEL',3,12
-'Brand#33','MEDIUM PLATED TIN',23,12
-'Brand#33','PROMO ANODIZED STEEL',23,12
-'Brand#33','PROMO ANODIZED TIN',9,12
-'Brand#33','PROMO ANODIZED TIN',49,12
-'Brand#33','PROMO BRUSHED BRASS',3,12
-'Brand#33','PROMO BRUSHED BRASS',19,12
-'Brand#33','PROMO BRUSHED TIN',49,12
-'Brand#33','PROMO BURNISHED NICKEL',23,12
-'Brand#33','PROMO BURNISHED TIN',3,12
-'Brand#33','PROMO BURNISHED TIN',19,12
-'Brand#33','PROMO BURNISHED TIN',23,12
-'Brand#33','PROMO BURNISHED TIN',36,12
-'Brand#33','PROMO BURNISHED TIN',49,12
-'Brand#33','PROMO PLATED BRASS',23,12
-'Brand#33','PROMO PLATED BRASS',36,12
-'Brand#33','PROMO POLISHED COPPER',3,12
-'Brand#33','PROMO POLISHED NICKEL',3,12
-'Brand#33','PROMO POLISHED STEEL',23,12
-'Brand#33','SMALL ANODIZED STEEL',14,12
-'Brand#33','SMALL ANODIZED STEEL',49,12
-'Brand#33','SMALL ANODIZED TIN',19,12
-'Brand#33','SMALL BRUSHED BRASS',36,12
-'Brand#33','SMALL BRUSHED NICKEL',19,12
-'Brand#33','SMALL BRUSHED NICKEL',45,12
-'Brand#33','SMALL BURNISHED BRASS',36,12
-'Brand#33','SMALL BURNISHED TIN',9,12
-'Brand#33','SMALL PLATED BRASS',14,12
-'Brand#33','SMALL PLATED NICKEL',49,12
-'Brand#33','SMALL PLATED STEEL',3,12
-'Brand#33','SMALL POLISHED NICKEL',9,12
-'Brand#33','STANDARD ANODIZED STEEL',14,12
-'Brand#33','STANDARD ANODIZED STEEL',45,12
-'Brand#33','STANDARD ANODIZED TIN',9,12
-'Brand#33','STANDARD BRUSHED BRASS',19,12
-'Brand#33','STANDARD BRUSHED NICKEL',14,12
-'Brand#33','STANDARD BURNISHED BRASS',9,12
-'Brand#33','STANDARD BURNISHED TIN',23,12
-'Brand#33','STANDARD POLISHED STEEL',45,12
-'Brand#34','ECONOMY ANODIZED NICKEL',9,12
-'Brand#34','ECONOMY ANODIZED NICKEL',49,12
-'Brand#34','ECONOMY ANODIZED STEEL',45,12
-'Brand#34','ECONOMY BURNISHED COPPER',9,12
-'Brand#34','ECONOMY BURNISHED COPPER',23,12
-'Brand#34','ECONOMY BURNISHED COPPER',36,12
-'Brand#34','ECONOMY BURNISHED NICKEL',19,12
-'Brand#34','ECONOMY BURNISHED NICKEL',49,12
-'Brand#34','ECONOMY BURNISHED STEEL',9,12
-'Brand#34','ECONOMY BURNISHED TIN',14,12
-'Brand#34','ECONOMY PLATED BRASS',3,12
-'Brand#34','ECONOMY PLATED COPPER',3,12
-'Brand#34','ECONOMY PLATED TIN',3,12
-'Brand#34','ECONOMY PLATED TIN',14,12
-'Brand#34','ECONOMY POLISHED TIN',36,12
-'Brand#34','LARGE ANODIZED COPPER',3,12
-'Brand#34','LARGE ANODIZED NICKEL',3,12
-'Brand#34','LARGE ANODIZED NICKEL',49,12
-'Brand#34','LARGE BRUSHED COPPER',36,12
-'Brand#34','LARGE BRUSHED NICKEL',19,12
-'Brand#34','LARGE BRUSHED NICKEL',49,12
-'Brand#34','LARGE BURNISHED COPPER',23,12
-'Brand#34','LARGE BURNISHED NICKEL',23,12
-'Brand#34','LARGE BURNISHED TIN',14,12
-'Brand#34','LARGE BURNISHED TIN',23,12
-'Brand#34','LARGE BURNISHED TIN',49,12
-'Brand#34','LARGE PLATED COPPER',9,12
-'Brand#34','LARGE PLATED TIN',14,12
-'Brand#34','LARGE POLISHED BRASS',3,12
-'Brand#34','LARGE POLISHED BRASS',45,12
-'Brand#34','LARGE POLISHED COPPER',3,12
-'Brand#34','LARGE POLISHED NICKEL',3,12
-'Brand#34','LARGE POLISHED NICKEL',49,12
-'Brand#34','MEDIUM ANODIZED BRASS',45,12
-'Brand#34','MEDIUM BRUSHED BRASS',49,12
-'Brand#34','MEDIUM BRUSHED COPPER',9,12
-'Brand#34','MEDIUM BRUSHED COPPER',23,12
-'Brand#34','MEDIUM BRUSHED NICKEL',9,12
-'Brand#34','MEDIUM BRUSHED STEEL',45,12
-'Brand#34','MEDIUM BRUSHED TIN',36,12
-'Brand#34','MEDIUM BURNISHED BRASS',14,12
-'Brand#34','MEDIUM BURNISHED NICKEL',3,12
-'Brand#34','MEDIUM PLATED BRASS',23,12
-'Brand#34','PROMO ANODIZED NICKEL',3,12
-'Brand#34','PROMO BRUSHED COPPER',49,12
-'Brand#34','PROMO BRUSHED NICKEL',49,12
-'Brand#34','PROMO BURNISHED STEEL',14,12
-'Brand#34','PROMO PLATED BRASS',3,12
-'Brand#34','PROMO PLATED BRASS',36,12
-'Brand#34','PROMO PLATED TIN',49,12
-'Brand#34','PROMO POLISHED BRASS',14,12
-'Brand#34','PROMO POLISHED COPPER',23,12
-'Brand#34','PROMO POLISHED NICKEL',49,12
-'Brand#34','SMALL ANODIZED BRASS',19,12
-'Brand#34','SMALL ANODIZED COPPER',14,12
-'Brand#34','SMALL ANODIZED STEEL',19,12
-'Brand#34','SMALL ANODIZED TIN',9,12
-'Brand#34','SMALL BRUSHED COPPER',14,12
-'Brand#34','SMALL BURNISHED BRASS',9,12
-'Brand#34','SMALL BURNISHED BRASS',23,12
-'Brand#34','SMALL BURNISHED COPPER',9,12
-'Brand#34','SMALL BURNISHED COPPER',36,12
-'Brand#34','SMALL BURNISHED NICKEL',9,12
-'Brand#34','SMALL BURNISHED NICKEL',14,12
-'Brand#34','SMALL BURNISHED NICKEL',36,12
-'Brand#34','SMALL BURNISHED STEEL',14,12
-'Brand#34','SMALL PLATED BRASS',14,12
-'Brand#34','SMALL PLATED TIN',45,12
-'Brand#34','SMALL POLISHED STEEL',19,12
-'Brand#34','STANDARD ANODIZED BRASS',36,12
-'Brand#34','STANDARD ANODIZED TIN',3,12
-'Brand#34','STANDARD ANODIZED TIN',14,12
-'Brand#34','STANDARD BRUSHED BRASS',36,12
-'Brand#34','STANDARD BRUSHED COPPER',3,12
-'Brand#34','STANDARD BRUSHED STEEL',23,12
-'Brand#34','STANDARD BRUSHED TIN',45,12
-'Brand#34','STANDARD BURNISHED STEEL',14,12
-'Brand#34','STANDARD BURNISHED TIN',45,12
-'Brand#34','STANDARD POLISHED COPPER',14,12
-'Brand#35','ECONOMY ANODIZED BRASS',14,12
-'Brand#35','ECONOMY ANODIZED COPPER',19,12
-'Brand#35','ECONOMY ANODIZED NICKEL',14,12
-'Brand#35','ECONOMY ANODIZED STEEL',14,12
-'Brand#35','ECONOMY ANODIZED STEEL',45,12
-'Brand#35','ECONOMY BRUSHED BRASS',36,12
-'Brand#35','ECONOMY BRUSHED NICKEL',49,12
-'Brand#35','ECONOMY BURNISHED BRASS',19,12
-'Brand#35','ECONOMY BURNISHED BRASS',36,12
-'Brand#35','ECONOMY BURNISHED STEEL',36,12
-'Brand#35','ECONOMY PLATED TIN',45,12
-'Brand#35','ECONOMY PLATED TIN',49,12
-'Brand#35','ECONOMY POLISHED COPPER',9,12
-'Brand#35','ECONOMY POLISHED NICKEL',23,12
-'Brand#35','ECONOMY POLISHED STEEL',9,12
-'Brand#35','ECONOMY POLISHED TIN',23,12
-'Brand#35','LARGE ANODIZED BRASS',3,12
-'Brand#35','LARGE ANODIZED BRASS',45,12
-'Brand#35','LARGE ANODIZED COPPER',19,12
-'Brand#35','LARGE ANODIZED COPPER',36,12
-'Brand#35','LARGE ANODIZED STEEL',45,12
-'Brand#35','LARGE ANODIZED TIN',45,12
-'Brand#35','LARGE BRUSHED COPPER',23,12
-'Brand#35','LARGE BRUSHED NICKEL',36,12
-'Brand#35','LARGE BRUSHED STEEL',3,12
-'Brand#35','LARGE BRUSHED TIN',36,12
-'Brand#35','LARGE BURNISHED BRASS',45,12
-'Brand#35','LARGE BURNISHED STEEL',9,12
-'Brand#35','LARGE BURNISHED STEEL',45,12
-'Brand#35','LARGE BURNISHED TIN',49,12
-'Brand#35','LARGE PLATED BRASS',3,12
-'Brand#35','LARGE PLATED BRASS',23,12
-'Brand#35','LARGE PLATED STEEL',19,12
-'Brand#35','LARGE PLATED STEEL',49,12
-'Brand#35','MEDIUM ANODIZED TIN',3,12
-'Brand#35','MEDIUM BRUSHED BRASS',49,12
-'Brand#35','MEDIUM BRUSHED COPPER',14,12
-'Brand#35','MEDIUM BRUSHED NICKEL',3,12
-'Brand#35','MEDIUM BRUSHED STEEL',45,12
-'Brand#35','MEDIUM BURNISHED STEEL',19,12
-'Brand#35','MEDIUM PLATED NICKEL',45,12
-'Brand#35','MEDIUM PLATED STEEL',3,12
-'Brand#35','MEDIUM PLATED TIN',36,12
-'Brand#35','PROMO ANODIZED BRASS',14,12
-'Brand#35','PROMO ANODIZED STEEL',3,12
-'Brand#35','PROMO ANODIZED STEEL',23,12
-'Brand#35','PROMO ANODIZED TIN',49,12
-'Brand#35','PROMO BRUSHED COPPER',9,12
-'Brand#35','PROMO BRUSHED COPPER',23,12
-'Brand#35','PROMO BRUSHED STEEL',36,12
-'Brand#35','PROMO BURNISHED NICKEL',19,12
-'Brand#35','PROMO BURNISHED STEEL',3,12
-'Brand#35','PROMO BURNISHED STEEL',14,12
-'Brand#35','PROMO BURNISHED STEEL',49,12
-'Brand#35','PROMO BURNISHED TIN',9,12
-'Brand#35','PROMO BURNISHED TIN',14,12
-'Brand#35','PROMO POLISHED BRASS',19,12
-'Brand#35','PROMO POLISHED COPPER',49,12
-'Brand#35','PROMO POLISHED NICKEL',49,12
-'Brand#35','PROMO POLISHED STEEL',9,12
-'Brand#35','PROMO POLISHED TIN',36,12
-'Brand#35','SMALL ANODIZED BRASS',9,12
-'Brand#35','SMALL ANODIZED BRASS',19,12
-'Brand#35','SMALL BRUSHED NICKEL',19,12
-'Brand#35','SMALL BRUSHED STEEL',45,12
-'Brand#35','SMALL BRUSHED TIN',45,12
-'Brand#35','SMALL BURNISHED BRASS',9,12
-'Brand#35','SMALL BURNISHED BRASS',23,12
-'Brand#35','SMALL BURNISHED BRASS',36,12
-'Brand#35','SMALL BURNISHED BRASS',49,12
-'Brand#35','SMALL BURNISHED COPPER',45,12
-'Brand#35','SMALL PLATED BRASS',9,12
-'Brand#35','SMALL PLATED BRASS',36,12
-'Brand#35','SMALL PLATED TIN',36,12
-'Brand#35','STANDARD ANODIZED TIN',3,12
-'Brand#35','STANDARD ANODIZED TIN',9,12
-'Brand#35','STANDARD BURNISHED BRASS',36,12
-'Brand#35','STANDARD BURNISHED STEEL',49,12
-'Brand#35','STANDARD PLATED BRASS',49,12
-'Brand#35','STANDARD PLATED COPPER',9,12
-'Brand#35','STANDARD PLATED NICKEL',23,12
-'Brand#35','STANDARD PLATED NICKEL',49,12
-'Brand#35','STANDARD PLATED STEEL',23,12
-'Brand#35','STANDARD PLATED TIN',45,12
-'Brand#35','STANDARD POLISHED STEEL',23,12
-'Brand#35','STANDARD POLISHED TIN',3,12
-'Brand#41','ECONOMY ANODIZED BRASS',45,12
-'Brand#41','ECONOMY ANODIZED TIN',14,12
-'Brand#41','ECONOMY BRUSHED BRASS',23,12
-'Brand#41','ECONOMY BRUSHED NICKEL',49,12
-'Brand#41','ECONOMY BRUSHED STEEL',36,12
-'Brand#41','ECONOMY BRUSHED TIN',45,12
-'Brand#41','ECONOMY BURNISHED COPPER',3,12
-'Brand#41','ECONOMY BURNISHED COPPER',45,12
-'Brand#41','ECONOMY PLATED NICKEL',23,12
-'Brand#41','ECONOMY PLATED STEEL',36,12
-'Brand#41','ECONOMY PLATED TIN',23,12
-'Brand#41','ECONOMY POLISHED BRASS',36,12
-'Brand#41','ECONOMY POLISHED COPPER',49,12
-'Brand#41','ECONOMY POLISHED NICKEL',9,12
-'Brand#41','ECONOMY POLISHED NICKEL',19,12
-'Brand#41','ECONOMY POLISHED NICKEL',23,12
-'Brand#41','ECONOMY POLISHED STEEL',49,12
-'Brand#41','LARGE ANODIZED BRASS',14,12
-'Brand#41','LARGE ANODIZED BRASS',23,12
-'Brand#41','LARGE ANODIZED COPPER',36,12
-'Brand#41','LARGE ANODIZED STEEL',23,12
-'Brand#41','LARGE BRUSHED BRASS',9,12
-'Brand#41','LARGE BRUSHED COPPER',23,12
-'Brand#41','LARGE BURNISHED BRASS',36,12
-'Brand#41','LARGE BURNISHED STEEL',23,12
-'Brand#41','LARGE PLATED NICKEL',14,12
-'Brand#41','LARGE POLISHED BRASS',45,12
-'Brand#41','LARGE POLISHED COPPER',23,12
-'Brand#41','LARGE POLISHED COPPER',36,12
-'Brand#41','LARGE POLISHED STEEL',3,12
-'Brand#41','LARGE POLISHED STEEL',9,12
-'Brand#41','MEDIUM ANODIZED NICKEL',3,12
-'Brand#41','MEDIUM ANODIZED TIN',3,12
-'Brand#41','MEDIUM BURNISHED COPPER',23,12
-'Brand#41','MEDIUM BURNISHED TIN',14,12
-'Brand#41','MEDIUM BURNISHED TIN',45,12
-'Brand#41','MEDIUM PLATED BRASS',19,12
-'Brand#41','MEDIUM PLATED COPPER',19,12
-'Brand#41','MEDIUM PLATED COPPER',45,12
-'Brand#41','PROMO ANODIZED BRASS',14,12
-'Brand#41','PROMO ANODIZED NICKEL',49,12
-'Brand#41','PROMO ANODIZED TIN',9,12
-'Brand#41','PROMO BURNISHED COPPER',49,12
-'Brand#41','PROMO BURNISHED TIN',14,12
-'Brand#41','PROMO PLATED NICKEL',14,12
-'Brand#41','PROMO PLATED STEEL',45,12
-'Brand#41','PROMO PLATED TIN',3,12
-'Brand#41','PROMO PLATED TIN',36,12
-'Brand#41','PROMO POLISHED COPPER',23,12
-'Brand#41','PROMO POLISHED NICKEL',19,12
-'Brand#41','SMALL ANODIZED BRASS',3,12
-'Brand#41','SMALL ANODIZED COPPER',14,12
-'Brand#41','SMALL ANODIZED NICKEL',36,12
-'Brand#41','SMALL BRUSHED STEEL',36,12
-'Brand#41','SMALL BRUSHED TIN',14,12
-'Brand#41','SMALL BURNISHED TIN',3,12
-'Brand#41','SMALL PLATED BRASS',14,12
-'Brand#41','SMALL PLATED STEEL',14,12
-'Brand#41','SMALL POLISHED COPPER',36,12
-'Brand#41','SMALL POLISHED TIN',36,12
-'Brand#41','STANDARD ANODIZED BRASS',3,12
-'Brand#41','STANDARD ANODIZED BRASS',36,12
-'Brand#41','STANDARD ANODIZED COPPER',14,12
-'Brand#41','STANDARD ANODIZED NICKEL',36,12
-'Brand#41','STANDARD BURNISHED STEEL',9,12
-'Brand#41','STANDARD BURNISHED TIN',3,12
-'Brand#41','STANDARD PLATED BRASS',45,12
-'Brand#41','STANDARD PLATED COPPER',49,12
-'Brand#41','STANDARD POLISHED COPPER',23,12
-'Brand#41','STANDARD POLISHED NICKEL',3,12
-'Brand#42','ECONOMY ANODIZED BRASS',36,12
-'Brand#42','ECONOMY ANODIZED STEEL',9,12
-'Brand#42','ECONOMY BRUSHED NICKEL',45,12
-'Brand#42','ECONOMY BRUSHED TIN',14,12
-'Brand#42','ECONOMY BURNISHED NICKEL',49,12
-'Brand#42','ECONOMY BURNISHED STEEL',49,12
-'Brand#42','ECONOMY BURNISHED TIN',19,12
-'Brand#42','ECONOMY PLATED COPPER',14,12
-'Brand#42','ECONOMY PLATED NICKEL',9,12
-'Brand#42','ECONOMY POLISHED COPPER',9,12
-'Brand#42','LARGE ANODIZED BRASS',49,12
-'Brand#42','LARGE ANODIZED COPPER',36,12
-'Brand#42','LARGE BURNISHED COPPER',9,12
-'Brand#42','LARGE BURNISHED COPPER',19,12
-'Brand#42','LARGE BURNISHED TIN',9,12
-'Brand#42','LARGE PLATED BRASS',23,12
-'Brand#42','LARGE PLATED BRASS',36,12
-'Brand#42','LARGE PLATED NICKEL',23,12
-'Brand#42','LARGE PLATED TIN',9,12
-'Brand#42','LARGE PLATED TIN',19,12
-'Brand#42','LARGE POLISHED BRASS',36,12
-'Brand#42','LARGE POLISHED STEEL',9,12
-'Brand#42','LARGE POLISHED STEEL',45,12
-'Brand#42','LARGE POLISHED TIN',14,12
-'Brand#42','MEDIUM ANODIZED NICKEL',19,12
-'Brand#42','MEDIUM ANODIZED STEEL',23,12
-'Brand#42','MEDIUM ANODIZED TIN',49,12
-'Brand#42','MEDIUM BRUSHED NICKEL',9,12
-'Brand#42','MEDIUM BRUSHED STEEL',19,12
-'Brand#42','MEDIUM BRUSHED TIN',14,12
-'Brand#42','MEDIUM BURNISHED BRASS',36,12
-'Brand#42','MEDIUM BURNISHED NICKEL',36,12
-'Brand#42','MEDIUM BURNISHED STEEL',49,12
-'Brand#42','MEDIUM PLATED BRASS',36,12
-'Brand#42','MEDIUM PLATED COPPER',36,12
-'Brand#42','MEDIUM PLATED COPPER',45,12
-'Brand#42','MEDIUM PLATED STEEL',3,12
-'Brand#42','MEDIUM PLATED TIN',45,12
-'Brand#42','PROMO ANODIZED TIN',23,12
-'Brand#42','PROMO BRUSHED BRASS',19,12
-'Brand#42','PROMO BRUSHED NICKEL',3,12
-'Brand#42','PROMO BRUSHED TIN',45,12
-'Brand#42','PROMO BURNISHED BRASS',19,12
-'Brand#42','PROMO BURNISHED NICKEL',3,12
-'Brand#42','PROMO BURNISHED TIN',9,12
-'Brand#42','PROMO PLATED BRASS',14,12
-'Brand#42','PROMO PLATED BRASS',23,12
-'Brand#42','PROMO PLATED STEEL',19,12
-'Brand#42','PROMO POLISHED STEEL',45,12
-'Brand#42','SMALL ANODIZED BRASS',36,12
-'Brand#42','SMALL BRUSHED BRASS',36,12
-'Brand#42','SMALL BURNISHED BRASS',3,12
-'Brand#42','SMALL BURNISHED BRASS',36,12
-'Brand#42','SMALL BURNISHED STEEL',23,12
-'Brand#42','SMALL BURNISHED TIN',9,12
-'Brand#42','SMALL BURNISHED TIN',49,12
-'Brand#42','SMALL PLATED COPPER',9,12
-'Brand#42','SMALL PLATED COPPER',19,12
-'Brand#42','SMALL POLISHED BRASS',3,12
-'Brand#42','SMALL POLISHED COPPER',36,12
-'Brand#42','SMALL POLISHED NICKEL',23,12
-'Brand#42','STANDARD ANODIZED BRASS',23,12
-'Brand#42','STANDARD ANODIZED COPPER',45,12
-'Brand#42','STANDARD ANODIZED STEEL',23,12
-'Brand#42','STANDARD ANODIZED TIN',23,12
-'Brand#42','STANDARD BRUSHED TIN',3,12
-'Brand#42','STANDARD BURNISHED COPPER',36,12
-'Brand#42','STANDARD BURNISHED TIN',23,12
-'Brand#42','STANDARD PLATED COPPER',9,12
-'Brand#42','STANDARD PLATED TIN',3,12
-'Brand#42','STANDARD POLISHED NICKEL',9,12
-'Brand#42','STANDARD POLISHED STEEL',14,12
-'Brand#43','ECONOMY ANODIZED BRASS',14,12
-'Brand#43','ECONOMY ANODIZED COPPER',9,12
-'Brand#43','ECONOMY ANODIZED COPPER',19,12
-'Brand#43','ECONOMY ANODIZED COPPER',45,12
-'Brand#43','ECONOMY BRUSHED STEEL',9,12
-'Brand#43','ECONOMY BRUSHED STEEL',14,12
-'Brand#43','ECONOMY BRUSHED STEEL',36,12
-'Brand#43','ECONOMY BRUSHED STEEL',45,12
-'Brand#43','ECONOMY BRUSHED TIN',49,12
-'Brand#43','ECONOMY BURNISHED BRASS',3,12
-'Brand#43','ECONOMY BURNISHED BRASS',49,12
-'Brand#43','ECONOMY BURNISHED NICKEL',3,12
-'Brand#43','ECONOMY BURNISHED NICKEL',36,12
-'Brand#43','ECONOMY BURNISHED STEEL',9,12
-'Brand#43','ECONOMY BURNISHED TIN',19,12
-'Brand#43','ECONOMY PLATED COPPER',3,12
-'Brand#43','ECONOMY PLATED STEEL',3,12
-'Brand#43','ECONOMY POLISHED BRASS',45,12
-'Brand#43','ECONOMY POLISHED NICKEL',45,12
-'Brand#43','ECONOMY POLISHED TIN',49,12
-'Brand#43','LARGE ANODIZED TIN',14,12
-'Brand#43','LARGE BRUSHED NICKEL',23,12
-'Brand#43','LARGE BRUSHED STEEL',45,12
-'Brand#43','LARGE BURNISHED COPPER',14,12
-'Brand#43','LARGE BURNISHED NICKEL',3,12
-'Brand#43','LARGE BURNISHED STEEL',3,12
-'Brand#43','LARGE BURNISHED TIN',45,12
-'Brand#43','LARGE PLATED TIN',9,12
-'Brand#43','LARGE POLISHED BRASS',9,12
-'Brand#43','LARGE POLISHED COPPER',23,12
-'Brand#43','LARGE POLISHED NICKEL',9,12
-'Brand#43','LARGE POLISHED TIN',45,12
-'Brand#43','MEDIUM ANODIZED BRASS',14,12
-'Brand#43','MEDIUM ANODIZED BRASS',19,12
-'Brand#43','MEDIUM ANODIZED BRASS',36,12
-'Brand#43','MEDIUM ANODIZED COPPER',45,12
-'Brand#43','MEDIUM ANODIZED NICKEL',36,12
-'Brand#43','MEDIUM BRUSHED BRASS',45,12
-'Brand#43','MEDIUM BURNISHED BRASS',36,12
-'Brand#43','MEDIUM BURNISHED BRASS',45,12
-'Brand#43','MEDIUM BURNISHED BRASS',49,12
-'Brand#43','MEDIUM BURNISHED COPPER',3,12
-'Brand#43','MEDIUM BURNISHED COPPER',14,12
-'Brand#43','MEDIUM PLATED BRASS',3,12
-'Brand#43','MEDIUM PLATED BRASS',49,12
-'Brand#43','MEDIUM PLATED COPPER',19,12
-'Brand#43','PROMO ANODIZED NICKEL',19,12
-'Brand#43','PROMO ANODIZED STEEL',9,12
-'Brand#43','PROMO ANODIZED TIN',9,12
-'Brand#43','PROMO BRUSHED NICKEL',23,12
-'Brand#43','PROMO BRUSHED TIN',49,12
-'Brand#43','PROMO BURNISHED STEEL',36,12
-'Brand#43','PROMO BURNISHED STEEL',45,12
-'Brand#43','PROMO BURNISHED TIN',14,12
-'Brand#43','PROMO PLATED NICKEL',9,12
-'Brand#43','PROMO PLATED NICKEL',14,12
-'Brand#43','PROMO PLATED STEEL',9,12
-'Brand#43','PROMO POLISHED COPPER',23,12
-'Brand#43','PROMO POLISHED NICKEL',3,12
-'Brand#43','PROMO POLISHED STEEL',3,12
-'Brand#43','PROMO POLISHED STEEL',36,12
-'Brand#43','SMALL ANODIZED NICKEL',3,12
-'Brand#43','SMALL ANODIZED NICKEL',23,12
-'Brand#43','SMALL BRUSHED BRASS',49,12
-'Brand#43','SMALL BRUSHED COPPER',36,12
-'Brand#43','SMALL BRUSHED NICKEL',36,12
-'Brand#43','SMALL BRUSHED STEEL',9,12
-'Brand#43','SMALL BURNISHED COPPER',49,12
-'Brand#43','SMALL BURNISHED NICKEL',45,12
-'Brand#43','SMALL PLATED BRASS',36,12
-'Brand#43','SMALL PLATED COPPER',9,12
-'Brand#43','SMALL PLATED COPPER',49,12
-'Brand#43','SMALL POLISHED NICKEL',14,12
-'Brand#43','SMALL POLISHED TIN',49,12
-'Brand#43','STANDARD ANODIZED BRASS',36,12
-'Brand#43','STANDARD ANODIZED NICKEL',14,12
-'Brand#43','STANDARD ANODIZED TIN',9,12
-'Brand#43','STANDARD ANODIZED TIN',49,12
-'Brand#43','STANDARD BRUSHED BRASS',3,12
-'Brand#43','STANDARD BRUSHED COPPER',19,12
-'Brand#43','STANDARD BURNISHED STEEL',23,12
-'Brand#43','STANDARD BURNISHED TIN',14,12
-'Brand#43','STANDARD PLATED BRASS',19,12
-'Brand#43','STANDARD PLATED NICKEL',14,12
-'Brand#43','STANDARD PLATED NICKEL',23,12
-'Brand#43','STANDARD PLATED NICKEL',36,12
-'Brand#43','STANDARD POLISHED COPPER',3,12
-'Brand#43','STANDARD POLISHED STEEL',36,12
-'Brand#43','STANDARD POLISHED TIN',9,12
-'Brand#44','ECONOMY ANODIZED COPPER',9,12
-'Brand#44','ECONOMY ANODIZED NICKEL',36,12
-'Brand#44','ECONOMY ANODIZED STEEL',14,12
-'Brand#44','ECONOMY BRUSHED COPPER',19,12
-'Brand#44','ECONOMY BURNISHED STEEL',45,12
-'Brand#44','ECONOMY POLISHED TIN',36,12
-'Brand#44','ECONOMY POLISHED TIN',49,12
-'Brand#44','LARGE ANODIZED TIN',3,12
-'Brand#44','LARGE BRUSHED COPPER',36,12
-'Brand#44','LARGE BRUSHED STEEL',36,12
-'Brand#44','LARGE BRUSHED TIN',3,12
-'Brand#44','LARGE BRUSHED TIN',19,12
-'Brand#44','LARGE BURNISHED BRASS',19,12
-'Brand#44','LARGE BURNISHED BRASS',49,12
-'Brand#44','LARGE BURNISHED NICKEL',9,12
-'Brand#44','LARGE PLATED BRASS',9,12
-'Brand#44','LARGE PLATED NICKEL',3,12
-'Brand#44','LARGE PLATED NICKEL',14,12
-'Brand#44','LARGE PLATED NICKEL',36,12
-'Brand#44','MEDIUM ANODIZED BRASS',23,12
-'Brand#44','MEDIUM ANODIZED COPPER',45,12
-'Brand#44','MEDIUM ANODIZED TIN',9,12
-'Brand#44','MEDIUM BRUSHED BRASS',49,12
-'Brand#44','MEDIUM BRUSHED COPPER',3,12
-'Brand#44','MEDIUM BRUSHED COPPER',9,12
-'Brand#44','MEDIUM BRUSHED COPPER',36,12
-'Brand#44','MEDIUM BURNISHED COPPER',36,12
-'Brand#44','MEDIUM BURNISHED NICKEL',36,12
-'Brand#44','MEDIUM PLATED STEEL',19,12
-'Brand#44','MEDIUM PLATED TIN',23,12
-'Brand#44','MEDIUM PLATED TIN',36,12
-'Brand#44','PROMO ANODIZED BRASS',9,12
-'Brand#44','PROMO ANODIZED COPPER',19,12
-'Brand#44','PROMO ANODIZED NICKEL',19,12
-'Brand#44','PROMO ANODIZED STEEL',36,12
-'Brand#44','PROMO BRUSHED NICKEL',3,12
-'Brand#44','PROMO BURNISHED BRASS',19,12
-'Brand#44','PROMO BURNISHED NICKEL',49,12
-'Brand#44','PROMO PLATED BRASS',19,12
-'Brand#44','PROMO PLATED STEEL',14,12
-'Brand#44','PROMO PLATED STEEL',36,12
-'Brand#44','PROMO POLISHED COPPER',14,12
-'Brand#44','PROMO POLISHED COPPER',23,12
-'Brand#44','PROMO POLISHED COPPER',45,12
-'Brand#44','PROMO POLISHED STEEL',36,12
-'Brand#44','SMALL ANODIZED STEEL',36,12
-'Brand#44','SMALL BRUSHED COPPER',19,12
-'Brand#44','SMALL BRUSHED COPPER',45,12
-'Brand#44','SMALL BRUSHED NICKEL',3,12
-'Brand#44','SMALL BRUSHED NICKEL',9,12
-'Brand#44','SMALL BURNISHED COPPER',14,12
-'Brand#44','SMALL BURNISHED NICKEL',3,12
-'Brand#44','SMALL BURNISHED TIN',3,12
-'Brand#44','SMALL BURNISHED TIN',36,12
-'Brand#44','SMALL PLATED BRASS',23,12
-'Brand#44','SMALL PLATED BRASS',49,12
-'Brand#44','SMALL PLATED STEEL',3,12
-'Brand#44','SMALL PLATED STEEL',45,12
-'Brand#44','SMALL POLISHED BRASS',3,12
-'Brand#44','SMALL POLISHED COPPER',14,12
-'Brand#44','STANDARD ANODIZED BRASS',3,12
-'Brand#44','STANDARD ANODIZED BRASS',14,12
-'Brand#44','STANDARD ANODIZED COPPER',45,12
-'Brand#44','STANDARD ANODIZED NICKEL',9,12
-'Brand#44','STANDARD ANODIZED NICKEL',36,12
-'Brand#44','STANDARD ANODIZED TIN',9,12
-'Brand#44','STANDARD BRUSHED BRASS',9,12
-'Brand#44','STANDARD BRUSHED COPPER',23,12
-'Brand#44','STANDARD BRUSHED TIN',49,12
-'Brand#44','STANDARD BURNISHED COPPER',3,12
-'Brand#44','STANDARD BURNISHED COPPER',49,12
-'Brand#44','STANDARD BURNISHED STEEL',23,12
-'Brand#44','STANDARD BURNISHED TIN',36,12
-'Brand#44','STANDARD PLATED COPPER',14,12
-'Brand#44','STANDARD PLATED COPPER',45,12
-'Brand#44','STANDARD PLATED TIN',9,12
-'Brand#44','STANDARD PLATED TIN',23,12
-'Brand#44','STANDARD POLISHED BRASS',14,12
-'Brand#44','STANDARD POLISHED NICKEL',19,12
-'Brand#51','ECONOMY ANODIZED BRASS',9,12
-'Brand#51','ECONOMY ANODIZED BRASS',36,12
-'Brand#51','ECONOMY ANODIZED BRASS',45,12
-'Brand#51','ECONOMY ANODIZED COPPER',19,12
-'Brand#51','ECONOMY ANODIZED NICKEL',14,12
-'Brand#51','ECONOMY ANODIZED TIN',9,12
-'Brand#51','ECONOMY BRUSHED STEEL',36,12
-'Brand#51','ECONOMY BRUSHED STEEL',45,12
-'Brand#51','ECONOMY BRUSHED TIN',36,12
-'Brand#51','ECONOMY BURNISHED COPPER',45,12
-'Brand#51','ECONOMY PLATED STEEL',19,12
-'Brand#51','ECONOMY PLATED STEEL',23,12
-'Brand#51','ECONOMY PLATED TIN',45,12
-'Brand#51','LARGE ANODIZED COPPER',19,12
-'Brand#51','LARGE BRUSHED COPPER',36,12
-'Brand#51','LARGE BRUSHED NICKEL',49,12
-'Brand#51','LARGE BURNISHED STEEL',3,12
-'Brand#51','LARGE PLATED COPPER',9,12
-'Brand#51','LARGE PLATED NICKEL',45,12
-'Brand#51','LARGE PLATED TIN',19,12
-'Brand#51','LARGE PLATED TIN',23,12
-'Brand#51','LARGE POLISHED COPPER',3,12
-'Brand#51','LARGE POLISHED COPPER',23,12
-'Brand#51','MEDIUM ANODIZED NICKEL',3,12
-'Brand#51','MEDIUM ANODIZED NICKEL',19,12
-'Brand#51','MEDIUM ANODIZED NICKEL',23,12
-'Brand#51','MEDIUM ANODIZED STEEL',14,12
-'Brand#51','MEDIUM ANODIZED TIN',14,12
-'Brand#51','MEDIUM BRUSHED COPPER',49,12
-'Brand#51','MEDIUM BRUSHED TIN',49,12
-'Brand#51','MEDIUM BURNISHED BRASS',36,12
-'Brand#51','MEDIUM BURNISHED NICKEL',14,12
-'Brand#51','MEDIUM BURNISHED NICKEL',49,12
-'Brand#51','MEDIUM PLATED NICKEL',45,12
-'Brand#51','PROMO ANODIZED BRASS',3,12
-'Brand#51','PROMO ANODIZED COPPER',23,12
-'Brand#51','PROMO ANODIZED NICKEL',9,12
-'Brand#51','PROMO ANODIZED NICKEL',14,12
-'Brand#51','PROMO ANODIZED TIN',23,12
-'Brand#51','PROMO ANODIZED TIN',49,12
-'Brand#51','PROMO BRUSHED BRASS',23,12
-'Brand#51','PROMO BRUSHED COPPER',19,12
-'Brand#51','PROMO BRUSHED STEEL',36,12
-'Brand#51','PROMO BRUSHED TIN',3,12
-'Brand#51','PROMO BURNISHED COPPER',3,12
-'Brand#51','PROMO BURNISHED COPPER',19,12
-'Brand#51','PROMO PLATED COPPER',9,12
-'Brand#51','PROMO PLATED STEEL',45,12
-'Brand#51','PROMO PLATED TIN',14,12
-'Brand#51','SMALL ANODIZED NICKEL',9,12
-'Brand#51','SMALL BRUSHED BRASS',19,12
-'Brand#51','SMALL BRUSHED NICKEL',3,12


<TRUNCATED>

[06/21] impala git commit: IMPALA-6690: Fix pip_download.py on python 2.6

Posted by ta...@apache.org.
IMPALA-6690: Fix pip_download.py on python 2.6

IMPALA-6682 used set literal syntax in pip_download.py, which is
introduced in python 2.7. This patch changes it to set constructor.

It's tested on python 2.6.9.

Change-Id: I82b4116ee056f605c8aadf39a8b92b78313cb8bf
Reviewed-on: http://gerrit.cloudera.org:8080/9694
Reviewed-by: Lars Volker <lv...@cloudera.com>
Tested-by: Impala Public Jenkins
Reviewed-on: http://gerrit.cloudera.org:8080/9710
Tested-by: Lars Volker <lv...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/7fd27db1
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/7fd27db1
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/7fd27db1

Branch: refs/heads/2.x
Commit: 7fd27db1d86f86f644b991d516fc1e7702a5bc9a
Parents: 185127a
Author: Tianyi Wang <tw...@cloudera.com>
Authored: Fri Mar 16 14:40:40 2018 -0700
Committer: Lars Volker <lv...@cloudera.com>
Committed: Sun Mar 18 17:43:11 2018 +0000

----------------------------------------------------------------------
 infra/python/deps/pip_download.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/7fd27db1/infra/python/deps/pip_download.py
----------------------------------------------------------------------
diff --git a/infra/python/deps/pip_download.py b/infra/python/deps/pip_download.py
index 5a79b80..65f55be 100755
--- a/infra/python/deps/pip_download.py
+++ b/infra/python/deps/pip_download.py
@@ -44,7 +44,7 @@ def check_digest(filename, algorithm, expected_digest):
     supported_algorithms = hashlib.algorithms_available
   except AttributeError:
     # Fallback to hardcoded set if hashlib.algorithms_available doesn't exist.
-    supported_algorithms = {'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'}
+    supported_algorithms = set(['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'])
   if algorithm not in supported_algorithms:
     print 'Hash algorithm {0} is not supported by hashlib'.format(algorithm)
     return False


[04/21] impala git commit: IMPALA-6551: Change Kudu TPCDS and TPCH columns to DECIMAL

Posted by ta...@apache.org.
IMPALA-6551: Change Kudu TPCDS and TPCH columns to DECIMAL

Before Kudu supported DECIMAL columns the TPCDS and TPCH
columns were djusted to use DOUBLE in place of DECIMAL. This
patch undoes that change now that Kudu supports DECIMAL.

Testing:
 - Updated concurrent_select.py
 - Updated test_tpch_queries.py
 - Excersized by the Kudu planner tests

Change-Id: I2f7e4464dc6705cadd610a82c459390a9c0dfe4f
Reviewed-on: http://gerrit.cloudera.org:8080/9691
Reviewed-by: Thomas Tauber-Marshall <tm...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/f6ad4e6b
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/f6ad4e6b
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/f6ad4e6b

Branch: refs/heads/2.x
Commit: f6ad4e6b0e094e091ae1c8105828735a2e5202bf
Parents: 7336839
Author: Grant Henke <gh...@cloudera.com>
Authored: Mon Mar 12 11:55:29 2018 -0500
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sat Mar 17 08:30:54 2018 +0000

----------------------------------------------------------------------
 testdata/datasets/tpcds/tpcds_kudu_template.sql |   174 +-
 testdata/datasets/tpch/tpch_kudu_template.sql   |    24 +-
 testdata/datasets/tpch/tpch_schema_template.sql |    18 +-
 .../workloads/tpcds/queries/tpcds-kudu-q19.test |    39 -
 .../workloads/tpcds/queries/tpcds-kudu-q27.test |    36 -
 .../workloads/tpcds/queries/tpcds-kudu-q3.test  |    32 -
 .../workloads/tpcds/queries/tpcds-kudu-q34.test |    47 -
 .../workloads/tpcds/queries/tpcds-kudu-q42.test |    29 -
 .../workloads/tpcds/queries/tpcds-kudu-q43.test |    37 -
 .../workloads/tpcds/queries/tpcds-kudu-q46.test |    81 -
 .../workloads/tpcds/queries/tpcds-kudu-q47.test |    53 -
 .../workloads/tpcds/queries/tpcds-kudu-q52.test |    28 -
 .../workloads/tpcds/queries/tpcds-kudu-q53.test |    38 -
 .../workloads/tpcds/queries/tpcds-kudu-q55.test |    25 -
 .../workloads/tpcds/queries/tpcds-kudu-q59.test |    84 -
 .../workloads/tpcds/queries/tpcds-kudu-q6.test  |    28 -
 .../workloads/tpcds/queries/tpcds-kudu-q61.test |    43 -
 .../workloads/tpcds/queries/tpcds-kudu-q63.test |    38 -
 .../workloads/tpcds/queries/tpcds-kudu-q65.test |    63 -
 .../workloads/tpcds/queries/tpcds-kudu-q68.test |    62 -
 .../workloads/tpcds/queries/tpcds-kudu-q7.test  |    32 -
 .../workloads/tpcds/queries/tpcds-kudu-q73.test |    51 -
 .../workloads/tpcds/queries/tpcds-kudu-q79.test |    61 -
 .../workloads/tpcds/queries/tpcds-kudu-q8.test  |    71 -
 .../workloads/tpcds/queries/tpcds-kudu-q88.test |    93 -
 .../workloads/tpcds/queries/tpcds-kudu-q89.test |    33 -
 .../workloads/tpcds/queries/tpcds-kudu-q96.test |    17 -
 .../workloads/tpcds/queries/tpcds-kudu-q98.test |    34 -
 .../workloads/tpch/queries/tpch-kudu-q1.test    |    32 -
 .../workloads/tpch/queries/tpch-kudu-q10.test   |    60 -
 .../workloads/tpch/queries/tpch-kudu-q11.test   |  1088 -
 .../workloads/tpch/queries/tpch-kudu-q12.test   |    37 -
 .../workloads/tpch/queries/tpch-kudu-q13.test   |    69 -
 .../workloads/tpch/queries/tpch-kudu-q14.test   |    21 -
 .../workloads/tpch/queries/tpch-kudu-q15.test   |    38 -
 .../workloads/tpch/queries/tpch-kudu-q16.test   | 18351 -----------------
 .../workloads/tpch/queries/tpch-kudu-q17.test   |    25 -
 .../workloads/tpch/queries/tpch-kudu-q18.test   |    98 -
 .../workloads/tpch/queries/tpch-kudu-q19.test   |    43 -
 .../workloads/tpch/queries/tpch-kudu-q2.test    |   151 -
 .../workloads/tpch/queries/tpch-kudu-q20.test   |   229 -
 .../workloads/tpch/queries/tpch-kudu-q21.test   |   147 -
 .../workloads/tpch/queries/tpch-kudu-q22.test   |    48 -
 .../workloads/tpch/queries/tpch-kudu-q3.test    |    40 -
 .../workloads/tpch/queries/tpch-kudu-q4.test    |    33 -
 .../workloads/tpch/queries/tpch-kudu-q5.test    |    36 -
 .../workloads/tpch/queries/tpch-kudu-q6.test    |    17 -
 .../workloads/tpch/queries/tpch-kudu-q7.test    |    49 -
 .../workloads/tpch/queries/tpch-kudu-q8.test    |    46 -
 .../workloads/tpch/queries/tpch-kudu-q9.test    |   213 -
 tests/query_test/test_tpch_queries.py           |     9 +-
 tests/stress/concurrent_select.py               |    14 +-
 52 files changed, 108 insertions(+), 22157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/datasets/tpcds/tpcds_kudu_template.sql
----------------------------------------------------------------------
diff --git a/testdata/datasets/tpcds/tpcds_kudu_template.sql b/testdata/datasets/tpcds/tpcds_kudu_template.sql
index 5c4932f..c0a8760 100644
--- a/testdata/datasets/tpcds/tpcds_kudu_template.sql
+++ b/testdata/datasets/tpcds/tpcds_kudu_template.sql
@@ -35,18 +35,18 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.store_sales (
   ss_store_sk BIGINT,
   ss_promo_sk BIGINT,
   ss_quantity BIGINT,
-  ss_wholesale_cost DOUBLE,
-  ss_list_price DOUBLE,
-  ss_sales_price DOUBLE,
-  ss_ext_discount_amt DOUBLE,
-  ss_ext_sales_price DOUBLE,
-  ss_ext_wholesale_cost DOUBLE,
-  ss_ext_list_price DOUBLE,
-  ss_ext_tax DOUBLE,
-  ss_coupon_amt DOUBLE,
-  ss_net_paid DOUBLE,
-  ss_net_paid_inc_tax DOUBLE,
-  ss_net_profit DOUBLE,
+  ss_wholesale_cost DECIMAL(7,2),
+  ss_list_price DECIMAL(7,2),
+  ss_sales_price DECIMAL(7,2),
+  ss_ext_discount_amt DECIMAL(7,2),
+  ss_ext_sales_price DECIMAL(7,2),
+  ss_ext_wholesale_cost DECIMAL(7,2),
+  ss_ext_list_price DECIMAL(7,2),
+  ss_ext_tax DECIMAL(7,2),
+  ss_coupon_amt DECIMAL(7,2),
+  ss_net_paid DECIMAL(7,2),
+  ss_net_paid_inc_tax DECIMAL(7,2),
+  ss_net_profit DECIMAL(7,2),
   PRIMARY KEY (ss_ticket_number, ss_item_sk)
 )
 PARTITION BY HASH (ss_ticket_number,ss_item_sk) PARTITIONS {buckets}
@@ -100,21 +100,21 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.web_sales (
   ws_warehouse_sk BIGINT,
   ws_promo_sk BIGINT,
   ws_quantity BIGINT,
-  ws_wholesale_cost DOUBLE,
-  ws_list_price DOUBLE,
-  ws_sales_price DOUBLE,
-  ws_ext_discount_amt DOUBLE,
-  ws_ext_sales_price DOUBLE,
-  ws_ext_wholesale_cost DOUBLE,
-  ws_ext_list_price DOUBLE,
-  ws_ext_tax DOUBLE,
-  ws_coupon_amt DOUBLE,
-  ws_ext_ship_cost DOUBLE,
-  ws_net_paid DOUBLE,
-  ws_net_paid_inc_tax DOUBLE,
-  ws_net_paid_inc_ship DOUBLE,
-  ws_net_paid_inc_ship_tax DOUBLE,
-  ws_net_profit DOUBLE,
+  ws_wholesale_cost DECIMAL(7,2),
+  ws_list_price DECIMAL(7,2),
+  ws_sales_price DECIMAL(7,2),
+  ws_ext_discount_amt DECIMAL(7,2),
+  ws_ext_sales_price DECIMAL(7,2),
+  ws_ext_wholesale_cost DECIMAL(7,2),
+  ws_ext_list_price DECIMAL(7,2),
+  ws_ext_tax DECIMAL(7,2),
+  ws_coupon_amt DECIMAL(7,2),
+  ws_ext_ship_cost DECIMAL(7,2),
+  ws_net_paid DECIMAL(7,2),
+  ws_net_paid_inc_tax DECIMAL(7,2),
+  ws_net_paid_inc_ship DECIMAL(7,2),
+  ws_net_paid_inc_ship_tax DECIMAL(7,2),
+  ws_net_profit DECIMAL(7,2),
   PRIMARY KEY (ws_order_number, ws_item_sk)
 )
 PARTITION BY HASH (ws_order_number,ws_item_sk) PARTITIONS {buckets}
@@ -180,21 +180,21 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.catalog_sales (
   cs_warehouse_sk BIGINT,
   cs_promo_sk BIGINT,
   cs_quantity BIGINT,
-  cs_wholesale_cost DOUBLE,
-  cs_list_price DOUBLE,
-  cs_sales_price DOUBLE,
-  cs_ext_discount_amt DOUBLE,
-  cs_ext_sales_price DOUBLE,
-  cs_ext_wholesale_cost DOUBLE,
-  cs_ext_list_price DOUBLE,
-  cs_ext_tax DOUBLE,
-  cs_coupon_amt DOUBLE,
-  cs_ext_ship_cost DOUBLE,
-  cs_net_paid DOUBLE,
-  cs_net_paid_inc_tax DOUBLE,
-  cs_net_paid_inc_ship DOUBLE,
-  cs_net_paid_inc_ship_tax DOUBLE,
-  cs_net_profit DOUBLE,
+  cs_wholesale_cost DECIMAL(7,2),
+  cs_list_price DECIMAL(7,2),
+  cs_sales_price DECIMAL(7,2),
+  cs_ext_discount_amt DECIMAL(7,2),
+  cs_ext_sales_price DECIMAL(7,2),
+  cs_ext_wholesale_cost DECIMAL(7,2),
+  cs_ext_list_price DECIMAL(7,2),
+  cs_ext_tax DECIMAL(7,2),
+  cs_coupon_amt DECIMAL(7,2),
+  cs_ext_ship_cost DECIMAL(7,2),
+  cs_net_paid DECIMAL(7,2),
+  cs_net_paid_inc_tax DECIMAL(7,2),
+  cs_net_paid_inc_ship DECIMAL(7,2),
+  cs_net_paid_inc_ship_tax DECIMAL(7,2),
+  cs_net_profit DECIMAL(7,2),
   PRIMARY KEY (cs_order_number, cs_item_sk)
 )
 PARTITION BY HASH (cs_order_number,cs_item_sk) PARTITIONS {buckets}
@@ -252,15 +252,15 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.store_returns (
   sr_store_sk BIGINT,
   sr_reason_sk BIGINT,
   sr_return_quantity BIGINT,
-  sr_return_amt DOUBLE,
-  sr_return_tax DOUBLE,
-  sr_return_amt_inc_tax DOUBLE,
-  sr_fee DOUBLE,
-  sr_return_ship_cost DOUBLE,
-  sr_refunded_cash DOUBLE,
-  sr_reversed_charge DOUBLE,
-  sr_store_credit DOUBLE,
-  sr_net_loss DOUBLE,
+  sr_return_amt DECIMAL(7,2),
+  sr_return_tax DECIMAL(7,2),
+  sr_return_amt_inc_tax DECIMAL(7,2),
+  sr_fee DECIMAL(7,2),
+  sr_return_ship_cost DECIMAL(7,2),
+  sr_refunded_cash DECIMAL(7,2),
+  sr_reversed_charge DECIMAL(7,2),
+  sr_store_credit DECIMAL(7,2),
+  sr_net_loss DECIMAL(7,2),
   PRIMARY KEY (sr_ticket_number, sr_item_sk)
 )
 PARTITION BY HASH (sr_ticket_number,sr_item_sk) PARTITIONS {buckets}
@@ -308,15 +308,15 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.web_returns (
   wr_web_page_sk BIGINT,
   wr_reason_sk BIGINT,
   wr_return_quantity BIGINT,
-  wr_return_amt DOUBLE,
-  wr_return_tax DOUBLE,
-  wr_return_amt_inc_tax DOUBLE,
-  wr_fee DOUBLE,
-  wr_return_ship_cost DOUBLE,
-  wr_refunded_cash DOUBLE,
-  wr_reversed_charge DOUBLE,
-  wr_account_credit DOUBLE,
-  wr_net_loss DOUBLE,
+  wr_return_amt DECIMAL(7,2),
+  wr_return_tax DECIMAL(7,2),
+  wr_return_amt_inc_tax DECIMAL(7,2),
+  wr_fee DECIMAL(7,2),
+  wr_return_ship_cost DECIMAL(7,2),
+  wr_refunded_cash DECIMAL(7,2),
+  wr_reversed_charge DECIMAL(7,2),
+  wr_account_credit DECIMAL(7,2),
+  wr_net_loss DECIMAL(7,2),
   PRIMARY KEY (wr_order_number, wr_item_sk)
 )
 PARTITION BY HASH (wr_order_number,wr_item_sk) PARTITIONS {buckets}
@@ -371,15 +371,15 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.catalog_returns (
   cr_warehouse_sk BIGINT,
   cr_reason_sk BIGINT,
   cr_return_quantity BIGINT,
-  cr_return_amount DOUBLE,
-  cr_return_tax DOUBLE,
-  cr_return_amt_inc_tax DOUBLE,
-  cr_fee DOUBLE,
-  cr_return_ship_cost DOUBLE,
-  cr_refunded_cash DOUBLE,
-  cr_reversed_charge DOUBLE,
-  cr_store_credit DOUBLE,
-  cr_net_loss DOUBLE,
+  cr_return_amount DECIMAL(7,2),
+  cr_return_tax DECIMAL(7,2),
+  cr_return_amt_inc_tax DECIMAL(7,2),
+  cr_fee DECIMAL(7,2),
+  cr_return_ship_cost DECIMAL(7,2),
+  cr_refunded_cash DECIMAL(7,2),
+  cr_reversed_charge DECIMAL(7,2),
+  cr_store_credit DECIMAL(7,2),
+  cr_net_loss DECIMAL(7,2),
   PRIMARY KEY (cr_order_number, cr_item_sk)
 )
 PARTITION BY HASH (cr_order_number,cr_item_sk) PARTITIONS {buckets}
@@ -451,7 +451,7 @@ CREATE TABLE {target_db_name}.customer (
   c_birth_country STRING,
   c_login STRING,
   c_email_address STRING,
-  c_last_review_date BIGINT
+  c_last_review_date STRING
 )
 PARTITION BY HASH (c_customer_sk) PARTITIONS {buckets}
 STORED AS KUDU
@@ -472,7 +472,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.customer_address (
   ca_state STRING,
   ca_zip STRING,
   ca_country STRING,
-  ca_gmt_offset DOUBLE,
+  ca_gmt_offset DECIMAL(5,2),
   ca_location_type STRING
 )
 PARTITION BY HASH (ca_address_sk) PARTITIONS {buckets}
@@ -560,8 +560,8 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.item (
   i_rec_start_date STRING,
   i_rec_end_date STRING,
   i_item_desc STRING,
-  i_current_price DOUBLE,
-  i_wholesale_cost DOUBLE,
+  i_current_price DECIMAL(7,2),
+  i_wholesale_cost DECIMAL(7,2),
   i_brand_id BIGINT,
   i_brand STRING,
   i_class_id BIGINT,
@@ -591,7 +591,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.promotion (
   p_start_date_sk BIGINT,
   p_end_date_sk BIGINT,
   p_promo_id STRING,
-  p_cost DOUBLE,
+  p_cost DECIMAL(15,2),
   p_response_target BIGINT,
   p_promo_name STRING,
   p_channel_dmail STRING,
@@ -662,8 +662,8 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.store (
   s_state STRING,
   s_zip STRING,
   s_country STRING,
-  s_gmt_offset DOUBLE,
-  s_tax_precentage DOUBLE
+  s_gmt_offset DECIMAL(5,2),
+  s_tax_precentage DECIMAL(5,2)
 )
 PARTITION BY HASH (s_store_sk) PARTITIONS {buckets}
 STORED AS KUDU
@@ -721,8 +721,8 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.call_center (
   cc_state STRING,
   cc_zip STRING,
   cc_country STRING,
-  cc_gmt_offset DOUBLE,
-  cc_tax_percentage DOUBLE
+  cc_gmt_offset DECIMAL(5,2),
+  cc_tax_percentage DECIMAL(5,2)
 )
 PARTITION BY HASH (cc_call_center_sk) PARTITIONS {buckets}
 STORED AS KUDU
@@ -760,18 +760,6 @@ TBLPROPERTIES ('kudu.master_addresses'='{kudu_master}:7051');
 
 INSERT INTO {target_db_name}.income_band SELECT * FROM {source_db_name}.income_band;
 
----- REASON
-CREATE TABLE IF NOT EXISTS {target_db_name}.reason (
-  r_reason_sk BIGINT PRIMARY KEY,
-  r_reason_id STRING,
-  r_reason_desc STRING
-)
-PARTITION BY HASH (r_reason_sk) PARTITIONS {buckets}
-STORED AS KUDU
-TBLPROPERTIES ('kudu.master_addresses'='{kudu_master}:7051');
-
-INSERT INTO {target_db_name}.reason SELECT * FROM {source_db_name}.reason;
-
 ---- SHIP_MODE
 CREATE TABLE IF NOT EXISTS {target_db_name}.ship_mode (
   sm_ship_mode_sk BIGINT PRIMARY KEY,
@@ -802,7 +790,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.warehouse (
   w_state STRING,
   w_zip STRING,
   w_country STRING,
-  w_gmt_offset DOUBLE
+  w_gmt_offset DECIMAL(5,2)
 )
 PARTITION BY HASH (w_warehouse_sk) PARTITIONS {buckets}
 STORED AS KUDU
@@ -859,8 +847,8 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.web_site (
   web_state STRING,
   web_zip STRING,
   web_country STRING,
-  web_gmt_offset DOUBLE,
-  web_tax_percentage DOUBLE
+  web_gmt_offset DECIMAL(5,2),
+  web_tax_percentage DECIMAL(5,2)
 )
 PARTITION BY HASH (web_site_sk) PARTITIONS {buckets}
 STORED AS KUDU

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/datasets/tpch/tpch_kudu_template.sql
----------------------------------------------------------------------
diff --git a/testdata/datasets/tpch/tpch_kudu_template.sql b/testdata/datasets/tpch/tpch_kudu_template.sql
index 032a19a..26de6b7 100644
--- a/testdata/datasets/tpch/tpch_kudu_template.sql
+++ b/testdata/datasets/tpch/tpch_kudu_template.sql
@@ -25,13 +25,13 @@
 --- LINEITEM
 CREATE TABLE IF NOT EXISTS {target_db_name}.lineitem (
   L_ORDERKEY BIGINT,
-  L_LINENUMBER BIGINT,
+  L_LINENUMBER INT,
   L_PARTKEY BIGINT,
   L_SUPPKEY BIGINT,
-  L_QUANTITY DOUBLE,
-  L_EXTENDEDPRICE DOUBLE,
-  L_DISCOUNT DOUBLE,
-  L_TAX DOUBLE,
+  L_QUANTITY DECIMAL(12,2),
+  L_EXTENDEDPRICE DECIMAL(12,2),
+  L_DISCOUNT DECIMAL(12,2),
+  L_TAX DECIMAL(12,2),
   L_RETURNFLAG STRING,
   L_LINESTATUS STRING,
   L_SHIPDATE STRING,
@@ -73,9 +73,9 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.part (
   P_MFGR STRING,
   P_BRAND STRING,
   P_TYPE STRING,
-  P_SIZE BIGINT,
+  P_SIZE INT,
   P_CONTAINER STRING,
-  P_RETAILPRICE DOUBLE,
+  P_RETAILPRICE DECIMAL(12,2),
   P_COMMENT STRING
 )
 partition by hash (p_partkey) partitions {buckets}
@@ -89,7 +89,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.partsupp (
   PS_PARTKEY BIGINT,
   PS_SUPPKEY BIGINT,
   PS_AVAILQTY BIGINT,
-  PS_SUPPLYCOST DOUBLE,
+  PS_SUPPLYCOST DECIMAL(12,2),
   PS_COMMENT STRING,
   PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY)
 )
@@ -106,7 +106,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.supplier (
   S_ADDRESS STRING,
   S_NATIONKEY BIGINT,
   S_PHONE STRING,
-  S_ACCTBAL DOUBLE,
+  S_ACCTBAL DECIMAL(12,2),
   S_COMMENT STRING
 )
 partition by hash (s_suppkey) partitions {buckets}
@@ -143,11 +143,11 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.orders (
   O_ORDERKEY BIGINT PRIMARY KEY,
   O_CUSTKEY BIGINT,
   O_ORDERSTATUS STRING,
-  O_TOTALPRICE DOUBLE,
+  O_TOTALPRICE DECIMAL(12,2),
   O_ORDERDATE STRING,
   O_ORDERPRIORITY STRING,
   O_CLERK STRING,
-  O_SHIPPRIORITY BIGINT,
+  O_SHIPPRIORITY INT,
   O_COMMENT STRING
 )
 partition by hash (o_orderkey) partitions {buckets}
@@ -163,7 +163,7 @@ CREATE TABLE IF NOT EXISTS {target_db_name}.customer (
   C_ADDRESS STRING,
   C_NATIONKEY BIGINT,
   C_PHONE STRING,
-  C_ACCTBAL DOUBLE,
+  C_ACCTBAL DECIMAL(12,2),
   C_MKTSEGMENT STRING,
   C_COMMENT STRING
 )

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/datasets/tpch/tpch_schema_template.sql
----------------------------------------------------------------------
diff --git a/testdata/datasets/tpch/tpch_schema_template.sql b/testdata/datasets/tpch/tpch_schema_template.sql
index dfba06d..8997800 100644
--- a/testdata/datasets/tpch/tpch_schema_template.sql
+++ b/testdata/datasets/tpch/tpch_schema_template.sql
@@ -46,10 +46,10 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   L_PARTKEY BIGINT,
   L_SUPPKEY BIGINT,
   L_LINENUMBER INT,
-  L_QUANTITY DOUBLE,
-  L_EXTENDEDPRICE DOUBLE,
-  L_DISCOUNT DOUBLE,
-  L_TAX DOUBLE,
+  L_QUANTITY DECIMAL(12,2),
+  L_EXTENDEDPRICE DECIMAL(12,2),
+  L_DISCOUNT DECIMAL(12,2),
+  L_TAX DECIMAL(12,2),
   L_RETURNFLAG STRING,
   L_LINESTATUS STRING,
   L_SHIPDATE STRING,
@@ -92,7 +92,7 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   P_TYPE STRING,
   P_SIZE INT,
   P_CONTAINER STRING,
-  P_RETAILPRICE DOUBLE,
+  P_RETAILPRICE DECIMAL(12,2),
   P_COMMENT STRING
 )
 partition by hash (p_partkey) partitions 9 stored as kudu;
@@ -119,7 +119,7 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   PS_PARTKEY BIGINT,
   PS_SUPPKEY BIGINT,
   PS_AVAILQTY BIGINT,
-  PS_SUPPLYCOST DOUBLE,
+  PS_SUPPLYCOST DECIMAL(12,2),
   PS_COMMENT STRING,
   PRIMARY KEY(PS_PARTKEY, PS_SUPPKEY)
 )
@@ -151,7 +151,7 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   S_ADDRESS STRING,
   S_NATIONKEY SMALLINT,
   S_PHONE STRING,
-  S_ACCTBAL DOUBLE,
+  S_ACCTBAL DECIMAL(12,2),
   S_COMMENT STRING
 )
 partition by hash (s_suppkey) partitions 9 stored as kudu;
@@ -230,7 +230,7 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   O_ORDERKEY BIGINT PRIMARY KEY,
   O_CUSTKEY BIGINT,
   O_ORDERSTATUS STRING,
-  O_TOTALPRICE DOUBLE,
+  O_TOTALPRICE DECIMAL(12,2),
   O_ORDERDATE STRING,
   O_ORDERPRIORITY STRING,
   O_CLERK STRING,
@@ -266,7 +266,7 @@ create table if not exists {db_name}{db_suffix}.{table_name} (
   C_ADDRESS STRING,
   C_NATIONKEY SMALLINT,
   C_PHONE STRING,
-  C_ACCTBAL DOUBLE,
+  C_ACCTBAL DECIMAL(12,2),
   C_MKTSEGMENT STRING,
   C_COMMENT STRING
 )

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q19.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q19.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q19.test
deleted file mode 100644
index 46f358e..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q19.test
+++ /dev/null
@@ -1,39 +0,0 @@
-====
----- QUERY: TPCDS-Q19
-select
-  i_brand_id brand_id,
-  i_brand brand,
-  i_manufact_id,
-  i_manufact,
-  round(sum(ss_ext_sales_price), 2) ext_price
-from
-  date_dim,
-  store_sales,
-  item,
-  customer,
-  customer_address,
-  store
-where
-  d_date_sk = ss_sold_date_sk
-  and ss_item_sk = i_item_sk
-  and i_manager_id = 7
-  and d_moy = 11
-  and d_year = 1999
-  and ss_customer_sk = c_customer_sk
-  and c_current_addr_sk = ca_address_sk
-  and substr(ca_zip, 1, 5) <> substr(s_zip, 1, 5)
-  and ss_store_sk = s_store_sk
-  and ss_sold_date_sk between 2451484 and 2451513
-group by
-  i_brand,
-  i_brand_id,
-  i_manufact_id,
-  i_manufact
-order by
-  ext_price desc,
-  i_brand,
-  i_brand_id,
-  i_manufact_id,
-  i_manufact
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q27.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q27.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q27.test
deleted file mode 100644
index f2723c8..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q27.test
+++ /dev/null
@@ -1,36 +0,0 @@
-====
----- QUERY: TPCDS-Q27
-select
-  i_item_id,
-  s_state,
-  -- grouping(s_state) g_state,
-  round(avg(ss_quantity), 2) agg1,
-  round(avg(ss_list_price), 2) agg2,
-  round(avg(ss_coupon_amt), 2) agg3,
-  round(avg(ss_sales_price), 2) agg4
-from
-  store_sales,
-  customer_demographics,
-  date_dim,
-  store,
-  item
-where
-  ss_sold_date_sk = d_date_sk
-  and ss_item_sk = i_item_sk
-  and ss_store_sk = s_store_sk
-  and ss_cdemo_sk = cd_demo_sk
-  and cd_gender = 'F'
-  and cd_marital_status = 'W'
-  and cd_education_status = 'Primary'
-  and d_year = 1998
-  and s_state in ('WI', 'CA', 'TX', 'FL', 'WA', 'TN')
-  and ss_sold_date_sk between 2450815 and 2451179  -- partition key filter
-group by
-  -- rollup (i_item_id, s_state)
-  i_item_id,
-  s_state
-order by
-  i_item_id,
-  s_state
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q3.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q3.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q3.test
deleted file mode 100644
index ba1dd67..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q3.test
+++ /dev/null
@@ -1,32 +0,0 @@
-====
----- QUERY: TPCDS-Q3
-select
-  dt.d_year,
-  item.i_brand_id brand_id,
-  item.i_brand brand,
-  round(sum(ss_ext_sales_price), 2) sum_agg
-from
-  date_dim dt,
-  store_sales,
-  item
-where
-  dt.d_date_sk = store_sales.ss_sold_date_sk
-  and store_sales.ss_item_sk = item.i_item_sk
-  and item.i_manufact_id = 436
-  and dt.d_moy = 12
-  -- partition key filters
-  and (ss_sold_date_sk between 2451149 and 2451179
-    or ss_sold_date_sk between 2451514 and 2451544
-    or ss_sold_date_sk between 2451880 and 2451910
-    or ss_sold_date_sk between 2452245 and 2452275
-    or ss_sold_date_sk between 2452610 and 2452640)
-group by
-  dt.d_year,
-  item.i_brand,
-  item.i_brand_id
-order by
-  dt.d_year,
-  sum_agg desc,
-  brand_id
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q34.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q34.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q34.test
deleted file mode 100644
index 2e6e033..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q34.test
+++ /dev/null
@@ -1,47 +0,0 @@
-====
----- QUERY: TPCDS-Q34
-select
-  c_last_name,
-  c_first_name,
-  c_salutation,
-  c_preferred_cust_flag,
-  ss_ticket_number,
-  cnt
-from
-  (select
-    ss_ticket_number,
-    ss_customer_sk,
-    count(*) cnt
-  from
-    store_sales,
-    date_dim,
-    store,
-    household_demographics
-  where
-    store_sales.ss_sold_date_sk = date_dim.d_date_sk
-    and store_sales.ss_store_sk = store.s_store_sk
-    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
-    and (date_dim.d_dom between 1 and 3
-      or date_dim.d_dom between 25 and 28)
-    and (household_demographics.hd_buy_potential = '>10000'
-      or household_demographics.hd_buy_potential = 'unknown')
-    and household_demographics.hd_vehicle_count > 0
-    and (case when household_demographics.hd_vehicle_count > 0 then household_demographics.hd_dep_count / household_demographics.hd_vehicle_count else null end) > 1.2
-    and date_dim.d_year in (1998, 1998 + 1, 1998 + 2)
-    and store.s_county in ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County', 'Fairfield County', 'Raleigh County', 'Ziebach County', 'Williamson County')
-    and ss_sold_date_sk between 2450816 and 2451910 -- partition key filter
-  group by
-    ss_ticket_number,
-    ss_customer_sk
-  ) dn,
-  customer
-where
-  ss_customer_sk = c_customer_sk
-  and cnt between 15 and 20
-order by
-  c_last_name,
-  c_first_name,
-  c_salutation,
-  c_preferred_cust_flag desc
-limit 100000;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q42.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q42.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q42.test
deleted file mode 100644
index 6d173e3..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q42.test
+++ /dev/null
@@ -1,29 +0,0 @@
-====
----- QUERY: TPCDS-Q42
-select
-  dt.d_year,
-  item.i_category_id,
-  item.i_category,
-  round(sum(ss_ext_sales_price), 2)
-from
-  date_dim dt,
-  store_sales,
-  item
-where
-  dt.d_date_sk = store_sales.ss_sold_date_sk
-  and store_sales.ss_item_sk = item.i_item_sk
-  and item.i_manager_id = 1
-  and dt.d_moy = 12
-  and dt.d_year = 1998
-  and ss_sold_date_sk between 2451149 and 2451179  -- partition key filter
-group by
-  dt.d_year,
-  item.i_category_id,
-  item.i_category
-order by
-  round(sum(ss_ext_sales_price), 2) desc,
-  dt.d_year,
-  item.i_category_id,
-  item.i_category
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q43.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q43.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q43.test
deleted file mode 100644
index 5c7ccda..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q43.test
+++ /dev/null
@@ -1,37 +0,0 @@
-====
----- QUERY: TPCDS-Q43
-select
-  s_store_name,
-  s_store_id,
-  round(sum(case when (d_day_name = 'Sunday') then ss_sales_price else null end), 2) sun_sales,
-  round(sum(case when (d_day_name = 'Monday') then ss_sales_price else null end), 2) mon_sales,
-  round(sum(case when (d_day_name = 'Tuesday') then ss_sales_price else null end), 2) tue_sales,
-  round(sum(case when (d_day_name = 'Wednesday') then ss_sales_price else null end), 2) wed_sales,
-  round(sum(case when (d_day_name = 'Thursday') then ss_sales_price else null end), 2) thu_sales,
-  round(sum(case when (d_day_name = 'Friday') then ss_sales_price else null end), 2) fri_sales,
-  round(sum(case when (d_day_name = 'Saturday') then ss_sales_price else null end), 2) sat_sales
-from
-  date_dim,
-  store_sales,
-  store
-where
-  d_date_sk = ss_sold_date_sk
-  and s_store_sk = ss_store_sk
-  and s_gmt_offset = -5
-  and d_year = 1998
-  and ss_sold_date_sk between 2450816 and 2451179  -- partition key filter
-group by
-  s_store_name,
-  s_store_id
-order by
-  s_store_name,
-  s_store_id,
-  sun_sales,
-  mon_sales,
-  tue_sales,
-  wed_sales,
-  thu_sales,
-  fri_sales,
-  sat_sales
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q46.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q46.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q46.test
deleted file mode 100644
index dffecc3..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q46.test
+++ /dev/null
@@ -1,81 +0,0 @@
-====
----- QUERY: TPCDS-Q46
-select
-  c_last_name,
-  c_first_name,
-  ca_city,
-  bought_city,
-  ss_ticket_number,
-  amt,
-  profit
-from
-  (select
-    ss_ticket_number,
-    ss_customer_sk,
-    ca_city bought_city,
-    round(sum(ss_coupon_amt), 2) amt,
-    round(sum(ss_net_profit), 2) profit
-  from
-    store_sales,
-    date_dim,
-    store,
-    household_demographics,
-    customer_address
-  where
-    store_sales.ss_sold_date_sk = date_dim.d_date_sk
-    and store_sales.ss_store_sk = store.s_store_sk
-    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
-    and store_sales.ss_addr_sk = customer_address.ca_address_sk
-    and (household_demographics.hd_dep_count = 5
-      or household_demographics.hd_vehicle_count = 3)
-    and date_dim.d_dow in (6, 0)
-    and date_dim.d_year in (1999, 1999 + 1, 1999 + 2)
-    and store.s_city in ('Midway', 'Concord', 'Spring Hill', 'Brownsville', 'Greenville')
-    -- partition key filter
-    and ss_sold_date_sk in (2451181, 2451182, 2451188, 2451189, 2451195, 2451196, 2451202, 2451203, 2451209, 2451210, 2451216, 2451217,
-                            2451223, 2451224, 2451230, 2451231, 2451237, 2451238, 2451244, 2451245, 2451251, 2451252, 2451258, 2451259,
-                            2451265, 2451266, 2451272, 2451273, 2451279, 2451280, 2451286, 2451287, 2451293, 2451294, 2451300, 2451301,
-                            2451307, 2451308, 2451314, 2451315, 2451321, 2451322, 2451328, 2451329, 2451335, 2451336, 2451342, 2451343,
-                            2451349, 2451350, 2451356, 2451357, 2451363, 2451364, 2451370, 2451371, 2451377, 2451378, 2451384, 2451385,
-                            2451391, 2451392, 2451398, 2451399, 2451405, 2451406, 2451412, 2451413, 2451419, 2451420, 2451426, 2451427,
-                            2451433, 2451434, 2451440, 2451441, 2451447, 2451448, 2451454, 2451455, 2451461, 2451462, 2451468, 2451469,
-                            2451475, 2451476, 2451482, 2451483, 2451489, 2451490, 2451496, 2451497, 2451503, 2451504, 2451510, 2451511,
-                            2451517, 2451518, 2451524, 2451525, 2451531, 2451532, 2451538, 2451539, 2451545, 2451546, 2451552, 2451553,
-                            2451559, 2451560, 2451566, 2451567, 2451573, 2451574, 2451580, 2451581, 2451587, 2451588, 2451594, 2451595,
-                            2451601, 2451602, 2451608, 2451609, 2451615, 2451616, 2451622, 2451623, 2451629, 2451630, 2451636, 2451637,
-                            2451643, 2451644, 2451650, 2451651, 2451657, 2451658, 2451664, 2451665, 2451671, 2451672, 2451678, 2451679,
-                            2451685, 2451686, 2451692, 2451693, 2451699, 2451700, 2451706, 2451707, 2451713, 2451714, 2451720, 2451721,
-                            2451727, 2451728, 2451734, 2451735, 2451741, 2451742, 2451748, 2451749, 2451755, 2451756, 2451762, 2451763,
-                            2451769, 2451770, 2451776, 2451777, 2451783, 2451784, 2451790, 2451791, 2451797, 2451798, 2451804, 2451805,
-                            2451811, 2451812, 2451818, 2451819, 2451825, 2451826, 2451832, 2451833, 2451839, 2451840, 2451846, 2451847,
-                            2451853, 2451854, 2451860, 2451861, 2451867, 2451868, 2451874, 2451875, 2451881, 2451882, 2451888, 2451889,
-                            2451895, 2451896, 2451902, 2451903, 2451909, 2451910, 2451916, 2451917, 2451923, 2451924, 2451930, 2451931,
-                            2451937, 2451938, 2451944, 2451945, 2451951, 2451952, 2451958, 2451959, 2451965, 2451966, 2451972, 2451973,
-                            2451979, 2451980, 2451986, 2451987, 2451993, 2451994, 2452000, 2452001, 2452007, 2452008, 2452014, 2452015,
-                            2452021, 2452022, 2452028, 2452029, 2452035, 2452036, 2452042, 2452043, 2452049, 2452050, 2452056, 2452057,
-                            2452063, 2452064, 2452070, 2452071, 2452077, 2452078, 2452084, 2452085, 2452091, 2452092, 2452098, 2452099,
-                            2452105, 2452106, 2452112, 2452113, 2452119, 2452120, 2452126, 2452127, 2452133, 2452134, 2452140, 2452141,
-                            2452147, 2452148, 2452154, 2452155, 2452161, 2452162, 2452168, 2452169, 2452175, 2452176, 2452182, 2452183,
-                            2452189, 2452190, 2452196, 2452197, 2452203, 2452204, 2452210, 2452211, 2452217, 2452218, 2452224, 2452225,
-                            2452231, 2452232, 2452238, 2452239, 2452245, 2452246, 2452252, 2452253, 2452259, 2452260, 2452266, 2452267,
-                            2452273, 2452274)
-  group by
-    ss_ticket_number,
-    ss_customer_sk,
-    ss_addr_sk,
-    ca_city
-  ) dn,
-  customer,
-  customer_address current_addr
-where
-  ss_customer_sk = c_customer_sk
-  and customer.c_current_addr_sk = current_addr.ca_address_sk
-  and current_addr.ca_city <> bought_city
-order by
-  c_last_name,
-  c_first_name,
-  ca_city,
-  bought_city,
-  ss_ticket_number
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q47.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q47.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q47.test
deleted file mode 100644
index 51305e9..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q47.test
+++ /dev/null
@@ -1,53 +0,0 @@
-====
----- QUERY: TPCDS-Q47
-with v1 as (
- select i_category, i_brand,
-        s_store_name, s_company_name,
-        d_year, d_moy,
-        sum(ss_sales_price) sum_sales,
-        avg(sum(ss_sales_price)) over
-          (partition by i_category, i_brand,
-                     s_store_name, s_company_name, d_year)
-          avg_monthly_sales,
-        rank() over
-          (partition by i_category, i_brand,
-                     s_store_name, s_company_name
-           order by d_year, d_moy) rn
- from item, store_sales, date_dim, store
- where ss_item_sk = i_item_sk and
-       ss_sold_date_sk = d_date_sk and
-       ss_store_sk = s_store_sk and
-       (
-         d_year = 2000 or
-         ( d_year = 2000-1 and d_moy =12) or
-         ( d_year = 2000+1 and d_moy =1)
-       )
- group by i_category, i_brand,
-          s_store_name, s_company_name,
-          d_year, d_moy),
- v2 as(
- select v1.i_category, v1.i_brand
-        ,v1.d_year
-        ,round(v1.avg_monthly_sales, 2) avg_monthly_sales
-        ,round(v1.sum_sales, 2) sum_sales, round(v1_lag.sum_sales, 2) psum
-        ,round(v1_lead.sum_sales, 2) nsum
- from v1, v1 v1_lag, v1 v1_lead
- where v1.i_category = v1_lag.i_category and
-       v1.i_category = v1_lead.i_category and
-       v1.i_brand = v1_lag.i_brand and
-       v1.i_brand = v1_lead.i_brand and
-       v1.s_store_name = v1_lag.s_store_name and
-       v1.s_store_name = v1_lead.s_store_name and
-       v1.s_company_name = v1_lag.s_company_name and
-       v1.s_company_name = v1_lead.s_company_name and
-       v1.rn = v1_lag.rn + 1 and
-       v1.rn = v1_lead.rn - 1)
- select * from ( select  *
- from v2
- where  d_year = 2000 and
-        avg_monthly_sales > 0 and
-        case when avg_monthly_sales > 0 then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
- order by sum_sales - avg_monthly_sales, d_year
- limit 100
-) as v3;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q52.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q52.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q52.test
deleted file mode 100644
index c3a252a..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q52.test
+++ /dev/null
@@ -1,28 +0,0 @@
-====
----- QUERY: TPCDS-Q52
-select
-  dt.d_year,
-  item.i_brand_id brand_id,
-  item.i_brand brand,
-  round(sum(ss_ext_sales_price), 2) ext_price
-from
-  date_dim dt,
-  store_sales,
-  item
-where
-  dt.d_date_sk = store_sales.ss_sold_date_sk
-  and store_sales.ss_item_sk = item.i_item_sk
-  and item.i_manager_id = 1
-  and dt.d_moy = 12
-  and dt.d_year = 1998
-  and ss_sold_date_sk between 2451149 and 2451179 -- added for partition pruning
-group by
-  dt.d_year,
-  item.i_brand,
-  item.i_brand_id
-order by
-  dt.d_year,
-  ext_price desc,
-  brand_id
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q53.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q53.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q53.test
deleted file mode 100644
index a3ac8e7..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q53.test
+++ /dev/null
@@ -1,38 +0,0 @@
-====
----- QUERY: TPCDS-Q53
-select
-  *
-from
-  (select
-    i_manufact_id,
-    round(sum(ss_sales_price), 2) sum_sales
-    -- avg(sum(ss_sales_price)) over (partition by i_manufact_id) avg_quarterly_sales
-  from
-    item,
-    store_sales,
-    date_dim,
-    store
-  where
-    ss_item_sk = i_item_sk
-    and ss_sold_date_sk = d_date_sk
-    and ss_store_sk = s_store_sk
-    and d_month_seq in (1212, 1212 + 1, 1212 + 2, 1212 + 3, 1212 + 4, 1212 + 5, 1212 + 6, 1212 + 7, 1212 + 8, 1212 + 9, 1212 + 10, 1212 + 11)
-    and ((i_category in ('Books', 'Children', 'Electronics')
-      and i_class in ('personal', 'portable', 'reference', 'self-help')
-      and i_brand in ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9'))
-    or (i_category in ('Women', 'Music', 'Men')
-      and i_class in ('accessories', 'classical', 'fragrances', 'pants')
-      and i_brand in ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
-    and ss_sold_date_sk between 2451911 and 2452275 -- partition key filter
-  group by
-    i_manufact_id,
-    d_qoy
-  ) tmp1
--- where
---   case when avg_quarterly_sales > 0 then abs (sum_sales - avg_quarterly_sales) / avg_quarterly_sales else null end > 0.1
-order by
-  -- avg_quarterly_sales,
-  sum_sales,
-  i_manufact_id
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q55.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q55.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q55.test
deleted file mode 100644
index 15223c5..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q55.test
+++ /dev/null
@@ -1,25 +0,0 @@
-====
----- QUERY: TPCDS-Q55
-select
-  i_brand_id brand_id,
-  i_brand brand,
-  round(sum(ss_ext_sales_price), 2) ext_price
-from
-  date_dim,
-  store_sales,
-  item
-where
-  d_date_sk = ss_sold_date_sk
-  and ss_item_sk = i_item_sk
-  and i_manager_id = 36
-  and d_moy = 12
-  and d_year = 2001
-  and ss_sold_date_sk between 2452245 and 2452275 -- partition key filter
-group by
-  i_brand,
-  i_brand_id
-order by
-  ext_price desc,
-  i_brand_id
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q59.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q59.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q59.test
deleted file mode 100644
index e4e3afb..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q59.test
+++ /dev/null
@@ -1,84 +0,0 @@
-====
----- QUERY: TPCDS-Q59
-with
-  wss as
-  (select
-    d_week_seq,
-    ss_store_sk,
-    round(sum(case when (d_day_name = 'Sunday') then ss_sales_price else null end), 2) sun_sales,
-    round(sum(case when (d_day_name = 'Monday') then ss_sales_price else null end), 2) mon_sales,
-    round(sum(case when (d_day_name = 'Tuesday') then ss_sales_price else null end), 2) tue_sales,
-    round(sum(case when (d_day_name = 'Wednesday') then ss_sales_price else null end), 2) wed_sales,
-    round(sum(case when (d_day_name = 'Thursday') then ss_sales_price else null end), 2) thu_sales,
-    round(sum(case when (d_day_name = 'Friday') then ss_sales_price else null end), 2) fri_sales,
-    round(sum(case when (d_day_name = 'Saturday') then ss_sales_price else null end), 2) sat_sales
-  from
-    store_sales,
-    date_dim
-  where
-    d_date_sk = ss_sold_date_sk
-  group by
-    d_week_seq,
-    ss_store_sk
-  )
-select
-  s_store_name1,
-  s_store_id1,
-  d_week_seq1,
-  sun_sales1 / sun_sales2,
-  mon_sales1 / mon_sales2,
-  tue_sales1 / tue_sales2,
-  wed_sales1 / wed_sales2,
-  thu_sales1 / thu_sales2,
-  fri_sales1 / fri_sales2,
-  sat_sales1 / sat_sales2
-from
-  (select
-    s_store_name s_store_name1,
-    wss.d_week_seq d_week_seq1,
-    s_store_id s_store_id1,
-    sun_sales sun_sales1,
-    mon_sales mon_sales1,
-    tue_sales tue_sales1,
-    wed_sales wed_sales1,
-    thu_sales thu_sales1,
-    fri_sales fri_sales1,
-    sat_sales sat_sales1
-  from
-    wss,
-    store,
-    date_dim d
-  where
-    d.d_week_seq = wss.d_week_seq
-    and ss_store_sk = s_store_sk
-    and d_month_seq between 1185 and 1185 + 11
-  ) y,
-  (select
-    s_store_name s_store_name2,
-    wss.d_week_seq d_week_seq2,
-    s_store_id s_store_id2,
-    sun_sales sun_sales2,
-    mon_sales mon_sales2,
-    tue_sales tue_sales2,
-    wed_sales wed_sales2,
-    thu_sales thu_sales2,
-    fri_sales fri_sales2,
-    sat_sales sat_sales2
-  from
-    wss,
-    store,
-    date_dim d
-  where
-    d.d_week_seq = wss.d_week_seq
-    and ss_store_sk = s_store_sk
-    and d_month_seq between 1185 + 12 and 1185 + 23
-  ) x
-where
-  s_store_id1 = s_store_id2
-  and d_week_seq1 = d_week_seq2 - 52
-order by
-  s_store_name1,
-  s_store_id1,
-  d_week_seq1
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q6.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q6.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q6.test
deleted file mode 100644
index 82e3f66..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q6.test
+++ /dev/null
@@ -1,28 +0,0 @@
-====
----- QUERY: TPCDS-Q6
-select * from (
- select  a.ca_state state, count(*) cnt
- from customer_address a
-     ,customer c
-     ,store_sales s
-     ,date_dim d
-     ,item i
- where
-        a.ca_address_sk = c.c_current_addr_sk
-        and c.c_customer_sk = s.ss_customer_sk
-        and s.ss_sold_date_sk = d.d_date_sk
-        and s.ss_item_sk = i.i_item_sk
-        and d.d_month_seq =
-             (select distinct (d_month_seq)
-              from date_dim
-               where d_year = 1999
-                and d_moy = 1
-               limit 1)
-        and i.i_current_price > 1.2 *
-             (select round(avg(j.i_current_price), 2)
-             from item j
-             where j.i_category = i.i_category)
- group by a.ca_state
- having count(*) >= 10
- order by cnt limit 100) as t;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q61.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q61.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q61.test
deleted file mode 100644
index c31e167..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q61.test
+++ /dev/null
@@ -1,43 +0,0 @@
-====
----- QUERY: TPCDS-Q61
-select promotions,total,cast(promotions as DOUBLE)/cast(total as DOUBLE)*100
-from
-  (select round(sum(ss_ext_sales_price), 2) promotions
-   from  store_sales
-        ,store
-        ,promotion
-        ,date_dim
-        ,customer
-        ,customer_address
-        ,item
-   where ss_sold_date_sk = d_date_sk
-   and   ss_store_sk = s_store_sk
-   and   ss_promo_sk = p_promo_sk
-   and   ss_customer_sk= c_customer_sk
-   and   ca_address_sk = c_current_addr_sk
-   and   ss_item_sk = i_item_sk
-   and   ca_gmt_offset = -5
-   and   i_category = 'Books'
-   and   (p_channel_dmail = 'Y' or p_channel_email = 'Y' or p_channel_tv = 'Y')
-   and   s_gmt_offset = -5
-   and   d_year = 2000
-   and   d_moy  = 11) promotional_sales,
-  (select round(sum(ss_ext_sales_price), 2) total
-   from  store_sales
-        ,store
-        ,date_dim
-        ,customer
-        ,customer_address
-        ,item
-   where ss_sold_date_sk = d_date_sk
-   and   ss_store_sk = s_store_sk
-   and   ss_customer_sk= c_customer_sk
-   and   ca_address_sk = c_current_addr_sk
-   and   ss_item_sk = i_item_sk
-   and   ca_gmt_offset = -5
-   and   i_category = 'Books'
-   and   s_gmt_offset = -5
-   and   d_year = 2000
-   and   d_moy  = 11) all_sales
-order by promotions, total;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q63.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q63.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q63.test
deleted file mode 100644
index 387db25..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q63.test
+++ /dev/null
@@ -1,38 +0,0 @@
-====
----- QUERY: TPCDS-Q63
-select
-  *
-from
-  (select
-    i_manager_id,
-    round(sum(ss_sales_price), 2) sum_sales,
-    round(avg(sum(ss_sales_price)) over (partition by i_manager_id), 2) avg_monthly_sales
-  from
-    item,
-    store_sales,
-    date_dim,
-    store
-  where
-    ss_item_sk = i_item_sk
-    and ss_sold_date_sk = d_date_sk
-    and ss_store_sk = s_store_sk
-    and d_month_seq in (1212, 1212 + 1, 1212 + 2, 1212 + 3, 1212 + 4, 1212 + 5, 1212 + 6, 1212 + 7, 1212 + 8, 1212 + 9, 1212 + 10, 1212 + 11)
-    and ((i_category in ('Books', 'Children', 'Electronics')
-      and i_class in ('personal', 'portable', 'refernece', 'self-help')
-      and i_brand in ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9'))
-    or (i_category in ('Women', 'Music', 'Men')
-      and i_class in ('accessories', 'classical', 'fragrances', 'pants')
-      and i_brand in ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
-    and ss_sold_date_sk between 2451911 and 2452275  -- partition key filter
-  group by
-    i_manager_id,
-    d_moy
-  ) tmp1
-where
-case when avg_monthly_sales > 0 then abs (sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
-order by
-  i_manager_id,
-  avg_monthly_sales,
-  sum_sales
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q65.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q65.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q65.test
deleted file mode 100644
index e1d3af0..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q65.test
+++ /dev/null
@@ -1,63 +0,0 @@
-====
----- QUERY: TPCDS-Q65
-select
-  s_store_name,
-  i_item_desc,
-  sc.revenue,
-  i_current_price,
-  i_wholesale_cost,
-  i_brand
-from
-  store,
-  item,
-  (select
-    ss_store_sk,
-    round(avg(revenue), 2) as ave
-  from
-    (select
-      ss_store_sk,
-      ss_item_sk,
-      round(sum(ss_sales_price), 2) as revenue
-    from
-      store_sales,
-      date_dim
-    where
-      ss_sold_date_sk = d_date_sk
-      and d_month_seq between 1212 and 1212 + 11
-      and ss_sold_date_sk between 2451911 and 2452275  -- partition key filter
-    group by
-      ss_store_sk,
-      ss_item_sk
-    ) sa
-  group by
-    ss_store_sk
-  ) sb,
-  (select
-    ss_store_sk,
-    ss_item_sk,
-    round(sum(ss_sales_price), 2) as revenue
-  from
-    store_sales,
-    date_dim
-  where
-    ss_sold_date_sk = d_date_sk
-    and d_month_seq between 1212 and 1212 + 11
-    and ss_sold_date_sk between 2451911 and 2452275  -- partition key filter
-  group by
-    ss_store_sk,
-    ss_item_sk
-  ) sc
-where
-  sb.ss_store_sk = sc.ss_store_sk
-  and sc.revenue <= 0.1 * sb.ave
-  and s_store_sk = sc.ss_store_sk
-  and i_item_sk = sc.ss_item_sk
-order by
-  s_store_name,
-  i_item_desc,
-  sc.revenue, -- for consistent ordering of results
-  i_current_price, -- for consistent ordering of results
-  i_wholesale_cost, -- for consistent ordering of results
-  i_brand -- for consistent ordering of results
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q68.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q68.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q68.test
deleted file mode 100644
index 2e0f994..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q68.test
+++ /dev/null
@@ -1,62 +0,0 @@
-====
----- QUERY: TPCDS-Q68
-select
-  c_last_name,
-  c_first_name,
-  ca_city,
-  bought_city,
-  ss_ticket_number,
-  extended_price,
-  extended_tax,
-  list_price
-from
-  (select
-    ss_ticket_number,
-    ss_customer_sk,
-    ca_city bought_city,
-    round(sum(ss_ext_sales_price), 2) extended_price,
-    round(sum(ss_ext_list_price), 2) list_price,
-    round(sum(ss_ext_tax), 2) extended_tax
-  from
-    store_sales,
-    date_dim,
-    store,
-    household_demographics,
-    customer_address
-  where
-    store_sales.ss_sold_date_sk = date_dim.d_date_sk
-    and store_sales.ss_store_sk = store.s_store_sk
-    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
-    and store_sales.ss_addr_sk = customer_address.ca_address_sk
-    -- and date_dim.d_dom between 1 and 2
-    and (household_demographics.hd_dep_count = 5
-      or household_demographics.hd_vehicle_count = 3)
-    -- and date_dim.d_year in (1999, 1999 + 1, 1999 + 2)
-    and store.s_city in ('Midway', 'Fairview')
-    -- partition key filter
-    -- and ss_sold_date_sk in (2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331,
-    --                         2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485,
-    --                         2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666,
-    --                         2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820,
-    --                         2451850, 2451851, 2451880, 2451881, 2451911, 2451912, 2451942, 2451943, 2451970, 2451971, 2452001,
-    --                         2452002, 2452031, 2452032, 2452062, 2452063, 2452092, 2452093, 2452123, 2452124, 2452154, 2452155,
-    --                         2452184, 2452185, 2452215, 2452216, 2452245, 2452246)
-    and ss_sold_date_sk between 2451180 and 2451269 -- partition key filter (3 months)
-    and d_date between '1999-01-01' and '1999-03-31'
-  group by
-    ss_ticket_number,
-    ss_customer_sk,
-    ss_addr_sk,
-    ca_city
-  ) dn,
-  customer,
-  customer_address current_addr
-where
-  ss_customer_sk = c_customer_sk
-  and customer.c_current_addr_sk = current_addr.ca_address_sk
-  and current_addr.ca_city <> bought_city
-order by
-  c_last_name,
-  ss_ticket_number
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q7.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q7.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q7.test
deleted file mode 100644
index 0130d4c..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q7.test
+++ /dev/null
@@ -1,32 +0,0 @@
-====
----- QUERY: TPCDS-Q7
-select
-  i_item_id,
-  round(avg(ss_quantity), 2) agg1,
-  round(avg(ss_list_price), 2) agg2,
-  round(avg(ss_coupon_amt), 2) agg3,
-  round(avg(ss_sales_price), 1) agg4
-from
-  store_sales,
-  customer_demographics,
-  date_dim,
-  item,
-  promotion
-where
-  ss_sold_date_sk = d_date_sk
-  and ss_item_sk = i_item_sk
-  and ss_cdemo_sk = cd_demo_sk
-  and ss_promo_sk = p_promo_sk
-  and cd_gender = 'F'
-  and cd_marital_status = 'W'
-  and cd_education_status = 'Primary'
-  and (p_channel_email = 'N'
-    or p_channel_event = 'N')
-  and d_year = 1998
-  and ss_sold_date_sk between 2450815 and 2451179 -- partition key filter
-group by
-  i_item_id
-order by
-  i_item_id
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q73.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q73.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q73.test
deleted file mode 100644
index 66e2a8f..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q73.test
+++ /dev/null
@@ -1,51 +0,0 @@
-====
----- QUERY: TPCDS-Q73
-select
-  c_last_name,
-  c_first_name,
-  c_salutation,
-  c_preferred_cust_flag,
-  ss_ticket_number,
-  cnt
-from
-  (select
-    ss_ticket_number,
-    ss_customer_sk,
-    count(*) cnt
-  from
-    store_sales,
-    date_dim,
-    store,
-    household_demographics
-  where
-    store_sales.ss_sold_date_sk = date_dim.d_date_sk
-    and store_sales.ss_store_sk = store.s_store_sk
-    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
-    -- and date_dim.d_dom between 1 and 2
-    and (household_demographics.hd_buy_potential = '>10000'
-      or household_demographics.hd_buy_potential = 'unknown')
-    and household_demographics.hd_vehicle_count > 0
-    and case when household_demographics.hd_vehicle_count > 0 then household_demographics.hd_dep_count / household_demographics.hd_vehicle_count else null end > 1
-    -- and date_dim.d_year in (1998, 1998 + 1, 1998 + 2)
-    and store.s_county in ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County')
-    -- partition key filter
-    -- and ss_sold_date_sk in (2450816, 2450846, 2450847, 2450874, 2450875, 2450905, 2450906, 2450935, 2450936, 2450966, 2450967,
-    --                         2450996, 2450997, 2451027, 2451028, 2451058, 2451059, 2451088, 2451089, 2451119, 2451120, 2451149,
-    --                         2451150, 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301,
-    --                         2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484,
-    --                         2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637,
-    --                         2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819,
-    --                         2451820, 2451850, 2451851, 2451880, 2451881)
-    and ss_sold_date_sk between 2451180 and 2451269 -- partition key filter (3 months)
-  group by
-    ss_ticket_number,
-    ss_customer_sk
-  ) dj,
-  customer
-where
-  ss_customer_sk = c_customer_sk
-  and cnt between 1 and 5
-order by
-  cnt desc
-limit 1000;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q79.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q79.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q79.test
deleted file mode 100644
index fcaca50..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q79.test
+++ /dev/null
@@ -1,61 +0,0 @@
-====
----- QUERY: TPCDS-Q79
-select
-  c_last_name,
-  c_first_name,
-  substr(s_city, 1, 30),
-  ss_ticket_number,
-  amt,
-  profit
-from
-  (select
-    ss_ticket_number,
-    ss_customer_sk,
-    store.s_city,
-    round(sum(ss_coupon_amt), 2) amt,
-    round(sum(ss_net_profit), 2) profit
-  from
-    store_sales,
-    date_dim,
-    store,
-    household_demographics
-  where
-    store_sales.ss_sold_date_sk = date_dim.d_date_sk
-    and store_sales.ss_store_sk = store.s_store_sk
-    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
-    and (household_demographics.hd_dep_count = 8
-      or household_demographics.hd_vehicle_count > 0)
-    -- and date_dim.d_dow = 1
-    -- and date_dim.d_year in (1998, 1998 + 1, 1998 + 2)
-    and store.s_number_employees between 200 and 295
-    -- partition key filter
-    -- and ss_sold_date_sk in (2450819, 2450826, 2450833, 2450840, 2450847, 2450854, 2450861, 2450868, 2450875, 2450882, 2450889,
-    -- 2450896, 2450903, 2450910, 2450917, 2450924, 2450931, 2450938, 2450945, 2450952, 2450959, 2450966, 2450973, 2450980, 2450987,
-    -- 2450994, 2451001, 2451008, 2451015, 2451022, 2451029, 2451036, 2451043, 2451050, 2451057, 2451064, 2451071, 2451078, 2451085,
-    -- 2451092, 2451099, 2451106, 2451113, 2451120, 2451127, 2451134, 2451141, 2451148, 2451155, 2451162, 2451169, 2451176, 2451183,
-    -- 2451190, 2451197, 2451204, 2451211, 2451218, 2451225, 2451232, 2451239, 2451246, 2451253, 2451260, 2451267, 2451274, 2451281,
-    -- 2451288, 2451295, 2451302, 2451309, 2451316, 2451323, 2451330, 2451337, 2451344, 2451351, 2451358, 2451365, 2451372, 2451379,
-    -- 2451386, 2451393, 2451400, 2451407, 2451414, 2451421, 2451428, 2451435, 2451442, 2451449, 2451456, 2451463, 2451470, 2451477,
-    -- 2451484, 2451491, 2451498, 2451505, 2451512, 2451519, 2451526, 2451533, 2451540, 2451547, 2451554, 2451561, 2451568, 2451575,
-    -- 2451582, 2451589, 2451596, 2451603, 2451610, 2451617, 2451624, 2451631, 2451638, 2451645, 2451652, 2451659, 2451666, 2451673,
-    -- 2451680, 2451687, 2451694, 2451701, 2451708, 2451715, 2451722, 2451729, 2451736, 2451743, 2451750, 2451757, 2451764, 2451771,
-    -- 2451778, 2451785, 2451792, 2451799, 2451806, 2451813, 2451820, 2451827, 2451834, 2451841, 2451848, 2451855, 2451862, 2451869,
-    -- 2451876, 2451883, 2451890, 2451897, 2451904)
-    and d_date between '1999-01-01' and '1999-03-31'
-    and ss_sold_date_sk between 2451180 and 2451269  -- partition key filter
-  group by
-    ss_ticket_number,
-    ss_customer_sk,
-    ss_addr_sk,
-    store.s_city
-  ) ms,
-  customer
-where
-  ss_customer_sk = c_customer_sk
-order by
-  c_last_name,
-  c_first_name,
-  substr(s_city, 1, 30),
-  profit
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q8.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q8.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q8.test
deleted file mode 100644
index be99b2f..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q8.test
+++ /dev/null
@@ -1,71 +0,0 @@
-====
----- QUERY: TPCDS-Q8
-select
-  s_store_name,
-  round(sum(ss_net_profit), 2)
-from
-  store_sales
-  join store on (store_sales.ss_store_sk = store.s_store_sk)
-  join
-  (select
-    a.ca_zip
-  from
-    (select
-      substr(ca_zip, 1, 5) ca_zip,
-      count( *) cnt
-    from
-      customer_address
-      join  customer on (customer_address.ca_address_sk = customer.c_current_addr_sk)
-    where
-      c_preferred_cust_flag = 'Y'
-    group by
-      ca_zip
-    having
-      count(*) > 10
-    ) a
-    left semi join
-    (select
-      substr(ca_zip, 1, 5) ca_zip
-    from
-      customer_address
-    where
-      substr(ca_zip, 1, 5) in ('89436', '30868', '65085', '22977', '83927', '77557', '58429', '40697', '80614', '10502', '32779',
-      '91137', '61265', '98294', '17921', '18427', '21203', '59362', '87291', '84093', '21505', '17184', '10866', '67898', '25797',
-      '28055', '18377', '80332', '74535', '21757', '29742', '90885', '29898', '17819', '40811', '25990', '47513', '89531', '91068',
-      '10391', '18846', '99223', '82637', '41368', '83658', '86199', '81625', '26696', '89338', '88425', '32200', '81427', '19053',
-      '77471', '36610', '99823', '43276', '41249', '48584', '83550', '82276', '18842', '78890', '14090', '38123', '40936', '34425',
-      '19850', '43286', '80072', '79188', '54191', '11395', '50497', '84861', '90733', '21068', '57666', '37119', '25004', '57835',
-      '70067', '62878', '95806', '19303', '18840', '19124', '29785', '16737', '16022', '49613', '89977', '68310', '60069', '98360',
-      '48649', '39050', '41793', '25002', '27413', '39736', '47208', '16515', '94808', '57648', '15009', '80015', '42961', '63982',
-      '21744', '71853', '81087', '67468', '34175', '64008', '20261', '11201', '51799', '48043', '45645', '61163', '48375', '36447',
-      '57042', '21218', '41100', '89951', '22745', '35851', '83326', '61125', '78298', '80752', '49858', '52940', '96976', '63792',
-      '11376', '53582', '18717', '90226', '50530', '94203', '99447', '27670', '96577', '57856', '56372', '16165', '23427', '54561',
-      '28806', '44439', '22926', '30123', '61451', '92397', '56979', '92309', '70873', '13355', '21801', '46346', '37562', '56458',
-      '28286', '47306', '99555', '69399', '26234', '47546', '49661', '88601', '35943', '39936', '25632', '24611', '44166', '56648',
-      '30379', '59785', '11110', '14329', '93815', '52226', '71381', '13842', '25612', '63294', '14664', '21077', '82626', '18799',
-      '60915', '81020', '56447', '76619', '11433', '13414', '42548', '92713', '70467', '30884', '47484', '16072', '38936', '13036',
-      '88376', '45539', '35901', '19506', '65690', '73957', '71850', '49231', '14276', '20005', '18384', '76615', '11635', '38177',
-      '55607', '41369', '95447', '58581', '58149', '91946', '33790', '76232', '75692', '95464', '22246', '51061', '56692', '53121',
-      '77209', '15482', '10688', '14868', '45907', '73520', '72666', '25734', '17959', '24677', '66446', '94627', '53535', '15560',
-      '41967', '69297', '11929', '59403', '33283', '52232', '57350', '43933', '40921', '36635', '10827', '71286', '19736', '80619',
-      '25251', '95042', '15526', '36496', '55854', '49124', '81980', '35375', '49157', '63512', '28944', '14946', '36503', '54010',
-      '18767', '23969', '43905', '66979', '33113', '21286', '58471', '59080', '13395', '79144', '70373', '67031', '38360', '26705',
-      '50906', '52406', '26066', '73146', '15884', '31897', '30045', '61068', '45550', '92454', '13376', '14354', '19770', '22928',
-      '97790', '50723', '46081', '30202', '14410', '20223', '88500', '67298', '13261', '14172', '81410', '93578', '83583', '46047',
-      '94167', '82564', '21156', '15799', '86709', '37931', '74703', '83103', '23054', '70470', '72008', '49247', '91911', '69998',
-      '20961', '70070', '63197', '54853', '88191', '91830', '49521', '19454', '81450', '89091', '62378', '25683', '61869', '51744',
-      '36580', '85778', '36871', '48121', '28810', '83712', '45486', '67393', '26935', '42393', '20132', '55349', '86057', '21309',
-      '80218', '10094', '11357', '48819', '39734', '40758', '30432', '21204', '29467', '30214', '61024', '55307', '74621', '11622',
-      '68908', '33032', '52868', '99194', '99900', '84936', '69036', '99149', '45013', '32895', '59004', '32322', '14933', '32936',
-      '33562', '72550', '27385', '58049', '58200', '16808', '21360', '32961', '18586', '79307', '15492')
-    ) b
-  on (a.ca_zip = b.ca_zip)
-  ) v1 on (substr(store.s_zip, 1, 2) = substr(v1.ca_zip, 1, 2))
-where
-  ss_sold_date_sk between 2452276 and 2452366
-group by
-  s_store_name
-order by
-  s_store_name
-limit 100;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q88.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q88.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q88.test
deleted file mode 100644
index bb2beb8..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q88.test
+++ /dev/null
@@ -1,93 +0,0 @@
-====
----- QUERY: TPCDS-Q88
-select  *
-from
- (select count(*) h8_30_to_9
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 8
-     and time_dim.t_minute >= 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s1,
- (select count(*) h9_to_9_30
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 9
-     and time_dim.t_minute < 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s2,
- (select count(*) h9_30_to_10
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 9
-     and time_dim.t_minute >= 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s3,
- (select count(*) h10_to_10_30
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 10
-     and time_dim.t_minute < 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s4,
- (select count(*) h10_30_to_11
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 10
-     and time_dim.t_minute >= 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s5,
- (select count(*) h11_to_11_30
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 11
-     and time_dim.t_minute < 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s6,
- (select count(*) h11_30_to_12
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 11
-     and time_dim.t_minute >= 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s7,
- (select count(*) h12_to_12_30
- from store_sales, household_demographics , time_dim, store
- where ss_sold_time_sk = time_dim.t_time_sk
-     and ss_hdemo_sk = household_demographics.hd_demo_sk
-     and ss_store_sk = s_store_sk
-     and time_dim.t_hour = 12
-     and time_dim.t_minute < 30
-     and ((household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2) or
-          (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or
-          (household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2))
-     and store.s_store_name = 'ese') s8;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q89.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q89.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q89.test
deleted file mode 100644
index 6677b07..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q89.test
+++ /dev/null
@@ -1,33 +0,0 @@
-====
----- QUERY: TPCDS-Q89
-/* Modifications: Added Partition Key filter because Impala does not do dynamic partition
-   pruning.*/
-select * from (select i_category, i_class, i_brand, s_store_name, s_company_name
-	       d_moy, round(sum_sales, 2) sum_sales,
-	       round(avg_monthly_sales, 2) avg_monthly_sales
-from (
-select i_category, i_class, i_brand,
-       s_store_name, s_company_name,
-       d_moy,
-       sum(ss_sales_price) sum_sales,
-       avg(sum(ss_sales_price)) over
-         (partition by i_category, i_brand, s_store_name, s_company_name)
-         avg_monthly_sales
-from item, store_sales, date_dim, store
-where ss_item_sk = i_item_sk and
-      ss_sold_date_sk = d_date_sk and
-      ss_store_sk = s_store_sk and
-      d_year in (2000) and
-        ((i_category in ('Children','Music','Home') and
-          i_class in ('toddlers','pop','lighting')
-         )
-      or (i_category in ('Jewelry','Books','Sports') and
-          i_class in ('costume','travel','football')
-        ))
-      and ss_sold_date_sk between 2451545 and 2451910  -- partition key filter
-group by i_category, i_class, i_brand,
-         s_store_name, s_company_name, d_moy) tmp1
-where case when (avg_monthly_sales <> 0) then (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) else null end > 0.1
-order by sum_sales - avg_monthly_sales, s_store_name
-limit 100) tmp2;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q96.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q96.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q96.test
deleted file mode 100644
index 1687bc4..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q96.test
+++ /dev/null
@@ -1,17 +0,0 @@
-====
----- QUERY: TPCDS-Q96
-SELECT
-  COUNT(*) AS total
-FROM store_sales ss
-JOIN time_dim td
-  ON (ss.ss_sold_time_sk = td.t_time_sk)
-JOIN household_demographics hd
-  ON (ss.ss_hdemo_sk = hd.hd_demo_sk)
-JOIN store s
-  ON (ss.ss_store_sk = s.s_store_sk)
-WHERE
-  td.t_hour = 8
-  AND td.t_minute >= 30
-  AND hd.hd_dep_count = 5
-  AND s.s_store_name = 'ese';
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpcds/queries/tpcds-kudu-q98.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpcds/queries/tpcds-kudu-q98.test b/testdata/workloads/tpcds/queries/tpcds-kudu-q98.test
deleted file mode 100644
index fcd2081..0000000
--- a/testdata/workloads/tpcds/queries/tpcds-kudu-q98.test
+++ /dev/null
@@ -1,34 +0,0 @@
-====
----- QUERY: TPCDS-Q98
-select
-  i_item_desc,
-  i_category,
-  i_class,
-  i_current_price,
-  round(sum(ss_ext_sales_price), 2) as itemrevenue,
-  round(sum(ss_ext_sales_price)*100/ sum(sum(ss_ext_sales_price))
-  over (partition by i_class), 2) as revenueratio
-from
-  store_sales,
-  item,
-  date_dim
-where
-  ss_item_sk = i_item_sk
-  and i_category in ('Jewelry', 'Sports', 'Books')
-  and ss_sold_date_sk = d_date_sk
-  and ss_sold_date_sk between 2451911 and 2451941
-  and d_date between '2001-01-01' and '2001-01-31' -- original uses interval and the
-group by
-  i_item_id,
-  i_item_desc,
-  i_category,
-  i_class,
-  i_current_price
-order by
-  i_category,
-  i_class,
-  i_item_id,
-  i_item_desc,
-  revenueratio
-limit 1000;
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q1.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q1.test b/testdata/workloads/tpch/queries/tpch-kudu-q1.test
deleted file mode 100644
index ffbeccc..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q1.test
+++ /dev/null
@@ -1,32 +0,0 @@
-====
----- QUERY: TPCH-Q1
-# Q1 - Pricing Summary Report Query
-select
-  l_returnflag,
-  l_linestatus,
-  round(sum(l_quantity), 1) as sum_qty,
-  round(sum(l_extendedprice), 1) as sum_base_price,
-  round(sum(l_extendedprice * (1 - l_discount)), 1) as sum_disc_price,
-  round(sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)), 1) as sum_charge,
-  round(avg(l_quantity), 1) as avg_qty,
-  round(avg(l_extendedprice), 1) as avg_price,
-  round(avg(l_discount), 1) as avg_disc,
-  count(*) as count_order
-from
-  lineitem
-where
-  l_shipdate <= '1998-09-02'
-group by
-  l_returnflag,
-  l_linestatus
-order by
-  l_returnflag,
-  l_linestatus
----- RESULTS
-'A','F',37734107.0,56586554400.7,53758257134.9,55909065222.8,25.5,38273.1,0.0,1478493
-'N','F',991417.0,1487504710.4,1413082168.1,1469649223.2,25.5,38284.5,0.1,38854
-'N','O',74476040.0,111701729697.7,106118230307.6,110367043872.5,25.5,38249.1,0.0,2920374
-'R','F',37719753.0,56568041380.9,53741292684.6,55889619119.8,25.5,38250.9,0.1,1478870
----- TYPES
-string, string, double, double, double, double, double, double, double, bigint
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q10.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q10.test b/testdata/workloads/tpch/queries/tpch-kudu-q10.test
deleted file mode 100644
index be52a31..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q10.test
+++ /dev/null
@@ -1,60 +0,0 @@
-====
----- QUERY: TPCH-Q10
-# Q10 - Returned Item Reporting Query
-# Converted select from multiple tables to joins
-select
-  c_custkey,
-  c_name,
-  round(sum(l_extendedprice * (1 - l_discount)), 1) as revenue,
-  cast (c_acctbal as bigint),
-  n_name,
-  c_address,
-  c_phone,
-  c_comment
-from
-  customer,
-  orders,
-  lineitem,
-  nation
-where
-  c_custkey = o_custkey
-  and l_orderkey = o_orderkey
-  and o_orderdate >= '1993-10-01'
-  and o_orderdate < '1994-01-01'
-  and l_returnflag = 'R'
-  and c_nationkey = n_nationkey
-group by
-  c_custkey,
-  c_name,
-  cast(c_acctbal as bigint),
-  c_phone,
-  n_name,
-  c_address,
-  c_comment
-order by
-  revenue desc
-limit 20
----- RESULTS
-57040,'Customer#000057040',734235.2,632,'JAPAN','Eioyzjf4pp','22-895-641-3466','sits. slyly regular requests sleep alongside of the regular inst'
-143347,'Customer#000143347',721002.7,2557,'EGYPT','1aReFYv,Kw4','14-742-935-3718','ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re'
-60838,'Customer#000060838',679127.3,2454,'BRAZIL','64EaJ5vMAHWJlBOxJklpNc2RJiWE','12-913-494-9813',' need to boost against the slyly regular account'
-101998,'Customer#000101998',637029.6,3790,'UNITED KINGDOM','01c9CILnNtfOQYmZj','33-593-865-6378','ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites'
-125341,'Customer#000125341',633508.1,4983,'GERMANY','S29ODD6bceU8QSuuEJznkNaK','17-582-695-5962','arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca'
-25501,'Customer#000025501',620269.8,7725,'ETHIOPIA','  W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ','15-874-808-6793','he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina'
-115831,'Customer#000115831',596423.9,5098,'FRANCE','rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc','16-715-386-3788','l somas sleep. furiously final deposits wake blithely regular pinto b'
-84223,'Customer#000084223',594998.0,528,'UNITED KINGDOM','nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA','33-442-824-8191',' slyly final deposits haggle regular, pending dependencies. pending escapades wake '
-54289,'Customer#000054289',585603.4,5583,'IRAN','vXCxoCsU0Bad5JQI ,oobkZ','20-834-292-4707','ely special foxes are quickly finally ironic p'
-39922,'Customer#000039922',584878.1,7321,'GERMANY','Zgy4s50l2GKN4pLDPBU8m342gIw6R','17-147-757-8036','y final requests. furiously final foxes cajole blithely special platelets. f'
-6226,'Customer#000006226',576783.8,2230,'UNITED KINGDOM','8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g,','33-657-701-3391','ending platelets along the express deposits cajole carefully final '
-922,'Customer#000000922',576767.5,3869,'GERMANY','Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq','17-945-916-9648','luffily fluffy deposits. packages c'
-147946,'Customer#000147946',576455.1,2030,'ALGERIA','iANyZHjqhyy7Ajah0pTrYyhJ','10-886-956-3143','ithely ironic deposits haggle blithely ironic requests. quickly regu'
-115640,'Customer#000115640',569341.2,6436,'ARGENTINA','Vtgfia9qI 7EpHgecU1X','11-411-543-4901','ost slyly along the patterns; pinto be'
-73606,'Customer#000073606',568656.9,1785,'JAPAN','xuR0Tro5yChDfOCrjkd2ol','22-437-653-6966','he furiously regular ideas. slowly'
-110246,'Customer#000110246',566843.0,7763,'VIETNAM','7KzflgX MDOq7sOkI','31-943-426-9837','egular deposits serve blithely above the fl'
-142549,'Customer#000142549',563537.2,5085,'INDONESIA','ChqEoK43OysjdHbtKCp6dKqjNyvvi9','19-955-562-2398','sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts.'
-146149,'Customer#000146149',557255.0,1791,'ROMANIA','s87fvzFQpU','29-744-164-6487',' of the slyly silent accounts. quickly final accounts across the '
-52528,'Customer#000052528',556397.4,551,'ARGENTINA','NFztyTOR10UOJ','11-208-192-3205',' deposits hinder. blithely pending asymptotes breach slyly regular re'
-23431,'Customer#000023431',554269.5,3381,'ROMANIA','HgiV0phqhaIa9aydNoIlb','29-915-458-2654','nusual, even instructions: furiously stealthy n'
----- TYPES
-BIGINT, STRING, DOUBLE, BIGINT, STRING, STRING, STRING, STRING
-====
\ No newline at end of file


[18/21] impala git commit: IMPALA-6654: [DOCS] Updated the Kudu/Sentry/Impala limitations

Posted by ta...@apache.org.
IMPALA-6654: [DOCS] Updated the Kudu/Sentry/Impala limitations

Change-Id: I8991d85e77c7f5075525734145291457d50a7633
Reviewed-on: http://gerrit.cloudera.org:8080/9618
Reviewed-by: Thomas Tauber-Marshall <tm...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/31d075fb
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/31d075fb
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/31d075fb

Branch: refs/heads/2.x
Commit: 31d075fb9db48211ceeac21175962f81cb672490
Parents: f301879
Author: Alex Rodoni <ar...@cloudera.com>
Authored: Tue Mar 13 17:10:19 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 docs/shared/impala_common.xml | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/31d075fb/docs/shared/impala_common.xml
----------------------------------------------------------------------
diff --git a/docs/shared/impala_common.xml b/docs/shared/impala_common.xml
index c64d18b..b4ac655 100644
--- a/docs/shared/impala_common.xml
+++ b/docs/shared/impala_common.xml
@@ -3909,11 +3909,33 @@ CREATE EXTERNAL TABLE impala_name STORED AS KUDU
       </p>
 
       <p id="kudu_sentry_limitations" rev="IMPALA-4000">
-        Access to Kudu tables must be granted to and revoked from roles as usual.
-        Only users with <codeph>ALL</codeph> privileges on <codeph>SERVER</codeph> can create external Kudu tables.
-        Currently, access to a Kudu table is <q>all or nothing</q>:
-        enforced at the table level rather than the column level, and applying to all
-        SQL operations rather than individual statements such as <codeph>INSERT</codeph>.
+        Access to Kudu tables must be granted to and revoked from roles with the
+        following considerations:
+        <ul>
+          <li>
+            Only users with the <codeph>ALL</codeph> privilege on
+              <codeph>SERVER</codeph> can create external Kudu tables.
+          </li>
+          <li>
+            The <codeph>ALL</codeph> privileges on <codeph>SERVER</codeph> is
+            required to specify the <codeph>kudu.master_addresses</codeph>
+            property in the <codeph>CREATE TABLE</codeph> statements for managed
+            tables as well as external tables.
+          </li>
+          <li>
+            Access to Kudu tables is enforced at the table level and at the
+            column level.
+          </li>
+          <li>
+            The <codeph>SELECT</codeph>- and <codeph>INSERT</codeph>-specific
+            permissions are supported.
+          </li>
+          <li>
+            The <codeph>DELETE</codeph>, <codeph>UPDATE</codeph>, and
+            <codeph>UPSERT</codeph> operations require the <codeph>ALL</codeph>
+            privilege.
+          </li>
+        </ul>
         Because non-SQL APIs can access Kudu data without going through Sentry
         authorization, currently the Sentry support is considered preliminary
         and subject to change.


[07/21] impala git commit: IMPALA-6695: Fix PyPi regex, update setuptools version

Posted by ta...@apache.org.
IMPALA-6695: Fix PyPi regex, update setuptools version

pytest-runner, which is required by kudu-python requires are more recent
version of setuptools. Adding an explicit dependency required an update
to the regular expression to parse PyPi URLs.

Change-Id: Ia67189f81a31a9a5a0ed80cd4d6661762ef427b2
Reviewed-on: http://gerrit.cloudera.org:8080/9712
Tested-by: Lars Volker <lv...@cloudera.com>
Reviewed-by: Lars Volker <lv...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/c53acc89
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/c53acc89
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/c53acc89

Branch: refs/heads/2.x
Commit: c53acc890fe36fe511d1cd3b6fed3ca343e60ff2
Parents: 7fd27db
Author: Lars Volker <lv...@cloudera.com>
Authored: Sun Mar 18 00:05:42 2018 -0700
Committer: Lars Volker <lv...@cloudera.com>
Committed: Sun Mar 18 17:43:11 2018 +0000

----------------------------------------------------------------------
 infra/python/deps/pip_download.py  | 2 +-
 infra/python/deps/requirements.txt | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/c53acc89/infra/python/deps/pip_download.py
----------------------------------------------------------------------
diff --git a/infra/python/deps/pip_download.py b/infra/python/deps/pip_download.py
index 65f55be..2e84426 100755
--- a/infra/python/deps/pip_download.py
+++ b/infra/python/deps/pip_download.py
@@ -87,7 +87,7 @@ def get_package_info(pkg_name, pkg_version):
   # downloading an extra package before running this script. Since the HTML is guaranteed
   # to be formatted according to PEP 503, this is acceptable.
   pkg_info = urlopen(url).read()
-  regex = r'<a href=\".*?packages/(.*?)#(.*?)=(.*?)\".*?>(.*?)<\/a>'
+  regex = r'<a .*?href=\".*?packages/(.*?)#(.*?)=(.*?)\".*?>(.*?)<\/a>'
   for match in re.finditer(regex, pkg_info):
     path = match.group(1)
     hash_algorithm = match.group(2)

http://git-wip-us.apache.org/repos/asf/impala/blob/c53acc89/infra/python/deps/requirements.txt
----------------------------------------------------------------------
diff --git a/infra/python/deps/requirements.txt b/infra/python/deps/requirements.txt
index 4c65d5a..29cc9ce 100644
--- a/infra/python/deps/requirements.txt
+++ b/infra/python/deps/requirements.txt
@@ -55,6 +55,7 @@ python-magic == 0.4.11
 pywebhdfs == 0.3.2
   pbr == 1.8.1
 requests == 2.7.0
+setuptools == 39.0.0
 setuptools-scm == 1.15.4
 sh == 1.11
 sqlparse == 0.1.15


[21/21] impala git commit: IMPALA-6610: Improve LDAP auth fail warning message in impala-shell

Posted by ta...@apache.org.
IMPALA-6610: Improve LDAP auth fail warning message in impala-shell

The value of LDAP password in Impala shell contains extra line break 
causes authentication failure, but the user can't detect the cause of
the failure.
I fixed the issue by adding inspection to the password for common
pitfalls and issuing a warning in the shell when authentication fails.

Change-Id: Ie570166aea62af223905b7f0124e9efb15a88ac7
Reviewed-on: http://gerrit.cloudera.org:8080/9506
Reviewed-by: Sailesh Mukil <sa...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/b99a5d97
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/b99a5d97
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/b99a5d97

Branch: refs/heads/2.x
Commit: b99a5d97b6d453ef6a5aaa0c3b085d4f215b9888
Parents: d1845f6
Author: davidxdh <xu...@zte.com.cn>
Authored: Tue Mar 6 17:11:16 2018 +0800
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Tue Mar 20 07:10:18 2018 +0000

----------------------------------------------------------------------
 shell/impala_shell.py | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/b99a5d97/shell/impala_shell.py
----------------------------------------------------------------------
diff --git a/shell/impala_shell.py b/shell/impala_shell.py
index 0401d8f..50f5487 100755
--- a/shell/impala_shell.py
+++ b/shell/impala_shell.py
@@ -815,6 +815,11 @@ class ImpalaShell(object, cmd.Cmd):
         print_to_stderr("Socket error %s: %s" % (code, e))
         self.prompt = self.DISCONNECTED_PROMPT
     except Exception, e:
+      if options.ldap_password_cmd and \
+          options.ldap_password and \
+          options.ldap_password.endswith('\n'):
+        print_to_stderr("Warning: LDAP password contains a trailing newline. "
+                      "Did you use 'echo' instead of 'echo -n'?")
       print_to_stderr("Error connecting: %s, %s" % (type(e).__name__, e))
       # A secure connection may still be open. So we explicitly close it.
       self.imp_client.close_connection()


[19/21] impala git commit: Consistently use Java 1.7 compiler.

Posted by ta...@apache.org.
Consistently use Java 1.7 compiler.

We use Java 1.7 in fe/pom.xml, where most of our Java code is. For
consistency, this updates the rest of our Maven configurations to use
the same version of Java. A change I'm working with uses
try-with-resources in HBase splitting, which is how I ran into
this.

Testing: ran core tests

Change-Id: I6cecddf367f00185a14a8b08c03456e3b756bd70
Reviewed-on: http://gerrit.cloudera.org:8080/9600
Reviewed-by: Philip Zeyliger <ph...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/d67064df
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/d67064df
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/d67064df

Branch: refs/heads/2.x
Commit: d67064dfbbfbabec0b37ca5366c942834d049cf9
Parents: 8a86154
Author: Philip Zeyliger <ph...@cloudera.com>
Authored: Mon Mar 12 21:58:56 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:23 2018 +0000

----------------------------------------------------------------------
 ext-data-source/api/pom.xml    | 4 ++--
 ext-data-source/sample/pom.xml | 4 ++--
 ext-data-source/test/pom.xml   | 4 ++--
 testdata/pom.xml               | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/d67064df/ext-data-source/api/pom.xml
----------------------------------------------------------------------
diff --git a/ext-data-source/api/pom.xml b/ext-data-source/api/pom.xml
index 9240fb1..15bfd55 100644
--- a/ext-data-source/api/pom.xml
+++ b/ext-data-source/api/pom.xml
@@ -61,8 +61,8 @@
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.3</version>
         <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
+          <source>1.7</source>
+          <target>1.7</target>
         </configuration>
       </plugin>
 

http://git-wip-us.apache.org/repos/asf/impala/blob/d67064df/ext-data-source/sample/pom.xml
----------------------------------------------------------------------
diff --git a/ext-data-source/sample/pom.xml b/ext-data-source/sample/pom.xml
index f6a8e54..c935549 100644
--- a/ext-data-source/sample/pom.xml
+++ b/ext-data-source/sample/pom.xml
@@ -66,8 +66,8 @@
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.3</version>
         <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
+          <source>1.7</source>
+          <target>1.7</target>
         </configuration>
       </plugin>
     </plugins>

http://git-wip-us.apache.org/repos/asf/impala/blob/d67064df/ext-data-source/test/pom.xml
----------------------------------------------------------------------
diff --git a/ext-data-source/test/pom.xml b/ext-data-source/test/pom.xml
index 5fdd7e9..b8e2601 100644
--- a/ext-data-source/test/pom.xml
+++ b/ext-data-source/test/pom.xml
@@ -57,8 +57,8 @@
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.3</version>
         <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
+          <source>1.7</source>
+          <target>1.7</target>
         </configuration>
       </plugin>
     </plugins>

http://git-wip-us.apache.org/repos/asf/impala/blob/d67064df/testdata/pom.xml
----------------------------------------------------------------------
diff --git a/testdata/pom.xml b/testdata/pom.xml
index ae584d9..f00da3b 100644
--- a/testdata/pom.xml
+++ b/testdata/pom.xml
@@ -123,8 +123,8 @@ under the License.
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.3</version>
         <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
+          <source>1.7</source>
+          <target>1.7</target>
         </configuration>
       </plugin>
 


[05/21] impala git commit: IMPALA-5270: Pass resolved exprs into analytic SortInfo.

Posted by ta...@apache.org.
IMPALA-5270: Pass resolved exprs into analytic SortInfo.

The bug was that the SortInfo of analytics was given
ordering exprs that were not fully resolved against their
input (e.g. inline views were not resolved).
As a result, the SortInfo logic did not materialize exprs
like rand() coming from inline views.

The fix is to pass fully resolved exprs to the analytic
SortInfo, and then the existing materialization logic
properly handles non-deterministic built-ins and UDFs.

The code around sort generation was rather convoluted
and difficult to understand. I overhauled SortInfo to
unify the different uses of it under a common codepath
After that cleanup, the fix for this issue was trivial.

Testing:
- Locally ran planner tests
- Locally ran analytic EE tests in test_queries.py
- Core/hdfs run passed

Change-Id: Id2b3f4e5e3f1fd441a63160db3c703c432fbb072
Reviewed-on: http://gerrit.cloudera.org:8080/9631
Reviewed-by: Alex Behm <al...@cloudera.com>
Tested-by: Impala Public Jenkins
Reviewed-on: http://gerrit.cloudera.org:8080/9708
Reviewed-by: Vuk Ercegovac <ve...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/c5e1f24e
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/c5e1f24e
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/c5e1f24e

Branch: refs/heads/2.x
Commit: c5e1f24ec14e1743c3fc2e332adcaec0e7aba96c
Parents: f6ad4e6
Author: Alex Behm <al...@cloudera.com>
Authored: Tue Mar 13 10:26:55 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sat Mar 17 22:41:31 2018 +0000

----------------------------------------------------------------------
 .../org/apache/impala/analysis/QueryStmt.java   |   7 +-
 .../org/apache/impala/analysis/SelectStmt.java  |  18 +-
 .../org/apache/impala/analysis/SortInfo.java    | 274 +++++++++----------
 .../apache/impala/planner/AnalyticPlanner.java  |  57 ++--
 .../org/apache/impala/planner/ExchangeNode.java |   6 +-
 .../java/org/apache/impala/planner/Planner.java |   7 +-
 .../org/apache/impala/planner/SortNode.java     |  41 +--
 .../PlannerTest/sort-expr-materialization.test  |  41 +++
 8 files changed, 225 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/analysis/QueryStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/QueryStmt.java b/fe/src/main/java/org/apache/impala/analysis/QueryStmt.java
index 3f2eec5..05e47d5 100644
--- a/fe/src/main/java/org/apache/impala/analysis/QueryStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/QueryStmt.java
@@ -265,17 +265,16 @@ public abstract class QueryStmt extends StatementBase {
    */
   protected void createSortTupleInfo(Analyzer analyzer) throws AnalysisException {
     Preconditions.checkState(evaluateOrderBy_);
-
-    for (Expr orderingExpr: sortInfo_.getOrderingExprs()) {
+    for (Expr orderingExpr: sortInfo_.getSortExprs()) {
       if (orderingExpr.getType().isComplexType()) {
         throw new AnalysisException(String.format("ORDER BY expression '%s' with " +
             "complex type '%s' is not supported.", orderingExpr.toSql(),
             orderingExpr.getType().toSql()));
       }
     }
+    sortInfo_.createSortTupleInfo(resultExprs_, analyzer);
 
-    ExprSubstitutionMap smap = sortInfo_.createSortTupleInfo(resultExprs_, analyzer);
-
+    ExprSubstitutionMap smap = sortInfo_.getOutputSmap();
     for (int i = 0; i < smap.size(); ++i) {
       if (!(smap.getLhs().get(i) instanceof SlotRef)
           || !(smap.getRhs().get(i) instanceof SlotRef)) {

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
index ab18f85..71e7e8e 100644
--- a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
@@ -270,7 +270,7 @@ public class SelectStmt extends QueryStmt {
     if (sortInfo_ != null && hasLimit()) {
       // When there is a LIMIT clause in conjunction with an ORDER BY, the ordering exprs
       // must be added in the column lineage graph.
-      graph.addDependencyPredicates(sortInfo_.getOrderingExprs());
+      graph.addDependencyPredicates(sortInfo_.getSortExprs());
     }
 
     if (aggInfo_ != null) {
@@ -563,7 +563,7 @@ public class SelectStmt extends QueryStmt {
         && (havingPred_ == null
             || !havingPred_.contains(Expr.isAggregatePredicate()))
         && (sortInfo_ == null
-            || !TreeNode.contains(sortInfo_.getOrderingExprs(),
+            || !TreeNode.contains(sortInfo_.getSortExprs(),
                                   Expr.isAggregatePredicate()))) {
       // We're not computing aggregates but we still need to register the HAVING
       // clause which could, e.g., contain a constant expression evaluating to false.
@@ -644,7 +644,7 @@ public class SelectStmt extends QueryStmt {
     }
     if (sortInfo_ != null) {
       // TODO: Avoid evaluating aggs in ignored order-bys
-      TreeNode.collect(sortInfo_.getOrderingExprs(), Expr.isAggregatePredicate(),
+      TreeNode.collect(sortInfo_.getSortExprs(), Expr.isAggregatePredicate(),
           aggExprs);
     }
 
@@ -723,10 +723,10 @@ public class SelectStmt extends QueryStmt {
       }
     }
     if (sortInfo_ != null) {
-      sortInfo_.substituteOrderingExprs(combinedSmap, analyzer);
+      sortInfo_.substituteSortExprs(combinedSmap, analyzer);
       if (LOG.isTraceEnabled()) {
         LOG.trace("post-agg orderingExprs: " +
-            Expr.debugString(sortInfo_.getOrderingExprs()));
+            Expr.debugString(sortInfo_.getSortExprs()));
       }
     }
 
@@ -742,7 +742,7 @@ public class SelectStmt extends QueryStmt {
     }
     if (orderByElements_ != null) {
       for (int i = 0; i < orderByElements_.size(); ++i) {
-        if (!sortInfo_.getOrderingExprs().get(i).isBound(
+        if (!sortInfo_.getSortExprs().get(i).isBound(
             finalAggInfo.getOutputTupleId())) {
           throw new AnalysisException(
               "ORDER BY expression not produced by aggregation output "
@@ -840,7 +840,7 @@ public class SelectStmt extends QueryStmt {
     ArrayList<Expr> analyticExprs = Lists.newArrayList();
     TreeNode.collect(resultExprs_, AnalyticExpr.class, analyticExprs);
     if (sortInfo_ != null) {
-      TreeNode.collect(sortInfo_.getOrderingExprs(), AnalyticExpr.class,
+      TreeNode.collect(sortInfo_.getSortExprs(), AnalyticExpr.class,
           analyticExprs);
     }
     if (analyticExprs.isEmpty()) return;
@@ -880,10 +880,10 @@ public class SelectStmt extends QueryStmt {
       LOG.trace("post-analytic selectListExprs: " + Expr.debugString(resultExprs_));
     }
     if (sortInfo_ != null) {
-      sortInfo_.substituteOrderingExprs(smap, analyzer);
+      sortInfo_.substituteSortExprs(smap, analyzer);
       if (LOG.isTraceEnabled()) {
         LOG.trace("post-analytic orderingExprs: " +
-            Expr.debugString(sortInfo_.getOrderingExprs()));
+            Expr.debugString(sortInfo_.getSortExprs()));
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/analysis/SortInfo.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/analysis/SortInfo.java b/fe/src/main/java/org/apache/impala/analysis/SortInfo.java
index 745de6d..fba7286 100644
--- a/fe/src/main/java/org/apache/impala/analysis/SortInfo.java
+++ b/fe/src/main/java/org/apache/impala/analysis/SortInfo.java
@@ -16,13 +16,12 @@
 // under the License.
 
 package org.apache.impala.analysis;
-import org.apache.impala.common.TreeNode;
-
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.Set;
 
+import org.apache.impala.common.TreeNode;
+
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Lists;
@@ -36,7 +35,7 @@ import com.google.common.collect.Sets;
  * particular input row (materialize all row slots)
  */
 public class SortInfo {
-  // All ordering exprs with cost greater than this will be materialized. Since we don't
+  // All sort exprs with cost greater than this will be materialized. Since we don't
   // currently have any information about actual function costs, this value is intended to
   // ensure that all expensive functions will be materialized while still leaving simple
   // operations unmaterialized, for example 'SlotRef + SlotRef' should have a cost below
@@ -45,74 +44,56 @@ public class SortInfo {
   private static final float SORT_MATERIALIZATION_COST_THRESHOLD =
       Expr.FUNCTION_CALL_COST;
 
-  private List<Expr> orderingExprs_;
+  private List<Expr> sortExprs_;
   private final List<Boolean> isAscOrder_;
   // True if "NULLS FIRST", false if "NULLS LAST", null if not specified.
   private final List<Boolean> nullsFirstParams_;
-  // Subset of ordering exprs that are materialized. Populated in
-  // createMaterializedOrderExprs(), used for EXPLAIN output.
-  private List<Expr> materializedOrderingExprs_;
-  // The single tuple that is materialized, sorted, and output by a sort operator
-  // (i.e. SortNode or TopNNode)
+  // Descriptor of tuples materialized, sorted, and output by a SortNode/TopNNode.
   private TupleDescriptor sortTupleDesc_;
-  // Input expressions materialized into sortTupleDesc_. One expr per slot in
-  // sortTupleDesc_.
-  private List<Expr> sortTupleSlotExprs_;
+  // List of exprs evaluated against the sort input and materialized into the sort tuple.
+  // One expr per slot in 'sortTupleDesc_'.
+  private final List<Expr> materializedExprs_;
+  // Maps from exprs materialized into the sort tuple to their corresponding SlotRefs.
+  private final ExprSubstitutionMap outputSmap_;
 
-  public SortInfo(List<Expr> orderingExprs, List<Boolean> isAscOrder,
+  public SortInfo(List<Expr> sortExprs, List<Boolean> isAscOrder,
       List<Boolean> nullsFirstParams) {
-    Preconditions.checkArgument(orderingExprs.size() == isAscOrder.size());
-    Preconditions.checkArgument(orderingExprs.size() == nullsFirstParams.size());
-    orderingExprs_ = orderingExprs;
+    Preconditions.checkArgument(sortExprs.size() == isAscOrder.size());
+    Preconditions.checkArgument(sortExprs.size() == nullsFirstParams.size());
+    sortExprs_ = sortExprs;
     isAscOrder_ = isAscOrder;
     nullsFirstParams_ = nullsFirstParams;
-    materializedOrderingExprs_ = Lists.newArrayList();
+    materializedExprs_ = Lists.newArrayList();
+    outputSmap_ = new ExprSubstitutionMap();
   }
 
   /**
    * C'tor for cloning.
    */
   private SortInfo(SortInfo other) {
-    orderingExprs_ = Expr.cloneList(other.orderingExprs_);
+    sortExprs_ = Expr.cloneList(other.sortExprs_);
     isAscOrder_ = Lists.newArrayList(other.isAscOrder_);
     nullsFirstParams_ = Lists.newArrayList(other.nullsFirstParams_);
-    materializedOrderingExprs_ = Expr.cloneList(other.materializedOrderingExprs_);
+    materializedExprs_ = Expr.cloneList(other.materializedExprs_);
     sortTupleDesc_ = other.sortTupleDesc_;
-    if (other.sortTupleSlotExprs_ != null) {
-      sortTupleSlotExprs_ = Expr.cloneList(other.sortTupleSlotExprs_);
-    }
+    outputSmap_ = other.outputSmap_.clone();
   }
 
-  /**
-   * Sets sortTupleDesc_, which is the internal row representation to be materialized and
-   * sorted. The source exprs of the slots in sortTupleDesc_ are changed to those in
-   * tupleSlotExprs.
-   */
-  public void setMaterializedTupleInfo(
-      TupleDescriptor tupleDesc, List<Expr> tupleSlotExprs) {
-    Preconditions.checkState(tupleDesc.getSlots().size() == tupleSlotExprs.size());
-    sortTupleDesc_ = tupleDesc;
-    sortTupleSlotExprs_ = tupleSlotExprs;
-    for (int i = 0; i < sortTupleDesc_.getSlots().size(); ++i) {
-      SlotDescriptor slotDesc = sortTupleDesc_.getSlots().get(i);
-      slotDesc.setSourceExpr(sortTupleSlotExprs_.get(i));
-    }
-  }
-  public List<Expr> getOrderingExprs() { return orderingExprs_; }
+  public List<Expr> getSortExprs() { return sortExprs_; }
   public List<Boolean> getIsAscOrder() { return isAscOrder_; }
   public List<Boolean> getNullsFirstParams() { return nullsFirstParams_; }
-  public List<Expr> getMaterializedOrderingExprs() { return materializedOrderingExprs_; }
-  public List<Expr> getSortTupleSlotExprs() { return sortTupleSlotExprs_; }
+  public List<Expr> getMaterializedExprs() { return materializedExprs_; }
   public TupleDescriptor getSortTupleDescriptor() { return sortTupleDesc_; }
+  public ExprSubstitutionMap getOutputSmap() { return outputSmap_; }
 
   /**
    * Gets the list of booleans indicating whether nulls come first or last, independent
    * of asc/desc.
    */
   public List<Boolean> getNullsFirst() {
-    Preconditions.checkState(orderingExprs_.size() == nullsFirstParams_.size());
+    Preconditions.checkState(sortExprs_.size() == nullsFirstParams_.size());
     List<Boolean> nullsFirst = Lists.newArrayList();
-    for (int i = 0; i < orderingExprs_.size(); ++i) {
+    for (int i = 0; i < sortExprs_.size(); ++i) {
       nullsFirst.add(OrderByElement.nullsFirst(nullsFirstParams_.get(i),
           isAscOrder_.get(i)));
     }
@@ -120,20 +101,19 @@ public class SortInfo {
   }
 
   /**
-   * Materializes the slots in sortTupleDesc_ referenced in the ordering exprs.
-   * Materializes the slots referenced by the corresponding sortTupleSlotExpr after
-   * applying the 'smap'.
+   * Materializes the slots in 'sortTupleDesc_' referenced in the sort exprs.
+   * Materializes the slots referenced by the corresponding materialized expr after
+   * applying the 'smap'. Valid to call after createSortTupleInfo().
    */
   public void materializeRequiredSlots(Analyzer analyzer, ExprSubstitutionMap smap) {
     Preconditions.checkNotNull(sortTupleDesc_);
-    Preconditions.checkNotNull(sortTupleSlotExprs_);
     Preconditions.checkState(sortTupleDesc_.isMaterialized());
-    analyzer.materializeSlots(orderingExprs_);
+    analyzer.materializeSlots(sortExprs_);
     List<SlotDescriptor> sortTupleSlotDescs = sortTupleDesc_.getSlots();
     List<Expr> materializedExprs = Lists.newArrayList();
     for (int i = 0; i < sortTupleSlotDescs.size(); ++i) {
       if (sortTupleSlotDescs.get(i).isMaterialized()) {
-        materializedExprs.add(sortTupleSlotExprs_.get(i));
+        materializedExprs.add(materializedExprs_.get(i));
       }
     }
     List<Expr> substMaterializedExprs =
@@ -142,20 +122,22 @@ public class SortInfo {
   }
 
   /**
-   * Replaces orderingExprs_ according to smap. This needs to be called to make sure that
-   * the ordering exprs refer to the new tuple materialized by this sort instead of the
+   * Replaces 'sortExprs_' according to smap. This needs to be called to make sure that
+   * the sort exprs refer to the new tuple materialized by this sort instead of the
    * original input.
    */
-  public void substituteOrderingExprs(ExprSubstitutionMap smap, Analyzer analyzer) {
-    orderingExprs_ = Expr.substituteList(orderingExprs_, smap, analyzer, false);
+  public void substituteSortExprs(ExprSubstitutionMap smap, Analyzer analyzer) {
+    sortExprs_ = Expr.substituteList(sortExprs_, smap, analyzer, false);
   }
 
   /**
-   * Asserts that all ordering exprs are bound by the sort tuple.
+   * Validates internal state. Asserts that all sort exprs are bound by the sort tuple.
    */
   public void checkConsistency() {
-    for (Expr orderingExpr: orderingExprs_) {
-      Preconditions.checkState(orderingExpr.isBound(sortTupleDesc_.getId()));
+    Preconditions.checkState(
+        materializedExprs_.size() == sortTupleDesc_.getSlots().size());
+    for (Expr sortExpr: sortExprs_) {
+      Preconditions.checkState(sortExpr.isBound(sortTupleDesc_.getId()));
     }
   }
 
@@ -163,119 +145,111 @@ public class SortInfo {
   public SortInfo clone() { return new SortInfo(this); }
 
   /**
+   * Matches SlotRef expressions that do not reference the sort tuple.
+   */
+  private class IsInputSlotRefPred implements com.google.common.base.Predicate<Expr> {
+    private final TupleId sortTid_;
+    public IsInputSlotRefPred(TupleId sortTid) {
+      sortTid_ = sortTid;
+    }
+
+    @Override
+    public boolean apply(Expr e) {
+      return e instanceof SlotRef && !e.isBound(sortTid_);
+    }
+  }
+
+  /**
    * Create a tuple descriptor for the single tuple that is materialized, sorted, and
    * output by the sort node. Materializes slots required by 'resultExprs' as well as
    * non-deterministic and expensive order by exprs. The materialized exprs are
    * substituted with slot refs into the new tuple. This simplifies the sorting logic for
-   * total and top-n sorts. The substitution map is returned.
+   * total and top-n sorts.
    */
-  public ExprSubstitutionMap createSortTupleInfo(
-      List<Expr> resultExprs, Analyzer analyzer) {
+  public void createSortTupleInfo(List<Expr> resultExprs, Analyzer analyzer) {
+    Preconditions.checkState(sortTupleDesc_ == null);
+    Preconditions.checkState(outputSmap_.size() == 0);
+
     // The descriptor for the tuples on which the sort operates.
-    TupleDescriptor sortTupleDesc = analyzer.getDescTbl().createTupleDescriptor("sort");
-    sortTupleDesc.setIsMaterialized(true);
-    List<Expr> sortTupleExprs = Lists.newArrayList();
+    sortTupleDesc_ = analyzer.getDescTbl().createTupleDescriptor("sort");
+    sortTupleDesc_.setIsMaterialized(true);
 
-    // substOrderBy is a mapping from exprs evaluated on the sort input that get
-    // materialized into the sort tuple to their corresponding SlotRefs in the sort tuple.
     // The following exprs are materialized:
-    // 1. Ordering exprs that we chose to materialize
-    // 2. SlotRefs against the sort input contained in the result and ordering exprs after
-    // substituting the materialized ordering exprs.
-
-    // Case 1:
-    ExprSubstitutionMap substOrderBy =
-        createMaterializedOrderExprs(sortTupleDesc, analyzer);
-    sortTupleExprs.addAll(substOrderBy.getLhs());
-
-    // Case 2: SlotRefs in the result and ordering exprs after substituting the
-    // materialized ordering exprs. Using a LinkedHashSet prevents the slots getting
-    // reordered unnecessarily.
-    Set<SlotRef> sourceSlots = Sets.newLinkedHashSet();
-    List<Expr> substResultExprs =
-        Expr.substituteList(resultExprs, substOrderBy, analyzer, false);
-    TreeNode.collect(substResultExprs, Predicates.instanceOf(SlotRef.class), sourceSlots);
-    TreeNode.collect(Expr.substituteList(orderingExprs_, substOrderBy, analyzer, false),
-        Predicates.instanceOf(SlotRef.class), sourceSlots);
-    for (SlotRef origSlotRef: sourceSlots) {
-      // Don't rematerialize slots that are already in the sort tuple.
-      if (origSlotRef.getDesc().getParent().getId() != sortTupleDesc.getId()) {
-        SlotDescriptor origSlotDesc = origSlotRef.getDesc();
-        SlotDescriptor materializedDesc =
-            analyzer.copySlotDescriptor(origSlotDesc, sortTupleDesc);
-        SlotRef cloneRef = new SlotRef(materializedDesc);
-        substOrderBy.put(origSlotRef, cloneRef);
-        sortTupleExprs.add(origSlotRef);
-      }
-    }
-
-    materializeTupleIsNullPredicates(
-        sortTupleDesc, substResultExprs, sortTupleExprs, substOrderBy, analyzer);
+    // 1. Sort exprs that we chose to materialize
+    // 2. SlotRefs against the sort input contained in the result and sort exprs
+    //    after substituting the materialized sort exprs.
+    // 3. TupleIsNullPredicates from 'resultExprs' which are not legal to evaluate after
+    //    the sort because the tuples referenced by it are gone after the sort.
+
+    // Case 1: Materialize chosen sort exprs.
+    addMaterializedExprs(getMaterializedSortExprs(), analyzer);
+
+    // Case 2: Materialize required input slots. Using a LinkedHashSet prevents the
+    // slots getting reordered unnecessarily.
+    Set<SlotRef> inputSlotRefs = Sets.newLinkedHashSet();
+    IsInputSlotRefPred pred = new IsInputSlotRefPred(sortTupleDesc_.getId());
+    TreeNode.collect(Expr.substituteList(resultExprs, outputSmap_, analyzer, false),
+        pred, inputSlotRefs);
+    TreeNode.collect(Expr.substituteList(sortExprs_, outputSmap_, analyzer, false),
+        pred, inputSlotRefs);
+    addMaterializedExprs(inputSlotRefs, analyzer);
+
+    // Case 3: Materialize TupleIsNullPredicates.
+    List<Expr> tupleIsNullPreds = Lists.newArrayList();
+    TreeNode.collect(resultExprs, Predicates.instanceOf(TupleIsNullPredicate.class),
+        tupleIsNullPreds);
+    Expr.removeDuplicates(tupleIsNullPreds);
+    addMaterializedExprs(tupleIsNullPreds, analyzer);
 
-    // The ordering exprs are evaluated against the sort tuple, so they must reflect the
+    // The sort exprs are evaluated against the sort tuple, so they must reflect the
     // materialization decision above.
-    substituteOrderingExprs(substOrderBy, analyzer);
-
-    // Update the tuple descriptor used to materialize the input of the sort.
-    setMaterializedTupleInfo(sortTupleDesc, sortTupleExprs);
-
-    return substOrderBy;
+    substituteSortExprs(outputSmap_, analyzer);
+    checkConsistency();
   }
 
   /**
-   * Materialize ordering exprs by creating slots for them in 'sortTupleDesc' if they:
-   * - contain a non-deterministic expr
-   * - contain a UDF (since we don't know if they're deterministic)
-   * - are more expensive than a cost threshold
-   * - don't have a cost set
-   *
-   * Populates 'materializedOrderingExprs_' and returns a mapping from the original
-   * ordering exprs to the new SlotRefs. It is expected that this smap will be passed into
-   * substituteOrderingExprs() by the caller.
+   * Materializes each of the given exprs into 'sortTupleDesc' as follows:
+   * - Adds a new slot in 'sortTupleDesc_'
+   * - Adds an entry in 'outputSmap_' mapping from the expr to a SlotRef on the new slot
+   * - Adds an entry in 'materializedExprs_'
+   * Valid to call after createSortTupleInfo().
    */
-  public ExprSubstitutionMap createMaterializedOrderExprs(
-      TupleDescriptor sortTupleDesc, Analyzer analyzer) {
-    ExprSubstitutionMap substOrderBy = new ExprSubstitutionMap();
-    for (Expr origOrderingExpr : orderingExprs_) {
-      if (!origOrderingExpr.hasCost()
-          || origOrderingExpr.getCost() > SORT_MATERIALIZATION_COST_THRESHOLD
-          || origOrderingExpr.contains(Expr.IS_NONDETERMINISTIC_BUILTIN_FN_PREDICATE)
-          || origOrderingExpr.contains(Expr.IS_UDF_PREDICATE)) {
-        SlotDescriptor materializedDesc = analyzer.addSlotDescriptor(sortTupleDesc);
-        materializedDesc.initFromExpr(origOrderingExpr);
-        materializedDesc.setIsMaterialized(true);
-        SlotRef materializedRef = new SlotRef(materializedDesc);
-        substOrderBy.put(origOrderingExpr, materializedRef);
-        materializedOrderingExprs_.add(origOrderingExpr);
+  public <T extends Expr> void addMaterializedExprs(Collection<T> exprs,
+      Analyzer analyzer) {
+    Preconditions.checkNotNull(sortTupleDesc_);
+    for (Expr srcExpr : exprs) {
+      SlotDescriptor dstSlotDesc;
+      if (srcExpr instanceof SlotRef) {
+        SlotDescriptor srcSlotDesc = ((SlotRef) srcExpr).getDesc();
+        dstSlotDesc = analyzer.copySlotDescriptor(srcSlotDesc, sortTupleDesc_);
+      } else {
+        dstSlotDesc = analyzer.addSlotDescriptor(sortTupleDesc_);
+        dstSlotDesc.initFromExpr(srcExpr);
       }
+      dstSlotDesc.setSourceExpr(srcExpr);
+      outputSmap_.put(srcExpr.clone(), new SlotRef(dstSlotDesc));
+      materializedExprs_.add(srcExpr);
     }
-    return substOrderBy;
   }
 
   /**
-   * Collects the unique TupleIsNullPredicates from 'exprs' and for each one:
-   * - Materializes it into a new slot in 'sortTupleDesc'
-   * - Adds it to 'sortSlotExprs'
-   * - Adds an entry in 'substOrderBy' mapping it to a SlotRef into the new slot
+   * Returns the subset of 'sortExprs_' that should be materialized. A sort expr is
+   * is materialized if it:
+   * - contains a non-deterministic expr
+   * - contains a UDF (since we don't know if they're deterministic)
+   * - is more expensive than a cost threshold
+   * - does not have a cost set
    */
-  public static void materializeTupleIsNullPredicates(TupleDescriptor sortTupleDesc,
-      List<Expr> exprs, List<Expr> sortSlotExprs, ExprSubstitutionMap substOrderBy,
-      Analyzer analyzer) {
-    List<Expr> tupleIsNullPreds = Lists.newArrayList();
-    TreeNode.collect(
-        exprs, Predicates.instanceOf(TupleIsNullPredicate.class), tupleIsNullPreds);
-    Expr.removeDuplicates(tupleIsNullPreds);
-
-    // Materialize relevant unique TupleIsNullPredicates.
-    for (Expr tupleIsNullPred: tupleIsNullPreds) {
-      SlotDescriptor sortSlotDesc = analyzer.addSlotDescriptor(sortTupleDesc);
-      sortSlotDesc.setType(tupleIsNullPred.getType());
-      sortSlotDesc.setIsMaterialized(true);
-      sortSlotDesc.setSourceExpr(tupleIsNullPred);
-      sortSlotDesc.setLabel(tupleIsNullPred.toSql());
-      SlotRef cloneRef = new SlotRef(sortSlotDesc);
-      substOrderBy.put(tupleIsNullPred, cloneRef);
-      sortSlotExprs.add(tupleIsNullPred.clone());
+  private List<Expr> getMaterializedSortExprs() {
+    List<Expr> result = Lists.newArrayList();
+    for (Expr sortExpr : sortExprs_) {
+      if (!sortExpr.hasCost()
+          || sortExpr.getCost() > SORT_MATERIALIZATION_COST_THRESHOLD
+          || sortExpr.contains(Expr.IS_NONDETERMINISTIC_BUILTIN_FN_PREDICATE)
+          || sortExpr.contains(Expr.IS_UDF_PREDICATE)) {
+        result.add(sortExpr);
+      }
     }
+    return result;
   }
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java b/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
index f504fda..90d98fd 100644
--- a/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
+++ b/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
@@ -21,9 +21,6 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.impala.analysis.AggregateInfoBase;
 import org.apache.impala.analysis.AnalyticExpr;
 import org.apache.impala.analysis.AnalyticInfo;
@@ -44,7 +41,9 @@ import org.apache.impala.analysis.TupleDescriptor;
 import org.apache.impala.analysis.TupleId;
 import org.apache.impala.analysis.TupleIsNullPredicate;
 import org.apache.impala.common.ImpalaException;
-import org.apache.impala.thrift.TPartitionType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
@@ -256,25 +255,23 @@ public class AnalyticPlanner {
   private SortInfo createSortInfo(
       PlanNode input, List<Expr> sortExprs, List<Boolean> isAsc,
       List<Boolean> nullsFirst) {
-    // create tuple for sort output = the entire materialized input in a single tuple
-    TupleDescriptor sortTupleDesc =
-        analyzer_.getDescTbl().createTupleDescriptor("sort-tuple");
-    ExprSubstitutionMap sortSmap = new ExprSubstitutionMap();
-    List<Expr> sortSlotExprs = Lists.newArrayList();
-    sortTupleDesc.setIsMaterialized(true);
+    List<Expr> inputSlotRefs = Lists.newArrayList();
     for (TupleId tid: input.getTupleIds()) {
       TupleDescriptor tupleDesc = analyzer_.getTupleDesc(tid);
       for (SlotDescriptor inputSlotDesc: tupleDesc.getSlots()) {
         if (!inputSlotDesc.isMaterialized()) continue;
-        SlotDescriptor sortSlotDesc =
-            analyzer_.copySlotDescriptor(inputSlotDesc, sortTupleDesc);
-        // all output slots need to be materialized
-        sortSlotDesc.setIsMaterialized(true);
-        sortSmap.put(new SlotRef(inputSlotDesc), new SlotRef(sortSlotDesc));
-        sortSlotExprs.add(new SlotRef(inputSlotDesc));
+        inputSlotRefs.add(new SlotRef(inputSlotDesc));
       }
     }
 
+    // The decision to materialize ordering exprs should be based on exprs that are
+    // fully resolved against our input (IMPALA-5270).
+    ExprSubstitutionMap inputSmap = input.getOutputSmap();
+    List<Expr> resolvedSortExprs =
+        Expr.substituteList(sortExprs, inputSmap, analyzer_, true);
+    SortInfo sortInfo = new SortInfo(resolvedSortExprs, isAsc, nullsFirst);
+    sortInfo.createSortTupleInfo(inputSlotRefs, analyzer_);
+
     // Lhs exprs to be substituted in ancestor plan nodes could have a rhs that contains
     // TupleIsNullPredicates. TupleIsNullPredicates require specific tuple ids for
     // evaluation. Since this sort materializes a new tuple, it's impossible to evaluate
@@ -282,31 +279,17 @@ public class AnalyticPlanner {
     // To preserve the information whether an input tuple was null or not this sort node,
     // we materialize those rhs TupleIsNullPredicates, which are then substituted
     // by a SlotRef into the sort's tuple in ancestor nodes (IMPALA-1519).
-    ExprSubstitutionMap inputSmap = input.getOutputSmap();
     if (inputSmap != null) {
-      List<Expr> relevantRhsExprs = Lists.newArrayList();
-      for (int i = 0; i < inputSmap.size(); ++i) {
-        Expr rhsExpr = inputSmap.getRhs().get(i);
+      List<Expr> tupleIsNullPreds = Lists.newArrayList();
+      for (Expr rhsExpr: inputSmap.getRhs()) {
         // Ignore substitutions that are irrelevant at this plan node and its ancestors.
-        if (rhsExpr.isBoundByTupleIds(input.getTupleIds())) {
-          relevantRhsExprs.add(rhsExpr);
-        }
+        if (!rhsExpr.isBoundByTupleIds(input.getTupleIds())) continue;
+        rhsExpr.collect(TupleIsNullPredicate.class, tupleIsNullPreds);
       }
-
-      SortInfo.materializeTupleIsNullPredicates(sortTupleDesc, relevantRhsExprs,
-          sortSlotExprs, sortSmap, analyzer_);
-    }
-
-    SortInfo sortInfo = new SortInfo(sortExprs, isAsc, nullsFirst);
-    ExprSubstitutionMap smap =
-        sortInfo.createMaterializedOrderExprs(sortTupleDesc, analyzer_);
-    sortSlotExprs.addAll(smap.getLhs());
-    sortSmap = ExprSubstitutionMap.combine(sortSmap, smap);
-    sortInfo.substituteOrderingExprs(sortSmap, analyzer_);
-    if (LOG.isTraceEnabled()) {
-      LOG.trace("sortinfo exprs: " + Expr.debugString(sortInfo.getOrderingExprs()));
+      Expr.removeDuplicates(tupleIsNullPreds);
+      sortInfo.addMaterializedExprs(tupleIsNullPreds, analyzer_);
     }
-    sortInfo.setMaterializedTupleInfo(sortTupleDesc, sortSlotExprs);
+    sortInfo.getSortTupleDescriptor().materializeSlots();
     return sortInfo;
   }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/planner/ExchangeNode.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/ExchangeNode.java b/fe/src/main/java/org/apache/impala/planner/ExchangeNode.java
index 87d2fd2..05184f2 100644
--- a/fe/src/main/java/org/apache/impala/planner/ExchangeNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/ExchangeNode.java
@@ -138,9 +138,9 @@ public class ExchangeNode extends PlanNode {
 
     if (mergeInfo_ != null && detailLevel.ordinal() > TExplainLevel.MINIMAL.ordinal()) {
       output.append(detailPrefix + "order by: ");
-      for (int i = 0; i < mergeInfo_.getOrderingExprs().size(); ++i) {
+      for (int i = 0; i < mergeInfo_.getSortExprs().size(); ++i) {
         if (i > 0) output.append(", ");
-        output.append(mergeInfo_.getOrderingExprs().get(i).toSql() + " ");
+        output.append(mergeInfo_.getSortExprs().get(i).toSql() + " ");
         output.append(mergeInfo_.getIsAscOrder().get(i) ? "ASC" : "DESC");
 
         Boolean nullsFirstParam = mergeInfo_.getNullsFirstParams().get(i);
@@ -204,7 +204,7 @@ public class ExchangeNode extends PlanNode {
 
     if (mergeInfo_ != null) {
       TSortInfo sortInfo = new TSortInfo(
-          Expr.treesToThrift(mergeInfo_.getOrderingExprs()), mergeInfo_.getIsAscOrder(),
+          Expr.treesToThrift(mergeInfo_.getSortExprs()), mergeInfo_.getIsAscOrder(),
           mergeInfo_.getNullsFirst());
       msg.exchange_node.setSort_info(sortInfo);
       msg.exchange_node.setOffset(offset_);

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/planner/Planner.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/Planner.java b/fe/src/main/java/org/apache/impala/planner/Planner.java
index c320eb4..2b8b1c3 100644
--- a/fe/src/main/java/org/apache/impala/planner/Planner.java
+++ b/fe/src/main/java/org/apache/impala/planner/Planner.java
@@ -641,12 +641,9 @@ public class Planner {
     List<Boolean> isAscOrder = Collections.nCopies(orderingExprs.size(), true);
     List<Boolean> nullsFirstParams = Collections.nCopies(orderingExprs.size(), false);
     SortInfo sortInfo = new SortInfo(orderingExprs, isAscOrder, nullsFirstParams);
-
-    ExprSubstitutionMap smap = sortInfo.createSortTupleInfo(
-        insertStmt.getResultExprs(), analyzer);
+    sortInfo.createSortTupleInfo(insertStmt.getResultExprs(), analyzer);
     sortInfo.getSortTupleDescriptor().materializeSlots();
-
-    insertStmt.substituteResultExprs(smap, analyzer);
+    insertStmt.substituteResultExprs(sortInfo.getOutputSmap(), analyzer);
 
     PlanNode node = null;
     if (partialSort) {

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/fe/src/main/java/org/apache/impala/planner/SortNode.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/SortNode.java b/fe/src/main/java/org/apache/impala/planner/SortNode.java
index 3ca50e0..45ee763 100644
--- a/fe/src/main/java/org/apache/impala/planner/SortNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/SortNode.java
@@ -19,9 +19,6 @@ package org.apache.impala.planner;
 
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.impala.analysis.Analyzer;
 import org.apache.impala.analysis.Expr;
 import org.apache.impala.analysis.ExprSubstitutionMap;
@@ -36,6 +33,9 @@ import org.apache.impala.thrift.TQueryOptions;
 import org.apache.impala.thrift.TSortInfo;
 import org.apache.impala.thrift.TSortNode;
 import org.apache.impala.thrift.TSortType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
@@ -72,7 +72,7 @@ public class SortNode extends PlanNode {
   protected long offset_;
 
   // The type of sort. Determines the exec node used in the BE.
-  private TSortType type_;
+  private final TSortType type_;
 
   /**
    * Creates a new SortNode that implements a partial sort.
@@ -133,8 +133,7 @@ public class SortNode extends PlanNode {
 
     // populate resolvedTupleExprs_ and outputSmap_
     List<SlotDescriptor> sortTupleSlots = info_.getSortTupleDescriptor().getSlots();
-    List<Expr> slotExprs = info_.getSortTupleSlotExprs();
-    Preconditions.checkState(sortTupleSlots.size() == slotExprs.size());
+    List<Expr> slotExprs = info_.getMaterializedExprs();
     resolvedTupleExprs_ = Lists.newArrayList();
     outputSmap_ = new ExprSubstitutionMap();
     for (int i = 0; i < slotExprs.size(); ++i) {
@@ -152,7 +151,7 @@ public class SortNode extends PlanNode {
     // Parent nodes have have to do the same so set the composition as the outputSmap_.
     outputSmap_ = ExprSubstitutionMap.compose(childSmap, outputSmap_, analyzer);
 
-    info_.substituteOrderingExprs(outputSmap_, analyzer);
+    info_.substituteSortExprs(outputSmap_, analyzer);
     info_.checkConsistency();
 
     if (LOG.isTraceEnabled()) {
@@ -179,7 +178,7 @@ public class SortNode extends PlanNode {
     }
     return Objects.toStringHelper(this)
         .add("type_", type_)
-        .add("ordering_exprs", Expr.debugString(info_.getOrderingExprs()))
+        .add("ordering_exprs", Expr.debugString(info_.getSortExprs()))
         .add("is_asc", "[" + Joiner.on(" ").join(strings) + "]")
         .add("nulls_first", "[" + Joiner.on(" ").join(info_.getNullsFirst()) + "]")
         .add("offset_", offset_)
@@ -190,7 +189,7 @@ public class SortNode extends PlanNode {
   @Override
   protected void toThrift(TPlanNode msg) {
     msg.node_type = TPlanNodeType.SORT_NODE;
-    TSortInfo sort_info = new TSortInfo(Expr.treesToThrift(info_.getOrderingExprs()),
+    TSortInfo sort_info = new TSortInfo(Expr.treesToThrift(info_.getSortExprs()),
         info_.getIsAscOrder(), info_.getNullsFirst());
     Preconditions.checkState(tupleIds_.size() == 1,
         "Incorrect size for tupleIds_ in SortNode");
@@ -208,9 +207,9 @@ public class SortNode extends PlanNode {
         displayName_, getNodeExplainDetail(detailLevel)));
     if (detailLevel.ordinal() >= TExplainLevel.STANDARD.ordinal()) {
       output.append(detailPrefix + "order by: ");
-      for (int i = 0; i < info_.getOrderingExprs().size(); ++i) {
+      for (int i = 0; i < info_.getSortExprs().size(); ++i) {
         if (i > 0) output.append(", ");
-        output.append(info_.getOrderingExprs().get(i).toSql() + " ");
+        output.append(info_.getSortExprs().get(i).toSql() + " ");
         output.append(info_.getIsAscOrder().get(i) ? "ASC" : "DESC");
 
         Boolean nullsFirstParam = info_.getNullsFirstParams().get(i);
@@ -221,14 +220,20 @@ public class SortNode extends PlanNode {
       output.append("\n");
     }
 
-    if (detailLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal()
-        && info_.getMaterializedOrderingExprs().size() > 0) {
-      output.append(detailPrefix + "materialized: ");
-      for (int i = 0; i < info_.getMaterializedOrderingExprs().size(); ++i) {
-        if (i > 0) output.append(", ");
-        output.append(info_.getMaterializedOrderingExprs().get(i).toSql());
+    if (detailLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal()) {
+      List<Expr> nonSlotRefExprs = Lists.newArrayList();
+      for (Expr e: info_.getMaterializedExprs()) {
+        if (e instanceof SlotRef) continue;
+        nonSlotRefExprs.add(e);
+      }
+      if (!nonSlotRefExprs.isEmpty()) {
+        output.append(detailPrefix + "materialized: ");
+        for (int i = 0; i < nonSlotRefExprs.size(); ++i) {
+          if (i > 0) output.append(", ");
+          output.append(nonSlotRefExprs.get(i).toSql());
+        }
+        output.append("\n");
       }
-      output.append("\n");
     }
 
     return output.toString();

http://git-wip-us.apache.org/repos/asf/impala/blob/c5e1f24e/testdata/workloads/functional-planner/queries/PlannerTest/sort-expr-materialization.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/sort-expr-materialization.test b/testdata/workloads/functional-planner/queries/PlannerTest/sort-expr-materialization.test
index 146524a..e6dfe72 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/sort-expr-materialization.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/sort-expr-materialization.test
@@ -199,3 +199,44 @@ PLAN-ROOT SINK
    mem-estimate=128.00MB mem-reservation=0B
    tuple-ids=0 row-size=41B cardinality=7300
 ====
+# IMPALA-5270: Rand() and udf inside inline view referenced by analytic function.
+select id, row_number() over (partition by u order by r) from
+  (select id, random() r, u from
+    (select id, TestFn(double_col) u from functional.alltypestiny) v1
+  ) v2
+order by id
+---- PLAN
+F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=42.00MB mem-reservation=16.00MB
+PLAN-ROOT SINK
+|  mem-estimate=0B mem-reservation=0B
+|
+03:SORT
+|  order by: id ASC
+|  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB
+|  tuple-ids=4 row-size=12B cardinality=8
+|
+02:ANALYTIC
+|  functions: row_number()
+|  partition by: u
+|  order by: random() ASC
+|  window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+|  mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB
+|  tuple-ids=6,5 row-size=32B cardinality=8
+|
+01:SORT
+|  order by: default.testfn(double_col) ASC NULLS FIRST, random() ASC
+|  materialized: default.testfn(double_col), random()
+|  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB
+|  tuple-ids=6 row-size=24B cardinality=8
+|
+00:SCAN HDFS [functional.alltypestiny]
+   partitions=4/4 files=4 size=460B
+   stored statistics:
+     table: rows=8 size=460B
+     partitions: 4/4 rows=8
+     columns: all
+   extrapolated-rows=disabled
+   mem-estimate=32.00MB mem-reservation=0B
+   tuple-ids=0 row-size=12B cardinality=8
+====


[15/21] impala git commit: IMPALA-6488: removes use-after-free bug in lib_cache

Posted by ta...@apache.org.
IMPALA-6488: removes use-after-free bug in lib_cache

Several recent runs have resulted in a boost mutex
invalid argument exception. The mutex in question is
the one that guards individual lib_cache entries
(LibCacheEntry::lock).

The exception is thrown due to the entry being deleted
by another thread prior to the current thread acquiring
the entry lock. This scenario happens when:
1) thread t1 looks up an existing entry e
   a. the lookup is guarded by a cache lock
   b. the cache lock is released (L356)
   c. e's lock is acquired on the next line and propagated
      up the call stack (look for the swaps)
   d. while e is locked, its use-count is incremented.
2) thread t2 deletes entry e
   a. the cache lock is acquired and e is looked up
   b. e's lock is acquired
   c. if e's usecount is 0 and was marked for removal, e is deleted.

If t2 runs following (1b), then t1 will acquire a lock on a deleted
entry (1c), causing the mutex exception.

There are two parts to the fix in this change:
(1) don't crash and (2) don't let concurrency regress.

1) remove 1b: keep the cache lock while acquiring e's lock.
The cache lock is then released and all other operations proceed as before.
Note that current lock ordering is still maintained (coarse to fine),
but now, the cache lock can be held while other threads block access
to the entry lock. When files have been copied, these operations
are short. While files are loading, accesses to the same entry
can serialize access to the entire cache.
2) add cache entry after its loaded.
Currently, on a cache miss, a new entry is created, locked,
added to the cache, and finally the cache is unlocked. The intent
is to allow other threads to concurrently load files for other entries.
However, now that the cache lock is held while the entry lock is held,
the loading thread will block other thread's from acquiring the same entry,
which will block access to the cache. The work-around is to release
the cache lock when loading a new entry and add the cache entry only when
its loaded. The workaround avoids expensive work while holding the
cache lock, but may do wasted work if multiple threads miss on the
same entry and load their entries in parallel.

Testing:
- ran core tests + hdfs
- added an end-to-end test that concurrently uses and drops/creates from
  the same lib-cache entry. with current settings, the use-after-free
  error is reliably reproduced.
- manual testing to examine concurrency of the following cases:
  - concurrent function creation from multiple lib files
    (stresses coordinator)
  - concurrent function use from multiple lib files
    (stresses backend)

Change-Id: I1f178a2114cb3969dbb920949ddff4e8220b742e
Reviewed-on: http://gerrit.cloudera.org:8080/9626
Reviewed-by: Dan Hecht <dh...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/f301879d
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/f301879d
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/f301879d

Branch: refs/heads/2.x
Commit: f301879d512656c07a8d0be965e3baf5e21da1ea
Parents: 5eba80b
Author: Vuk Ercegovac <ve...@cloudera.com>
Authored: Fri Mar 9 18:53:57 2018 -0800
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 be/src/runtime/lib-cache.cc   | 217 +++++++++++++++++++++----------------
 be/src/runtime/lib-cache.h    |  19 +++-
 tests/query_test/test_udfs.py |  73 +++++++++++++
 3 files changed, 215 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/f301879d/be/src/runtime/lib-cache.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/lib-cache.cc b/be/src/runtime/lib-cache.cc
index d694c49..c7ca6cb 100644
--- a/be/src/runtime/lib-cache.cc
+++ b/be/src/runtime/lib-cache.cc
@@ -86,42 +86,44 @@ struct LibCacheEntry {
   // before it is removed to return the same error.
   Status loading_status;
 
-  LibCacheEntry() : use_count(0), should_remove(false), check_needs_refresh(false),
-                    shared_object_handle(NULL) {}
+  LibCacheEntry()
+    : use_count(0),
+      should_remove(false),
+      check_needs_refresh(false),
+      shared_object_handle(nullptr) {}
   ~LibCacheEntry();
 };
 
-LibCache::LibCache() : current_process_handle_(NULL) {
-}
+LibCache::LibCache() : current_process_handle_(nullptr) {}
 
 LibCache::~LibCache() {
   DropCache();
-  if (current_process_handle_ != NULL) DynamicClose(current_process_handle_);
+  if (current_process_handle_ != nullptr) DynamicClose(current_process_handle_);
 }
 
 Status LibCache::Init() {
-  DCHECK(LibCache::instance_.get() == NULL);
+  DCHECK(LibCache::instance_.get() == nullptr);
   LibCache::instance_.reset(new LibCache());
   return LibCache::instance_->InitInternal();
 }
 
 Status LibCache::InitInternal() {
   if (TestInfo::is_fe_test()) {
-    // In the FE tests, NULL gives the handle to the java process.
+    // In the FE tests, nullptr gives the handle to the java process.
     // Explicitly load the fe-support shared object.
     string fe_support_path;
     PathBuilder::GetFullBuildPath("service/libfesupport.so", &fe_support_path);
     RETURN_IF_ERROR(DynamicOpen(fe_support_path.c_str(), &current_process_handle_));
   } else {
-    RETURN_IF_ERROR(DynamicOpen(NULL, &current_process_handle_));
+    RETURN_IF_ERROR(DynamicOpen(nullptr, &current_process_handle_));
   }
-  DCHECK(current_process_handle_ != NULL)
+  DCHECK(current_process_handle_ != nullptr)
       << "We should always be able to get current process handle.";
   return Status::OK();
 }
 
 LibCacheEntry::~LibCacheEntry() {
-  if (shared_object_handle != NULL) {
+  if (shared_object_handle != nullptr) {
     DCHECK_EQ(use_count, 0);
     DCHECK(should_remove);
     DynamicClose(shared_object_handle);
@@ -133,14 +135,14 @@ Status LibCache::GetSoFunctionPtr(const string& hdfs_lib_file, const string& sym
     void** fn_ptr, LibCacheEntry** ent, bool quiet) {
   if (hdfs_lib_file.empty()) {
     // Just loading a function ptr in the current process. No need to take any locks.
-    DCHECK(current_process_handle_ != NULL);
+    DCHECK(current_process_handle_ != nullptr);
     RETURN_IF_ERROR(DynamicLookup(current_process_handle_, symbol.c_str(), fn_ptr, quiet));
     return Status::OK();
   }
 
-  LibCacheEntry* entry = NULL;
+  LibCacheEntry* entry = nullptr;
   unique_lock<mutex> lock;
-  if (ent != NULL && *ent != NULL) {
+  if (ent != nullptr && *ent != nullptr) {
     // Reuse already-cached entry provided by user
     entry = *ent;
     unique_lock<mutex> l(entry->lock);
@@ -148,9 +150,8 @@ Status LibCache::GetSoFunctionPtr(const string& hdfs_lib_file, const string& sym
   } else {
     RETURN_IF_ERROR(GetCacheEntry(hdfs_lib_file, TYPE_SO, &lock, &entry));
   }
-  DCHECK(entry != NULL);
+  DCHECK(entry != nullptr);
   DCHECK_EQ(entry->type, TYPE_SO);
-
   LibCacheEntry::SymbolMap::iterator it = entry->symbol_cache.find(symbol);
   if (it != entry->symbol_cache.end()) {
     *fn_ptr = it->second;
@@ -160,8 +161,8 @@ Status LibCache::GetSoFunctionPtr(const string& hdfs_lib_file, const string& sym
     entry->symbol_cache[symbol] = *fn_ptr;
   }
 
-  DCHECK(*fn_ptr != NULL);
-  if (ent != NULL && *ent == NULL) {
+  DCHECK(*fn_ptr != nullptr);
+  if (ent != nullptr && *ent == nullptr) {
     // Only set and increment user's entry if it wasn't already cached
     *ent = entry;
     ++(*ent)->use_count;
@@ -170,10 +171,10 @@ Status LibCache::GetSoFunctionPtr(const string& hdfs_lib_file, const string& sym
 }
 
 void LibCache::DecrementUseCount(LibCacheEntry* entry) {
-  if (entry == NULL) return;
+  if (entry == nullptr) return;
   bool can_delete = false;
   {
-    unique_lock<mutex> lock(entry->lock);;
+    unique_lock<mutex> lock(entry->lock);
     --entry->use_count;
     can_delete = (entry->use_count == 0 && entry->should_remove);
   }
@@ -183,9 +184,9 @@ void LibCache::DecrementUseCount(LibCacheEntry* entry) {
 Status LibCache::GetLocalLibPath(const string& hdfs_lib_file, LibType type,
                                  string* local_path) {
   unique_lock<mutex> lock;
-  LibCacheEntry* entry = NULL;
+  LibCacheEntry* entry = nullptr;
   RETURN_IF_ERROR(GetCacheEntry(hdfs_lib_file, type, &lock, &entry));
-  DCHECK(entry != NULL);
+  DCHECK(entry != nullptr);
   DCHECK_EQ(entry->type, type);
   *local_path = entry->local_path;
   return Status::OK();
@@ -194,13 +195,13 @@ Status LibCache::GetLocalLibPath(const string& hdfs_lib_file, LibType type,
 Status LibCache::CheckSymbolExists(const string& hdfs_lib_file, LibType type,
     const string& symbol, bool quiet) {
   if (type == TYPE_SO) {
-    void* dummy_ptr = NULL;
-    return GetSoFunctionPtr(hdfs_lib_file, symbol, &dummy_ptr, NULL, quiet);
+    void* dummy_ptr = nullptr;
+    return GetSoFunctionPtr(hdfs_lib_file, symbol, &dummy_ptr, nullptr, quiet);
   } else if (type == TYPE_IR) {
     unique_lock<mutex> lock;
-    LibCacheEntry* entry = NULL;
+    LibCacheEntry* entry = nullptr;
     RETURN_IF_ERROR(GetCacheEntry(hdfs_lib_file, type, &lock, &entry));
-    DCHECK(entry != NULL);
+    DCHECK(entry != nullptr);
     DCHECK_EQ(entry->type, TYPE_IR);
     if (entry->symbols.find(symbol) == entry->symbols.end()) {
       stringstream ss;
@@ -212,7 +213,7 @@ Status LibCache::CheckSymbolExists(const string& hdfs_lib_file, LibType type,
   } else if (type == TYPE_JAR) {
     // TODO: figure out how to inspect contents of jars
     unique_lock<mutex> lock;
-    LibCacheEntry* dummy_entry = NULL;
+    LibCacheEntry* dummy_entry = nullptr;
     return GetCacheEntry(hdfs_lib_file, type, &lock, &dummy_entry);
   } else {
     DCHECK(false);
@@ -238,8 +239,8 @@ void LibCache::RemoveEntry(const string& hdfs_lib_file) {
   RemoveEntryInternal(hdfs_lib_file, it);
 }
 
-void LibCache::RemoveEntryInternal(const string& hdfs_lib_file,
-                                   const LibMap::iterator& entry_iter) {
+void LibCache::RemoveEntryInternal(
+    const string& hdfs_lib_file, const LibMap::iterator& entry_iter) {
   LibCacheEntry* entry = entry_iter->second;
   VLOG(1) << "Removing lib cache entry: " << hdfs_lib_file
           << ", local path: " << entry->local_path;
@@ -291,7 +292,7 @@ Status LibCache::GetCacheEntry(const string& hdfs_lib_file, LibType type,
       entry_lock->swap(local_entry_lock);
       return status;
     }
-    if (*entry == NULL) return status;
+    if (*entry == nullptr) return status;
 
     // Set loading_status on the entry so that if another thread calls
     // GetCacheEntry() for this lib before this thread is able to acquire lock_ in
@@ -306,77 +307,111 @@ Status LibCache::GetCacheEntry(const string& hdfs_lib_file, LibType type,
 Status LibCache::GetCacheEntryInternal(const string& hdfs_lib_file, LibType type,
     unique_lock<mutex>* entry_lock, LibCacheEntry** entry) {
   DCHECK(!hdfs_lib_file.empty());
-  *entry = NULL;
+  *entry = nullptr;
 
-  // Check if this file is already cached or an error occured on another thread while
-  // loading the library.
-  unique_lock<mutex> lib_cache_lock(lock_);
-  LibMap::iterator it = lib_cache_.find(hdfs_lib_file);
-  if (it != lib_cache_.end()) {
-    {
-      unique_lock<mutex> local_entry_lock((it->second)->lock);
-      if (!(it->second)->loading_status.ok()) {
-        // If loading_status is already set, the returned *entry should be NULL.
-        DCHECK(*entry == NULL);
-        return (it->second)->loading_status;
-      }
+  // Check if this file is already cached. Refresh the entry if needed.
+  {
+    unique_lock<mutex> lib_cache_lock(lock_);
+    LibMap::iterator it = lib_cache_.find(hdfs_lib_file);
+    if (it != lib_cache_.end()) {
+      RETURN_IF_ERROR(RefreshCacheEntry(hdfs_lib_file, type, it, entry_lock, entry));
+      if (*entry != nullptr) return Status::OK();
     }
+  }
+
+  // Entry didn't exist. Create a new entry and load it. Note that the cache lock is
+  // *not* held and the entry is not added to the cache until it is loaded. Loading is
+  // expensive, so *not* holding the cache lock and *not* making the entry visible to
+  // other threads avoids blocking other threads with an expensive operation.
+  unique_ptr<LibCacheEntry> new_entry = make_unique<LibCacheEntry>();
+  RETURN_IF_ERROR(LoadCacheEntry(hdfs_lib_file, type, new_entry.get()));
 
-    *entry = it->second;
-    if ((*entry)->check_needs_refresh) {
-      // Check if file has been modified since loading the cached copy. If so, remove the
-      // cached entry and create a new one.
-      (*entry)->check_needs_refresh = false;
-      time_t last_mod_time;
-      hdfsFS hdfs_conn;
-      Status status = HdfsFsCache::instance()->GetConnection(hdfs_lib_file, &hdfs_conn);
-      if (!status.ok()) {
-        RemoveEntryInternal(hdfs_lib_file, it);
-        *entry = NULL;
+  // Entry is now loaded. Check that another thread did not already load and add an entry
+  // for the same key. If so, refresh it if needed. If the existing entry is valid, then
+  // use it and discard new_entry.
+  {
+    unique_lock<mutex> lib_cache_lock(lock_);
+    LibMap::iterator it = lib_cache_.find(hdfs_lib_file);
+    if (it != lib_cache_.end()) {
+      Status status = RefreshCacheEntry(hdfs_lib_file, type, it, entry_lock, entry);
+      // The entry lock is held at this point if entry is valid.
+      if (!status.ok() || *entry != nullptr) {
+        // new_entry will be discarded; while wasted work, it avoids holding
+        // the cache lock while loading.
+        new_entry->should_remove = true;
         return status;
       }
-      status = GetLastModificationTime(hdfs_conn, hdfs_lib_file.c_str(), &last_mod_time);
-      if (!status.ok() || (*entry)->last_mod_time < last_mod_time) {
-        RemoveEntryInternal(hdfs_lib_file, it);
-        *entry = NULL;
-      }
-      RETURN_IF_ERROR(status);
     }
+
+    // The entry was not found or was removed for refresh. Use the new entry, so
+    // lock it and add it to the cache.
+    *entry = new_entry.release();
+    unique_lock<mutex> local_entry_lock((*entry)->lock);
+    entry_lock->swap(local_entry_lock);
+    lib_cache_[hdfs_lib_file] = *entry;
   }
+  return Status::OK();
+}
 
-  if (*entry != NULL) {
-    // Release the lib_cache_ lock. This guarantees other threads looking at other
-    // libs can continue.
-    lib_cache_lock.unlock();
+Status LibCache::RefreshCacheEntry(const string& hdfs_lib_file, LibType type,
+    const LibMap::iterator& iter, unique_lock<mutex>* entry_lock, LibCacheEntry** entry) {
+  // Check if an error occurred on another thread while loading the library.
+  {
+    unique_lock<mutex> local_entry_lock((iter->second)->lock);
+    if (!(iter->second)->loading_status.ok()) {
+      // If loading_status is already set, the returned *entry should be nullptr.
+      DCHECK(*entry == nullptr);
+      return (iter->second)->loading_status;
+    }
+  }
+
+  // Refresh the cache entry if needed. If refreshed or an error occurred, remove
+  // the entry and set the returned entry to nullptr.
+  *entry = iter->second;
+  if ((*entry)->check_needs_refresh) {
+    // Check if file has been modified since loading the cached copy. If so, remove the
+    // cached entry and create a new one.
+    (*entry)->check_needs_refresh = false;
+    time_t last_mod_time;
+    hdfsFS hdfs_conn;
+    Status status = HdfsFsCache::instance()->GetConnection(hdfs_lib_file, &hdfs_conn);
+    if (!status.ok()) {
+      RemoveEntryInternal(hdfs_lib_file, iter);
+      *entry = nullptr;
+      return status;
+    }
+    status = GetLastModificationTime(hdfs_conn, hdfs_lib_file.c_str(), &last_mod_time);
+    if (!status.ok() || (*entry)->last_mod_time < last_mod_time) {
+      RemoveEntryInternal(hdfs_lib_file, iter);
+      *entry = nullptr;
+    }
+    RETURN_IF_ERROR(status);
+  }
+
+  // No refresh needed, the entry can be used.
+  if (*entry != nullptr) {
+    // The cache level lock continues to be held while the entry lock is obtained
+    // so that some other thread does not access the entry and delete it.
     unique_lock<mutex> local_entry_lock((*entry)->lock);
     entry_lock->swap(local_entry_lock);
 
+    // Let the caller propagate any error that occurred when loading the entry.
     RETURN_IF_ERROR((*entry)->copy_file_status);
     DCHECK_EQ((*entry)->type, type);
     DCHECK(!(*entry)->local_path.empty());
-    return Status::OK();
   }
+  return Status::OK();
+}
 
-  // Entry didn't exist. Add the entry then release lock_ (so other libraries
-  // can be accessed).
-  *entry = new LibCacheEntry();
-
-  // Grab the entry lock before adding it to lib_cache_. We still need to do more
-  // work to initialize *entry and we don't want another thread to pick up
-  // the uninitialized entry.
-  unique_lock<mutex> local_entry_lock((*entry)->lock);
-  entry_lock->swap(local_entry_lock);
-  lib_cache_[hdfs_lib_file] = *entry;
-  lib_cache_lock.unlock();
-
-  // At this point we have the entry lock but not the lib cache lock.
-  DCHECK(*entry != NULL);
-  (*entry)->type = type;
+Status LibCache::LoadCacheEntry(
+    const std::string& hdfs_lib_file, LibType type, LibCacheEntry* entry) {
+  DCHECK(entry != nullptr);
+  entry->type = type;
 
   // Copy the file
-  (*entry)->local_path = MakeLocalPath(hdfs_lib_file, FLAGS_local_library_dir);
+  entry->local_path = MakeLocalPath(hdfs_lib_file, FLAGS_local_library_dir);
   VLOG(1) << "Adding lib cache entry: " << hdfs_lib_file
-          << ", local path: " << (*entry)->local_path;
+          << ", local path: " << entry->local_path;
 
   hdfsFS hdfs_conn, local_conn;
   RETURN_IF_ERROR(HdfsFsCache::instance()->GetConnection(hdfs_lib_file, &hdfs_conn));
@@ -385,28 +420,26 @@ Status LibCache::GetCacheEntryInternal(const string& hdfs_lib_file, LibType type
   // Note: the file can be updated between getting last_mod_time and copying the file to
   // local_path. This can only result in the file unnecessarily being refreshed, and does
   // not affect correctness.
-  (*entry)->copy_file_status = GetLastModificationTime(
-      hdfs_conn, hdfs_lib_file.c_str(), &(*entry)->last_mod_time);
-  RETURN_IF_ERROR((*entry)->copy_file_status);
+  entry->copy_file_status =
+      GetLastModificationTime(hdfs_conn, hdfs_lib_file.c_str(), &entry->last_mod_time);
+  RETURN_IF_ERROR(entry->copy_file_status);
 
-  (*entry)->copy_file_status = CopyHdfsFile(
-      hdfs_conn, hdfs_lib_file, local_conn, (*entry)->local_path);
-  RETURN_IF_ERROR((*entry)->copy_file_status);
+  entry->copy_file_status =
+      CopyHdfsFile(hdfs_conn, hdfs_lib_file, local_conn, entry->local_path);
+  RETURN_IF_ERROR(entry->copy_file_status);
 
   if (type == TYPE_SO) {
     // dlopen the local library
-    RETURN_IF_ERROR(
-        DynamicOpen((*entry)->local_path.c_str(), &(*entry)->shared_object_handle));
+    RETURN_IF_ERROR(DynamicOpen(entry->local_path.c_str(), &entry->shared_object_handle));
   } else if (type == TYPE_IR) {
     // Load the module temporarily and populate all symbols.
-    const string file = (*entry)->local_path;
+    const string file = entry->local_path;
     const string module_id = filesystem::path(file).stem().string();
-    RETURN_IF_ERROR(LlvmCodeGen::GetSymbols(file, module_id, &(*entry)->symbols));
+    RETURN_IF_ERROR(LlvmCodeGen::GetSymbols(file, module_id, &entry->symbols));
   } else {
     DCHECK_EQ(type, TYPE_JAR);
     // Nothing to do.
   }
-
   return Status::OK();
 }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/f301879d/be/src/runtime/lib-cache.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/lib-cache.h b/be/src/runtime/lib-cache.h
index 4a564ee..b1b70b1 100644
--- a/be/src/runtime/lib-cache.h
+++ b/be/src/runtime/lib-cache.h
@@ -151,6 +151,21 @@ class LibCache {
   Status GetCacheEntryInternal(const std::string& hdfs_lib_file, LibType type,
       boost::unique_lock<boost::mutex>* entry_lock, LibCacheEntry** entry);
 
+  /// Returns iter's cache entry in 'entry' with 'entry_lock' held if entry does not
+  /// need to be refreshed.
+  /// If entry needs to be refreshed, then it is removed and '*entry' is set to nullptr.
+  /// The cache lock must be held prior to calling this method. On return the entry's
+  /// lock is taken and returned in '*entry_lock' if entry does not need to be refreshed.
+  /// TODO: cleanup this method's interface and how the outputs are used.
+  Status RefreshCacheEntry(const std::string& hdfs_lib_file, LibType type,
+      const LibMap::iterator& iter, boost::unique_lock<boost::mutex>* entry_lock,
+      LibCacheEntry** entry);
+
+  /// 'hdfs_lib_file' is copied locally and 'entry' is initialized with its contents.
+  /// No locks are assumed held; 'entry' should be visible only to a single thread.
+  Status LoadCacheEntry(
+      const std::string& hdfs_lib_file, LibType type, LibCacheEntry* entry);
+
   /// Utility function for generating a filename unique to this process and
   /// 'hdfs_path'. This is to prevent multiple impalad processes or different library files
   /// with the same name from clobbering each other. 'hdfs_path' should be the full path
@@ -160,8 +175,8 @@ class LibCache {
 
   /// Implementation to remove an entry from the cache.
   /// lock_ must be held. The entry's lock should not be held.
-  void RemoveEntryInternal(const std::string& hdfs_lib_file,
-                           const LibMap::iterator& entry_iterator);
+  void RemoveEntryInternal(
+      const std::string& hdfs_lib_file, const LibMap::iterator& entry_iterator);
 };
 
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/f301879d/tests/query_test/test_udfs.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_udfs.py b/tests/query_test/test_udfs.py
index 5252363..17890a4 100644
--- a/tests/query_test/test_udfs.py
+++ b/tests/query_test/test_udfs.py
@@ -302,6 +302,79 @@ class TestUdfExecution(TestUdfBase):
       self.run_test_case('QueryTest/udf-non-deterministic', vector,
           use_db=unique_database)
 
+  def test_native_functions_race(self, vector, unique_database):
+    """ IMPALA-6488: stress concurrent adds, uses, and deletes of native functions.
+        Exposes a crash caused by use-after-free in lib-cache."""
+
+    # Native function used by a query. Stresses lib-cache during analysis and
+    # backend expressions.
+    create_fn_to_use = """create function {0}.use_it(string) returns string
+                          LOCATION '{1}'
+                          SYMBOL='_Z8IdentityPN10impala_udf15FunctionContextERKNS_9StringValE'"""
+    use_fn = """select * from (select max(int_col) from functional.alltypesagg
+                where {0}.use_it(string_col) = 'blah' union all
+                (select max(int_col) from functional.alltypesagg
+                 where {0}.use_it(String_col) > '1' union all
+                (select max(int_col) from functional.alltypesagg
+                 where {0}.use_it(string_col) > '1'))) v"""
+    # Reference to another native function from the same 'so' file. Creating/dropping
+    # stresses lib-cache lookup, add, and refresh.
+    create_another_fn = """create function if not exists {0}.other(float)
+                           returns float location '{1}' symbol='Identity'"""
+    drop_another_fn = """drop function if exists {0}.other(float)"""
+
+    setup_client = self.create_impala_client()
+    setup_query = create_fn_to_use.format(unique_database, '/test-warehouse/libTestUdfs.so')
+    try:
+      setup_client.execute(setup_query)
+    except Exception as e:
+      print "Unable to create initial function: {0}".format(setup_query)
+      raise
+
+    errors = []
+    def use_fn_method():
+      time.sleep(1 + random.random())
+      client = self.create_impala_client()
+      query = use_fn.format(unique_database)
+      try:
+        client.execute(query)
+      except Exception as e:
+        errors.append(e)
+
+    def load_fn_method():
+      time.sleep(1 + random.random())
+      client = self.create_impala_client()
+      drop = drop_another_fn.format(unique_database)
+      create = create_another_fn.format(unique_database, '/test-warehouse/libTestUdfs.so')
+      try:
+        client.execute(drop)
+        client.execute(create)
+      except Exception as e:
+        errors.append(e)
+
+    # number of uses/loads needed to reliably reproduce the bug.
+    num_uses = 200
+    num_loads = 200
+
+    # create threads to use native function.
+    runner_threads = []
+    for i in xrange(num_uses):
+      runner_threads.append(threading.Thread(target=use_fn_method))
+
+    # create threads to drop/create native functions.
+    for i in xrange(num_loads):
+      runner_threads.append(threading.Thread(target=load_fn_method))
+
+    # launch all runner threads.
+    for t in runner_threads: t.start()
+
+    # join all threads.
+    for t in runner_threads: t.join();
+
+    # Check for any errors.
+    for e in errors: print e
+    assert len(errors) == 0
+
   def test_ir_functions(self, vector, unique_database):
     if vector.get_value('exec_option')['disable_codegen']:
       # IR functions require codegen to be enabled.


[20/21] impala git commit: IMPALA-6697: Downgrade setuptools to be compatible with Python 2.6

Posted by ta...@apache.org.
IMPALA-6697: Downgrade setuptools to be compatible with Python 2.6

Change-Id: I0d4727b7a5911269b82287ed9ce759f1e211f386
Reviewed-on: http://gerrit.cloudera.org:8080/9713
Reviewed-by: Philip Zeyliger <ph...@cloudera.com>
Tested-by: Lars Volker <lv...@cloudera.com>
Reviewed-on: http://gerrit.cloudera.org:8080/9714
Reviewed-by: Lars Volker <lv...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/d1845f62
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/d1845f62
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/d1845f62

Branch: refs/heads/2.x
Commit: d1845f62da96380f7a5bcf71f01248b894daadad
Parents: d67064d
Author: Lars Volker <lv...@cloudera.com>
Authored: Sun Mar 18 10:29:41 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Mon Mar 19 03:16:50 2018 +0000

----------------------------------------------------------------------
 infra/python/deps/requirements.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/d1845f62/infra/python/deps/requirements.txt
----------------------------------------------------------------------
diff --git a/infra/python/deps/requirements.txt b/infra/python/deps/requirements.txt
index 29cc9ce..abf5d7d 100644
--- a/infra/python/deps/requirements.txt
+++ b/infra/python/deps/requirements.txt
@@ -55,7 +55,8 @@ python-magic == 0.4.11
 pywebhdfs == 0.3.2
   pbr == 1.8.1
 requests == 2.7.0
-setuptools == 39.0.0
+# Newer versions of setuptools don't support Python 2.6
+setuptools == 36.8.0
 setuptools-scm == 1.15.4
 sh == 1.11
 sqlparse == 0.1.15


[11/21] impala git commit: [DOCS] Changed to --use_local_tz_for_unix_timestamp_conversions

Posted by ta...@apache.org.
[DOCS] Changed to --use_local_tz_for_unix_timestamp_conversions

Change-Id: Id75ec73031b97aa8a3c61ccdbaea39db008b4093
Reviewed-on: http://gerrit.cloudera.org:8080/9620
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/d981b405
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/d981b405
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/d981b405

Branch: refs/heads/2.x
Commit: d981b405501eaec818680e1b169918c11002fadc
Parents: 9810ec6
Author: Alex Rodoni <ar...@cloudera.com>
Authored: Tue Mar 13 17:47:38 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 docs/shared/impala_common.xml             | 10 ++++++----
 docs/topics/impala_datetime_functions.xml |  2 +-
 docs/topics/impala_timestamp.xml          |  8 ++++----
 3 files changed, 11 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/d981b405/docs/shared/impala_common.xml
----------------------------------------------------------------------
diff --git a/docs/shared/impala_common.xml b/docs/shared/impala_common.xml
index b4ac655..985dcb7 100644
--- a/docs/shared/impala_common.xml
+++ b/docs/shared/impala_common.xml
@@ -1179,7 +1179,7 @@ drop database temp;
 
       <p rev="2.2.0" id="timezone_conversion_caveat">
         The way this function deals with time zones when converting to or from <codeph>TIMESTAMP</codeph>
-        values is affected by the <codeph>-use_local_tz_for_unix_timestamp_conversions</codeph> startup flag for the
+        values is affected by the <codeph>--use_local_tz_for_unix_timestamp_conversions</codeph> startup flag for the
         <cmdname>impalad</cmdname> daemon. See <xref href="../topics/impala_timestamp.xml#timestamp"/> for details about
         how Impala handles time zone considerations for the <codeph>TIMESTAMP</codeph> data type.
       </p>
@@ -1337,11 +1337,13 @@ drop database temp;
       </p>
 
       <p>
-        <ph id="cast_int_to_timestamp">Casting an integer or floating-point value <codeph>N</codeph> to
+        <ph id="cast_int_to_timestamp">
+          Casting an integer or floating-point value <codeph>N</codeph> to
         <codeph>TIMESTAMP</codeph> produces a value that is <codeph>N</codeph> seconds past the start of the epoch
         date (January 1, 1970). By default, the result value represents a date and time in the UTC time zone.
-        If the setting <codeph>-use_local_tz_for_unix_timestamp_conversions=true</codeph> is in effect,
-        the resulting <codeph>TIMESTAMP</codeph> represents a date and time in the local time zone.</ph>
+        If the setting <codeph>--use_local_tz_for_unix_timestamp_conversions=true</codeph> is in effect,
+        the resulting <codeph>TIMESTAMP</codeph> represents a date and time in the local time zone.
+        </ph>
       </p>
 
       <p id="redaction_yes" rev="2.2.0">

http://git-wip-us.apache.org/repos/asf/impala/blob/d981b405/docs/topics/impala_datetime_functions.xml
----------------------------------------------------------------------
diff --git a/docs/topics/impala_datetime_functions.xml b/docs/topics/impala_datetime_functions.xml
index d9c77dc..d40e28b 100644
--- a/docs/topics/impala_datetime_functions.xml
+++ b/docs/topics/impala_datetime_functions.xml
@@ -52,7 +52,7 @@ under the License.
 
     <p rev="2.2.0">
       Some of these functions are affected by the setting of the
-      <codeph>-use_local_tz_for_unix_timestamp_conversions</codeph> startup flag for the
+      <codeph>--use_local_tz_for_unix_timestamp_conversions</codeph> startup flag for the
       <cmdname>impalad</cmdname> daemon. This setting is off by default, meaning that
       functions such as <codeph>from_unixtime()</codeph> and <codeph>unix_timestamp()</codeph>
       consider the input values to always represent the UTC time zone.

http://git-wip-us.apache.org/repos/asf/impala/blob/d981b405/docs/topics/impala_timestamp.xml
----------------------------------------------------------------------
diff --git a/docs/topics/impala_timestamp.xml b/docs/topics/impala_timestamp.xml
index 94e9c69..320f99d 100644
--- a/docs/topics/impala_timestamp.xml
+++ b/docs/topics/impala_timestamp.xml
@@ -163,21 +163,21 @@ insert into auction_details
       If you have data files written by Hive, those <codeph>TIMESTAMP</codeph> values represent the local timezone
       of the host where the data was written, potentially leading to inconsistent results when processed by Impala.
       To avoid compatibility problems or having to code workarounds, you can specify one or both of these
-      <cmdname>impalad</cmdname> startup flags: <codeph>-use_local_tz_for_unix_timestamp_conversions=true</codeph>
+      <cmdname>impalad</cmdname> startup flags: <codeph>--use_local_tz_for_unix_timestamp_conversions=true</codeph>
       <codeph>-convert_legacy_hive_parquet_utc_timestamps=true</codeph>. Although
       <codeph>-convert_legacy_hive_parquet_utc_timestamps</codeph> is turned off by default to avoid performance overhead, where practical
       turn it on when processing <codeph>TIMESTAMP</codeph> columns in Parquet files written by Hive, to avoid unexpected behavior.
     </p>
 
     <p rev="2.2.0">
-      The <codeph>-use_local_tz_for_unix_timestamp_conversions</codeph> setting affects conversions from
+      The <codeph>--use_local_tz_for_unix_timestamp_conversions</codeph> setting affects conversions from
       <codeph>TIMESTAMP</codeph> to <codeph>BIGINT</codeph>, or from <codeph>BIGINT</codeph>
       to <codeph>TIMESTAMP</codeph>. By default, Impala treats all <codeph>TIMESTAMP</codeph> values as UTC,
       to simplify analysis of time-series data from different geographic regions. When you enable the
-      <codeph>-use_local_tz_for_unix_timestamp_conversions</codeph> setting, these operations
+      <codeph>--use_local_tz_for_unix_timestamp_conversions</codeph> setting, these operations
       treat the input values as if they are in the local tie zone of the host doing the processing.
       See <xref href="impala_datetime_functions.xml#datetime_functions"/> for the list of functions
-      affected by the <codeph>-use_local_tz_for_unix_timestamp_conversions</codeph> setting.
+      affected by the <codeph>--use_local_tz_for_unix_timestamp_conversions</codeph> setting.
     </p>
 
     <p>


[12/21] impala git commit: Removing (broken) retries from split-hbase.sh.

Posted by ta...@apache.org.
Removing (broken) retries from split-hbase.sh.

The retries in split-hbase.sh don't work in the common case,
because $MINIKDC_PRINC_HIVE is not set in non-kerberized (common)
environments. The regular data load scripts (create-load-data.sh)
have code to manage that, but split-hbase.sh blindly forges ahead,
leading to errors like:

  /home/impdev/Impala/testdata/bin/split-hbase.sh: line 49: MINIKDC_PRINC_HIVE: unbound variable
  Error in /home/impdev/Impala/testdata/bin/create-load-data.sh at line 48: LOAD_DATA_ARGS=""

Since this hasn't been working, I opted to remove it entirely, as a failure on
the line where HBase splitting actually failed would be significantly more
useful than the error here. A search of mailing lists suggested that I was at
least the second person to have run into this. (In my case, I did break HBase
splitting, but it took me a second to identify the error, since the log was
spammed with unrelated information relating to the cluster restart.)

Testing: core tests.

Change-Id: I715891c9e744f21002330c3ae3ebc14095d94ffd
Reviewed-on: http://gerrit.cloudera.org:8080/9588
Reviewed-by: Philip Zeyliger <ph...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/cf7d7703
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/cf7d7703
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/cf7d7703

Branch: refs/heads/2.x
Commit: cf7d7703135906d237bce39d9ea9106dc7ad3025
Parents: c53acc8
Author: Philip Zeyliger <ph...@cloudera.com>
Authored: Mon Mar 12 13:55:37 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 testdata/bin/split-hbase.sh | 17 +++--------------
 1 file changed, 3 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/cf7d7703/testdata/bin/split-hbase.sh
----------------------------------------------------------------------
diff --git a/testdata/bin/split-hbase.sh b/testdata/bin/split-hbase.sh
index 2d95b25..8ede905 100755
--- a/testdata/bin/split-hbase.sh
+++ b/testdata/bin/split-hbase.sh
@@ -38,17 +38,6 @@ mvn $IMPALA_MAVEN_OPTIONS -q dependency:copy-dependencies
 export CLASSPATH=$IMPALA_HOME/testdata/target/impala-testdata-0.1-SNAPSHOT.jar:$CLASSPATH
 
 : ${JAVA_KERBEROS_MAGIC=}
-for ATTEMPT in {1..10}; do
-  if "$JAVA" ${JAVA_KERBEROS_MAGIC} \
-      org.apache.impala.datagenerator.HBaseTestDataRegionAssigment \
-      functional_hbase.alltypesagg functional_hbase.alltypessmall; then
-    break
-  fi
-  # Hopefully reloading the data will somehow help the splitting succeed.
-  $IMPALA_HOME/bin/start-impala-cluster.py
-  $IMPALA_HOME/bin/load-data.py -w functional-query \
-      --table_names=alltypesagg,alltypessmall --table_formats=hbase/none --force \
-      ${KERB_ARGS} --principal=${MINIKDC_PRINC_HIVE}
-  $IMPALA_HOME/tests/util/compute_table_stats.py --db_names=functional_hbase \
-      --table_names=alltypesagg,alltypessmall ${KERB_ARGS}
-done
+"$JAVA" ${JAVA_KERBEROS_MAGIC} \
+    org.apache.impala.datagenerator.HBaseTestDataRegionAssigment \
+    functional_hbase.alltypesagg functional_hbase.alltypessmall


[13/21] impala git commit: IMPALA-6498: test_query_profile_thrift_timestamps causes following tests to fail.

Posted by ta...@apache.org.
IMPALA-6498: test_query_profile_thrift_timestamps causes following
tests to fail.

test_query_profile_thrift_timestamps uses ImapaTestSuite.client.close()
to force cancellation/unregistration of the query, so that 'EndTime'
of the query shows up in the profile. Since other test cases also need
a valid ImpalaTestSuite.client, we move the test case in question to
its own test suite.

Have also reduced the query to 'select sleep(5)', as the earlier
'select sleep(10000)' is just really excessively long.

Change-Id: I287a05f3c90b1a71a5b7ee0f5c06a8840ebac4c9
Reviewed-on: http://gerrit.cloudera.org:8080/9590
Reviewed-by: Thomas Tauber-Marshall <tm...@cloudera.com>
Reviewed-by: Michael Ho <kw...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/45568e6c
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/45568e6c
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/45568e6c

Branch: refs/heads/2.x
Commit: 45568e6c38a85202bff10d4c20123c5144b367f2
Parents: cf7d770
Author: Zoram Thanga <zo...@cloudera.com>
Authored: Mon Mar 12 11:16:27 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 tests/query_test/test_observability.py | 105 +++++++++++++++-------------
 1 file changed, 56 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/45568e6c/tests/query_test/test_observability.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_observability.py b/tests/query_test/test_observability.py
index e24cd44..d9dedba 100644
--- a/tests/query_test/test_observability.py
+++ b/tests/query_test/test_observability.py
@@ -137,55 +137,6 @@ class TestObservability(ImpalaTestSuite):
     assert results.runtime_profile.count("AGGREGATION_NODE") == 2
     assert results.runtime_profile.count("PLAN_ROOT_SINK") == 2
 
-  # IMPALA-6399: Run this test serially to avoid a delay over the wait time in fetching
-  # the profile.
-  @pytest.mark.execute_serially
-  def test_query_profile_thrift_timestamps(self):
-    """Test that the query profile start and end time date-time strings have
-    nanosecond precision. Nanosecond precision is expected by management API clients
-    that consume Impala debug webpages."""
-    query = "select sleep(1000)"
-    handle = self.client.execute_async(query)
-    query_id = handle.get_handle().id
-    results = self.client.fetch(query, handle)
-    self.client.close()
-
-    MAX_WAIT = 300
-    start = time.time()
-    end = start + MAX_WAIT
-    while time.time() <= end:
-      # Sleep before trying to fetch the profile. This helps to prevent a warning when the
-      # profile is not yet available immediately. It also makes it less likely to
-      # introduce an error below in future changes by forgetting to sleep.
-      time.sleep(1)
-      tree = self.impalad_test_service.get_thrift_profile(query_id)
-      if not tree:
-        continue
-
-      # tree.nodes[1] corresponds to ClientRequestState::summary_profile_
-      # See be/src/service/client-request-state.[h|cc].
-      start_time = tree.nodes[1].info_strings["Start Time"]
-      end_time = tree.nodes[1].info_strings["End Time"]
-      # Start and End Times are of the form "2017-12-07 22:26:52.167711000"
-      start_time_sub_sec_str = start_time.split('.')[-1]
-      end_time_sub_sec_str = end_time.split('.')[-1]
-      if len(end_time_sub_sec_str) == 0:
-        elapsed = time.time() - start
-        logging.info("end_time_sub_sec_str hasn't shown up yet, elapsed=%d", elapsed)
-        continue
-
-      assert len(end_time_sub_sec_str) == 9, end_time
-      assert len(start_time_sub_sec_str) == 9, start_time
-      return True
-
-    # If we're here, we didn't get the final thrift profile from the debug web page.
-    # This could happen due to heavy system load. The test is then inconclusive.
-    # Log a message and fail this run.
-
-    dbg_str = "Debug thrift profile for query {0} not available in {1} seconds".format(
-      query_id, MAX_WAIT)
-    assert False, dbg_str
-
   def test_query_profile_contains_query_events(self):
     """Test that the expected events show up in a query profile."""
     event_regexes = [r'Query Timeline:',
@@ -236,3 +187,59 @@ class TestObservability(ImpalaTestSuite):
             event_regexes[event_regex_index] + " not in " + line + "\n" + runtime_profile
     assert event_regex_index == len(event_regexes), \
         "Didn't find all events in profile: \n" + runtime_profile
+
+class TestThriftProfile(ImpalaTestSuite):
+  @classmethod
+  def get_workload(self):
+    return 'functional-query'
+
+  # IMPALA-6399: Run this test serially to avoid a delay over the wait time in fetching
+  # the profile.
+  # This test needs to call self.client.close() to force computation of query end time,
+  # so it has to be in its own suite (IMPALA-6498).
+  @pytest.mark.execute_serially
+  def test_query_profile_thrift_timestamps(self):
+    """Test that the query profile start and end time date-time strings have
+    nanosecond precision. Nanosecond precision is expected by management API clients
+    that consume Impala debug webpages."""
+    query = "select sleep(5)"
+    handle = self.client.execute_async(query)
+    query_id = handle.get_handle().id
+    results = self.client.fetch(query, handle)
+    self.client.close()
+
+    MAX_WAIT = 300
+    start = time.time()
+    end = start + MAX_WAIT
+    while time.time() <= end:
+      # Sleep before trying to fetch the profile. This helps to prevent a warning when the
+      # profile is not yet available immediately. It also makes it less likely to
+      # introduce an error below in future changes by forgetting to sleep.
+      time.sleep(1)
+      tree = self.impalad_test_service.get_thrift_profile(query_id)
+      if not tree:
+        continue
+
+      # tree.nodes[1] corresponds to ClientRequestState::summary_profile_
+      # See be/src/service/client-request-state.[h|cc].
+      start_time = tree.nodes[1].info_strings["Start Time"]
+      end_time = tree.nodes[1].info_strings["End Time"]
+      # Start and End Times are of the form "2017-12-07 22:26:52.167711000"
+      start_time_sub_sec_str = start_time.split('.')[-1]
+      end_time_sub_sec_str = end_time.split('.')[-1]
+      if len(end_time_sub_sec_str) == 0:
+        elapsed = time.time() - start
+        logging.info("end_time_sub_sec_str hasn't shown up yet, elapsed=%d", elapsed)
+        continue
+
+      assert len(end_time_sub_sec_str) == 9, end_time
+      assert len(start_time_sub_sec_str) == 9, start_time
+      return True
+
+    # If we're here, we didn't get the final thrift profile from the debug web page.
+    # This could happen due to heavy system load. The test is then inconclusive.
+    # Log a message and fail this run.
+
+    dbg_str = "Debug thrift profile for query {0} not available in {1} seconds".format(
+      query_id, MAX_WAIT)
+    assert False, dbg_str


[03/21] impala git commit: IMPALA-6551: Change Kudu TPCDS and TPCH columns to DECIMAL

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q11.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q11.test b/testdata/workloads/tpch/queries/tpch-kudu-q11.test
deleted file mode 100644
index 76b1108..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q11.test
+++ /dev/null
@@ -1,1088 +0,0 @@
-====
----- QUERY: TPCH-Q11
-# Q11 - Important Stock Identification
-# Modifications: query was rewritten to not have a subquery in the having clause
-select
-  *
-from (
-  select
-    ps_partkey,
-    round(sum(ps_supplycost * ps_availqty), 2) as value
-  from
-    partsupp,
-    supplier,
-    nation
-  where
-    ps_suppkey = s_suppkey
-    and s_nationkey = n_nationkey
-    and n_name = 'GERMANY'
-  group by
-    ps_partkey
-) as inner_query
-where
-  value > (
-    select
-      round(sum(ps_supplycost * ps_availqty) * 0.0001, 2)
-    from
-      partsupp,
-      supplier,
-      nation
-    where
-      ps_suppkey = s_suppkey
-      and s_nationkey = n_nationkey
-      and n_name = 'GERMANY'
-  )
-order by
-  value desc
----- RESULTS
-129760,17538456.86
-166726,16503353.92
-191287,16474801.97
-161758,16101755.54
-34452,15983844.72
-139035,15907078.34
-9403,15451755.62
-154358,15212937.88
-38823,15064802.86
-85606,15053957.15
-33354,14408297.4
-154747,14407580.68
-82865,14235489.78
-76094,14094247.04
-222,13937777.74
-121271,13908336
-55221,13716120.47
-22819,13666434.28
-76281,13646853.68
-85298,13581154.93
-85158,13554904
-139684,13535538.72
-31034,13498025.25
-87305,13482847.04
-10181,13445148.75
-62323,13411824.3
-26489,13377256.38
-96493,13339057.83
-56548,13329014.97
-55576,13306843.35
-159751,13306614.48
-92406,13287414.5
-182636,13223726.74
-199969,13135288.21
-62865,13001926.94
-7284,12945298.19
-197867,12944510.52
-11562,12931575.51
-75165,12916918.12
-97175,12911283.5
-140840,12896562.23
-65241,12890600.46
-166120,12876927.22
-9035,12863828.7
-144616,12853549.3
-176723,12832309.74
-170884,12792136.58
-29790,12723300.33
-95213,12555483.73
-183873,12550533.05
-171235,12476538.3
-21533,12437821.32
-17290,12432159.5
-156397,12260623.5
-122611,12222812.98
-139155,12220319.25
-146316,12215800.61
-171381,12199734.52
-198633,12078226.95
-167417,12046637.62
-59512,12043468.76
-31688,12034893.64
-159586,12001505.84
-8993,11963814.3
-120302,11857707.55
-43536,11779340.52
-9552,11776909.16
-86223,11772205.08
-53776,11758669.65
-131285,11616953.74
-91628,11611114.83
-169644,11567959.72
-182299,11567462.05
-33107,11453818.76
-104184,11436657.44
-67027,11419127.14
-176869,11371451.71
-30885,11369674.79
-54420,11345076.88
-72240,11313951.05
-178708,11294635.17
-81298,11273686.13
-158324,11243442.72
-117095,11242535.24
-176793,11237733.38
-86091,11177793.79
-116033,11145434.36
-129058,11119112.2
-193714,11104706.39
-117195,11077217.96
-49851,11043701.78
-19791,11030662.62
-75800,11012401.62
-161562,10996371.69
-10119,10980015.75
-39185,10970042.56
-47223,10950022.13
-175594,10942923.05
-111295,10893675.61
-155446,10852764.57
-156391,10839810.38
-40884,10837234.19
-141288,10837130.21
-152388,10830977.82
-33449,10830858.72
-149035,10826130.02
-162620,10814275.68
-118324,10791788.1
-38932,10777541.75
-121294,10764225.22
-48721,10762582.49
-63342,10740132.6
-5614,10724668.8
-62266,10711143.1
-100202,10696675.55
-197741,10688560.72
-169178,10648522.8
-5271,10639392.65
-34499,10584177.1
-71108,10569117.56
-137132,10539880.47
-78451,10524873.24
-150827,10503810.48
-107237,10488030.84
-101727,10473558.1
-58708,10466280.44
-89768,10465477.22
-146493,10444291.58
-55424,10444006.48
-16560,10425574.74
-133114,10415097.9
-195810,10413625.2
-76673,10391977.18
-97305,10390890.57
-134210,10387210.02
-188536,10386529.92
-122255,10335760.32
-2682,10312966.1
-43814,10303086.61
-34767,10290405.18
-165584,10273705.89
-2231,10270415.55
-111259,10263256.56
-195578,10239795.82
-21093,10217531.3
-29856,10216932.54
-133686,10213345.76
-87745,10185509.4
-135153,10179379.7
-11773,10167410.84
-76316,10165151.7
-123076,10161225.78
-91894,10130462.19
-39741,10128387.52
-111753,10119780.98
-142729,10104748.89
-116775,10097750.42
-102589,10034784.36
-186268,10012181.57
-44545,10000286.48
-23307,9966577.5
-124281,9930018.9
-69604,9925730.640000001
-21971,9908982.029999999
-58148,9895894.4
-16532,9886529.9
-159180,9883744.43
-74733,9877582.880000001
-35173,9858275.92
-7116,9856881.02
-124620,9838589.140000001
-122108,9829949.35
-67200,9828690.689999999
-164775,9821424.439999999
-9039,9816447.720000001
-14912,9803102.199999999
-190906,9791315.699999999
-130398,9781674.27
-119310,9776927.210000001
-10132,9770930.779999999
-107211,9757586.25
-113958,9757065.5
-37009,9748362.689999999
-66746,9743528.76
-134486,9731922
-15945,9731096.449999999
-55307,9717745.800000001
-56362,9714922.83
-57726,9711792.1
-57256,9708621
-112292,9701653.08
-87514,9699492.529999999
-174206,9680562.02
-72865,9679043.34
-114357,9671017.439999999
-112807,9665019.210000001
-115203,9661018.73
-177454,9658906.35
-161275,9634313.710000001
-61893,9617095.439999999
-122219,9604888.199999999
-183427,9601362.58
-59158,9599705.960000001
-61931,9584918.98
-5532,9579964.140000001
-20158,9576714.380000001
-167199,9557413.08
-38869,9550279.529999999
-86949,9541943.699999999
-198544,9538613.92
-193762,9538238.939999999
-108807,9536247.16
-168324,9535647.99
-115588,9532195.039999999
-141372,9529702.140000001
-175120,9526068.66
-163851,9522808.83
-160954,9520359.449999999
-117757,9517882.800000001
-52594,9508325.76
-60960,9498843.060000001
-70272,9495775.619999999
-44050,9495515.359999999
-152213,9494756.960000001
-121203,9492601.300000001
-70114,9491012.300000001
-167588,9484741.109999999
-136455,9476241.779999999
-4357,9464355.640000001
-6786,9463632.57
-61345,9455336.699999999
-160826,9446754.84
-71275,9440138.4
-77746,9439118.35
-91289,9437472
-56723,9435102.16
-86647,9434604.18
-131234,9432120
-198129,9427651.359999999
-165530,9426193.68
-69233,9425053.92
-6243,9423304.66
-90110,9420422.699999999
-191980,9419368.359999999
-38461,9419316.07
-167873,9419024.49
-159373,9416950.15
-128707,9413428.5
-45267,9410863.779999999
-48460,9409793.93
-197672,9406887.68
-60884,9403442.4
-15209,9403245.310000001
-138049,9401262.1
-199286,9391770.699999999
-19629,9391236.4
-134019,9390615.15
-169475,9387639.58
-165918,9379510.439999999
-135602,9374251.539999999
-162323,9367566.51
-96277,9360850.68
-98336,9359671.289999999
-119781,9356395.73
-34440,9355365
-57362,9355180.1
-167236,9352973.84
-38463,9347530.939999999
-86749,9346826.439999999
-170007,9345699.9
-193087,9343744
-150383,9332576.75
-60932,9329582.02
-128420,9328206.35
-162145,9327722.880000001
-55686,9320304.4
-163080,9304916.960000001
-160583,9303515.92
-118153,9298606.560000001
-152634,9282184.57
-84731,9276586.92
-119989,9273814.199999999
-114584,9269698.65
-131817,9268570.08
-29068,9256583.880000001
-44116,9255922
-115818,9253311.91
-103388,9239218.08
-186118,9236209.119999999
-155809,9235410.84
-147003,9234847.99
-27769,9232511.640000001
-112779,9231927.359999999
-124851,9228982.68
-158488,9227216.4
-83328,9224792.199999999
-136797,9222927.09
-141730,9216370.68
-87304,9215695.5
-156004,9215557.9
-140740,9215329.199999999
-100648,9212185.08
-174774,9211718
-37644,9211578.6
-48807,9209496.24
-95940,9207948.4
-141586,9206699.220000001
-147248,9205654.949999999
-61372,9205228.76
-52970,9204415.949999999
-26430,9203710.51
-28504,9201669.199999999
-25810,9198878.5
-125329,9198688.5
-167867,9194022.720000001
-134767,9191444.720000001
-127745,9191271.56
-69208,9187110
-155222,9186469.16
-196916,9182995.82
-195590,9176353.119999999
-169155,9175176.09
-81558,9171946.5
-185136,9171293.039999999
-114790,9168509.1
-194142,9165836.609999999
-167639,9161165
-11241,9160789.460000001
-82628,9160155.539999999
-41399,9148338
-30755,9146196.84
-6944,9143574.58
-6326,9138803.16
-101296,9135657.619999999
-181479,9121093.300000001
-76898,9120983.1
-64274,9118745.25
-175826,9117387.99
-142215,9116876.880000001
-103415,9113128.619999999
-119765,9110768.789999999
-107624,9108837.449999999
-84215,9105257.359999999
-73774,9102651.92
-173972,9102069
-69817,9095513.880000001
-86943,9092253
-138859,9087719.300000001
-162273,9085296.48
-175945,9080401.210000001
-16836,9075715.439999999
-70224,9075265.949999999
-139765,9074755.890000001
-30319,9073233.1
-3851,9072657.24
-181271,9070631.52
-162184,9068835.779999999
-81683,9067258.470000001
-153028,9067010.51
-123324,9061870.949999999
-186481,9058608.300000001
-167680,9052908.76
-165293,9050545.699999999
-122148,9046298.17
-138604,9045840.800000001
-78851,9044822.6
-137280,9042355.34
-8823,9040855.1
-163900,9040848.48
-75600,9035392.449999999
-81676,9031999.4
-46033,9031460.58
-194917,9028500
-133936,9026949.02
-33182,9024971.1
-34220,9021485.390000001
-20118,9019942.6
-178258,9019881.66
-15560,9017687.279999999
-111425,9016198.560000001
-95942,9015585.119999999
-132709,9015240.15
-39731,9014746.949999999
-154307,9012571.199999999
-23769,9008157.6
-93328,9007211.199999999
-142826,8998297.439999999
-188792,8996014
-68703,8994982.220000001
-145280,8990941.050000001
-150725,8985686.16
-172046,8982469.52
-70476,8967629.5
-124988,8966805.220000001
-17937,8963319.76
-177372,8954873.640000001
-137994,8950916.789999999
-84019,8950039.98
-40389,8946158.199999999
-69187,8941054.140000001
-4863,8939044.92
-50465,8930503.140000001
-43686,8915543.84
-131352,8909053.59
-198916,8906940.029999999
-135932,8905282.949999999
-104673,8903682
-152308,8903244.08
-135298,8900323.199999999
-156873,8899429.1
-157454,8897339.199999999
-75415,8897068.09
-46325,8895569.09
-1966,8895117.060000001
-24576,8895034.75
-19425,8890156.6
-169735,8890085.560000001
-32225,8889829.279999999
-124537,8889770.710000001
-146327,8887836.23
-121562,8887740.4
-44731,8882444.949999999
-93141,8881850.880000001
-187871,8873506.18
-71709,8873057.279999999
-151913,8869321.17
-33786,8868955.390000001
-35902,8868126.060000001
-23588,8867769.9
-24508,8867616
-161282,8866661.43
-188061,8862304
-132847,8862082
-166843,8861200.800000001
-30609,8860214.73
-56191,8856546.960000001
-160740,8852685.43
-71229,8846106.99
-91208,8845541.279999999
-10995,8845306.560000001
-78094,8839938.289999999
-36489,8838538.1
-198437,8836494.84
-151693,8833807.640000001
-185367,8829791.369999999
-65682,8820622.890000001
-65421,8819329.24
-122225,8816821.859999999
-85330,8811013.16
-64555,8810643.119999999
-104188,8808211.02
-54411,8805703.4
-39438,8805282.560000001
-70795,8800060.92
-20383,8799073.279999999
-21952,8798624.189999999
-63584,8796590
-158768,8796422.949999999
-166588,8796214.380000001
-120600,8793558.060000001
-157202,8788287.880000001
-55358,8786820.75
-168322,8786670.73
-25143,8786324.800000001
-5368,8786274.140000001
-114025,8786201.119999999
-97744,8785315.939999999
-164327,8784503.859999999
-76542,8782613.279999999
-4731,8772846.699999999
-157590,8772006.449999999
-154276,8771733.91
-28705,8771576.640000001
-100226,8769455
-179195,8769185.16
-184355,8768118.050000001
-120408,8768011.119999999
-63145,8761991.960000001
-53135,8753491.800000001
-173071,8750508.800000001
-41087,8749436.789999999
-194830,8747438.4
-43496,8743359.300000001
-30235,8741611
-26391,8741399.640000001
-191816,8740258.720000001
-47616,8737229.68
-152101,8734432.76
-163784,8730514.34
-5134,8728424.640000001
-155241,8725429.859999999
-188814,8724182.4
-140782,8720378.75
-153141,8719407.51
-169373,8718609.060000001
-41335,8714773.800000001
-197450,8714617.32
-87004,8714017.789999999
-181804,8712257.76
-122814,8711119.140000001
-109939,8709193.16
-98094,8708780.039999999
-74630,8708040.75
-197291,8706519.09
-184173,8705467.449999999
-192175,8705411.119999999
-19471,8702536.119999999
-18052,8702155.699999999
-135560,8698137.720000001
-152791,8697325.800000001
-170953,8696909.189999999
-116137,8696687.17
-7722,8696589.4
-49788,8694846.710000001
-13252,8694822.42
-12633,8694559.359999999
-193438,8690426.720000001
-17326,8689329.16
-96124,8679794.58
-143802,8676626.48
-30389,8675826.6
-75250,8675257.140000001
-72613,8673524.939999999
-123520,8672456.25
-325,8667741.279999999
-167291,8667556.18
-150119,8663403.539999999
-88420,8663355.4
-179784,8653021.34
-130884,8651970
-172611,8648217
-85373,8647796.22
-122717,8646758.539999999
-113431,8646348.34
-66015,8643349.4
-33141,8643243.18
-69786,8637396.92
-181857,8637393.279999999
-122939,8636378
-196223,8635391.02
-50532,8632648.24
-58102,8632614.539999999
-93581,8632372.359999999
-52804,8632109.25
-755,8627091.68
-16597,8623357.050000001
-119041,8622397
-89050,8621185.98
-98696,8620784.82
-94399,8620524
-151295,8616671.02
-56417,8613450.35
-121322,8612948.23
-126883,8611373.42
-29155,8610163.640000001
-114530,8608471.74
-131007,8607394.82
-128715,8606833.619999999
-72522,8601479.98
-144061,8595718.74
-83503,8595034.199999999
-112199,8590717.439999999
-9227,8587350.42
-116318,8585910.66
-41248,8585559.640000001
-159398,8584821
-105966,8582308.789999999
-137876,8580641.300000001
-122272,8580400.77
-195717,8577278.1
-165295,8571121.92
-5840,8570728.74
-120860,8570610.439999999
-66692,8567540.52
-135596,8563276.310000001
-150576,8562794.1
-7500,8562393.84
-107716,8561541.560000001
-100611,8559995.85
-171192,8557390.08
-107660,8556696.6
-13461,8556545.119999999
-90310,8555131.51
-141493,8553782.93
-71286,8552682
-136423,8551300.76
-54241,8550785.25
-120325,8549976.6
-424,8547527.1
-196543,8545907.09
-13042,8542717.18
-58332,8536074.689999999
-9191,8535663.92
-134357,8535429.9
-96207,8534900.6
-92292,8530618.779999999
-181093,8528303.52
-105064,8527491.6
-59635,8526854.08
-136974,8524351.560000001
-126694,8522783.369999999
-6247,8522606.9
-139447,8522521.92
-96313,8520949.92
-108454,8520916.25
-181254,8519496.1
-71117,8519223
-131703,8517215.279999999
-59312,8510568.359999999
-2903,8509960.35
-102838,8509527.689999999
-162806,8508906.050000001
-41527,8508222.359999999
-118416,8505858.359999999
-180203,8505024.16
-14773,8500598.279999999
-140446,8499514.24
-199641,8497362.59
-109240,8494617.119999999
-150268,8494188.380000001
-45310,8492380.65
-36552,8490733.6
-199690,8490145.800000001
-185353,8488726.68
-163615,8484985.01
-196520,8483545.039999999
-133438,8483482.35
-77285,8481442.32
-55824,8476893.9
-76753,8475522.119999999
-46129,8472717.960000001
-28358,8472515.5
-9317,8472145.32
-33823,8469721.439999999
-39055,8469145.07
-91471,8468874.560000001
-142299,8466039.550000001
-97672,8464119.800000001
-134712,8461781.789999999
-157988,8460123.199999999
-102284,8458652.439999999
-73533,8458453.32
-90599,8457874.859999999
-112160,8457863.359999999
-124792,8457633.699999999
-66097,8457573.15
-165271,8456969.01
-146925,8454887.91
-164277,8454838.5
-131290,8454811.199999999
-179386,8450909.9
-90486,8447873.859999999
-175924,8444421.66
-185922,8442394.880000001
-38492,8436438.32
-172511,8436287.34
-139539,8434180.289999999
-11926,8433199.52
-55889,8431449.880000001
-163068,8431116.4
-138772,8428406.359999999
-126821,8425180.68
-22091,8420687.880000001
-55981,8419434.380000001
-100960,8419403.460000001
-172568,8417955.210000001
-63135,8415945.529999999
-137651,8413170.35
-191353,8413039.84
-62988,8411571.48
-103417,8411541.119999999
-12052,8411519.279999999
-104260,8408516.550000001
-157129,8405730.08
-77254,8405537.220000001
-112966,8403512.890000001
-168114,8402764.560000001
-49940,8402328.199999999
-52017,8398753.6
-176179,8398087
-100215,8395906.609999999
-61256,8392811.199999999
-15366,8388907.800000001
-109479,8388027.2
-66202,8386522.83
-81707,8385761.19
-51727,8385426.4
-9980,8382754.62
-174403,8378575.73
-54558,8378041.92
-3141,8377378.22
-134829,8377105.52
-145056,8376920.76
-194020,8375157.64
-7117,8373982.27
-120146,8373796.2
-126843,8370761.28
-62117,8369493.44
-111221,8367525.81
-159337,8366092.26
-173903,8365428.48
-136438,8364065.45
-56684,8363198
-137597,8363185.94
-20039,8361138.24
-121326,8359635.52
-48435,8352863.1
-1712,8349107
-167190,8347238.7
-32113,8346452.04
-40580,8342983.32
-74785,8342519.13
-14799,8342236.75
-177291,8341736.83
-198956,8340370.65
-69179,8338465.99
-118764,8337616.56
-128814,8336435.56
-82729,8331766.88
-152048,8330638.99
-171085,8326259.5
-126730,8325974.4
-77525,8323282.5
-170653,8322840.5
-5257,8320350.78
-67350,8318987.56
-109008,8317836.54
-199043,8316603.54
-139969,8316551.54
-22634,8316531.24
-173309,8315750.25
-10887,8315019.36
-42392,8312895.96
-126040,8312623.2
-101590,8304555.42
-46891,8302192.12
-138721,8301745.62
-113715,8301533.2
-78778,8299685.64
-142908,8299447.77
-64419,8297631.8
-21396,8296272.27
-4180,8295646.92
-63534,8295383.67
-135957,8294389.86
-30126,8291920.32
-158427,8288938
-14545,8288395.92
-75548,8288287.2
-64473,8286137.44
-149553,8285714.88
-151284,8283526.65
-171091,8282934.36
-194256,8278985.34
-952,8276136
-121541,8275390.26
-177664,8275315.2
-51117,8274504.3
-66770,8273407.8
-37238,8272728.06
-46679,8270486.55
-165852,8268312.6
-99458,8266564.47
-114519,8265493.54
-7231,8264881.5
-19033,8264826.56
-125123,8262732.65
-18642,8261578.99
-50386,8261380.05
-193770,8259578.82
-7276,8258101.6
-178045,8253904.15
-49033,8253696.23
-187195,8251334.58
-10590,8249227.4
-143779,8247057.7
-35205,8245675.17
-19729,8245081.6
-144946,8240479.8
-123786,8239581.24
-70843,8237973.2
-112437,8236907.52
-5436,8236039.57
-163754,8235471.16
-115945,8234811.36
-27918,8233957.88
-105712,8233571.86
-41007,8229431.79
-40476,8226640.41
-145620,8221371.6
-7771,8220413.33
-86424,8215572.61
-129137,8215478.4
-76020,8210495.36
-140213,8209831.8
-32379,8208338.88
-130616,8207715.75
-195469,8206609.8
-191805,8205147.75
-90906,8200951.2
-170910,8195558.01
-105399,8193122.63
-123798,8192385.97
-90218,8191689.16
-114766,8189339.54
-11289,8187354.72
-178308,8185750.5
-71271,8185519.24
-1115,8184903.38
-152636,8184530.72
-151619,8182909.05
-116943,8181072.69
-28891,8181051.54
-47049,8180955
-158827,8180470.9
-92620,8179671.55
-20814,8176953.54
-179323,8176795.55
-193453,8174343.94
-56888,8173342
-28087,8169876.3
-164254,8169632.35
-57661,8168848.16
-7363,8167538.05
-164499,8167512.08
-197557,8165940.45
-5495,8164805.22
-966,8163824.79
-98435,8161771.45
-127227,8161344.92
-194100,8160978.78
-40134,8160358.08
-107341,8159952.05
-6790,8158792.66
-43851,8157101.4
-51295,8156419.2
-69512,8151537
-164274,8149869.93
-130854,8145338.85
-186865,8143586.82
-176629,8141411.2
-193739,8141377.77
-6810,8139822.6
-27732,8136724.96
-50616,8134089.82
-123908,8128920.54
-140994,8128470.82
-99039,8128290.78
-62735,8124940.5
-47829,8122796.5
-192635,8122687.57
-192429,8119268
-145812,8119165.63
-42896,8118529.8
-146877,8118266.16
-60882,8116095.04
-18254,8114783.04
-165464,8114571.8
-57936,8111927.25
-52226,8110723.32
-128571,8106788.8
-100308,8105837.04
-8872,8102395.62
-58867,8102033.19
-145153,8100222.84
-172088,8098138.2
-59398,8095845.45
-89395,8093576.1
-171961,8093538
-88736,8090762.16
-174053,8090350.11
-102237,8089103.22
-43041,8086537.9
-110219,8085296.9
-126738,8084199.2
-44787,8083628.4
-31277,8083580.76
-93595,8082188.8
-189040,8080257.21
-59851,8079024.24
-175100,8077904.01
-43429,8076729.96
-154199,8074940.76
-60963,8073894.4
-8768,8072760.96
-66095,8071421.7
-111552,8068184.48
-24563,8067500.4
-16167,8067495.24
-12662,8067248.85
-94540,8063727.16
-23308,8063463.18
-27390,8062823.25
-130660,8062787.48
-8608,8062411.16
-181552,8062008.3
-199319,8060248.56
-55475,8058850.92
-142711,8057926.58
-103499,8056978
-105943,8056698.75
-8432,8053052.16
-149392,8049675.69
-101248,8048855.49
-140962,8047260.7
-87101,8046651.83
-133107,8046476.73
-45126,8045924.4
-87508,8042966.39
-124711,8042722.72
-173169,8042224.41
-175161,8041331.98
-167787,8040075.78
-3242,8038855.53
-114789,8038628.35
-43833,8038545.83
-141198,8035110.72
-137248,8034109.35
-96673,8033491.2
-32180,8032380.72
-166493,8031902.4
-66959,8031839.4
-85628,8029693.44
-110971,8029469.7
-130395,8027463.92
-7757,8026840.37
-178446,8025379.09
-41295,8024785.53
-100956,8024179.3
-131917,8021604.78
-24224,8020463.52
-2073,8020009.64
-121622,8018462.17
-14357,8016906.3
-135601,8016209.44
-58458,8016192.52
-73036,8015799
-184722,8015680.31
-151664,8014821.96
-195090,8012680.2
-162609,8011241
-83532,8009753.85
-50166,8007137.89
-181562,8006805.96
-175165,8005319.76
-62500,8005316.28
-36342,8004333.4
-128435,8004242.88
-92516,8003836.8
-30802,8003710.88
-107418,8000430.3
-46620,7999778.35
-191803,7994734.15
-106343,7993087.76
-59362,7990397.46
-8329,7990052.9
-75133,7988244
-179023,7986829.62
-135899,7985726.64
-5824,7985340.02
-148579,7984889.56
-95888,7984735.72
-9791,7982699.79
-170437,7982370.72
-39782,7977858.24
-20605,7977556
-28682,7976960
-42172,7973399
-56137,7971405.4
-64729,7970769.72
-98643,7968603.73
-153787,7967535.58
-8932,7967222.19
-20134,7965713.28
-197635,7963507.58
-80408,7963312.17
-37728,7961875.68
-26624,7961772.31
-44736,7961144.1
-29763,7960605.03
-36147,7959463.68
-146040,7957587.66
-115469,7957485.14
-142276,7956790.63
-181280,7954037.35
-115096,7953047.55
-109650,7952258.73
-93862,7951992.24
-158325,7950728.3
-55952,7950387.06
-122397,7947106.27
-28114,7946945.72
-11966,7945197.48
-47814,7944083
-85096,7943691.06
-51657,7943593.77
-196680,7943578.89
-13141,7942730.34
-193327,7941036.25
-152612,7940663.71
-139680,7939242.36
-31134,7938318.3
-45636,7937240.85
-56694,7936015.95
-8114,7933921.88
-71518,7932261.69
-72922,7930400.64
-146699,7929167.4
-92387,7928972.67
-186289,7928786.19
-95952,7927972.78
-196514,7927180.7
-4403,7925729.04
-2267,7925649.37
-45924,7925047.68
-11493,7916722.23
-104478,7916253.6
-166794,7913842
-161995,7910874.27
-23538,7909752.06
-41093,7909579.92
-112073,7908617.57
-92814,7908262.5
-88919,7907992.5
-79753,7907933.88
-108765,7905338.98
-146530,7905336.6
-71475,7903367.58
-36289,7901946.5
-61739,7900794
-52338,7898638.08
-194299,7898421.24
-105235,7897829.94
-77207,7897752.72
-96712,7897575.27
-10157,7897046.25
-171154,7896814.5
-79373,7896186
-113808,7893353.88
-27901,7892952
-128820,7892882.72
-25891,7890511.2
-122819,7888881.02
-154731,7888301.33
-101674,7879324.6
-51968,7879102.21
-72073,7877736.11
-5182,7874521.73
----- TYPES
-BIGINT, double
-====

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q12.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q12.test b/testdata/workloads/tpch/queries/tpch-kudu-q12.test
deleted file mode 100644
index ce40803..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q12.test
+++ /dev/null
@@ -1,37 +0,0 @@
-====
----- QUERY: TPCH-Q12
-# Q12 - Shipping Mode and Order Priority Query
-select
-  l_shipmode,
-  sum(case
-    when o_orderpriority = '1-URGENT'
-      or o_orderpriority = '2-HIGH'
-    then 1
-    else 0
-  end) as high_line_count,
-  sum(case
-    when o_orderpriority <> '1-URGENT'
-      and o_orderpriority <> '2-HIGH'
-    then 1
-    else 0
-  end) as low_line_count
-from
-  orders,
-  lineitem
-where
-  o_orderkey = l_orderkey
-  and l_shipmode in ('MAIL', 'SHIP')
-  and l_commitdate < l_receiptdate
-  and l_shipdate < l_commitdate
-  and l_receiptdate >= '1994-01-01'
-  and l_receiptdate < '1995-01-01'
-group by
-  l_shipmode
-order by
-  l_shipmode
----- RESULTS
-'MAIL',6202,9324
-'SHIP',6200,9262
----- TYPES
-string, bigint, bigint
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q13.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q13.test b/testdata/workloads/tpch/queries/tpch-kudu-q13.test
deleted file mode 100644
index d09613b..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q13.test
+++ /dev/null
@@ -1,69 +0,0 @@
-====
----- QUERY: TPCH-Q13
-# Q13 - Customer Distribution Query
-select
-  c_count,
-  count(*) as custdist
-from (
-  select
-    c_custkey,
-    count(o_orderkey) as c_count
-  from
-    customer left outer join orders on (
-      c_custkey = o_custkey
-      and o_comment not like '%special%requests%'
-    )
-  group by
-    c_custkey
-  ) as c_orders
-group by
-  c_count
-order by
-  custdist desc,
-  c_count desc
----- RESULTS
-0,50005
-9,6641
-10,6532
-11,6014
-8,5937
-12,5639
-13,5024
-19,4793
-7,4687
-17,4587
-18,4529
-20,4516
-15,4505
-14,4446
-16,4273
-21,4190
-22,3623
-6,3265
-23,3225
-24,2742
-25,2086
-5,1948
-26,1612
-27,1179
-4,1007
-28,893
-29,593
-3,415
-30,376
-31,226
-32,148
-2,134
-33,75
-34,50
-35,37
-1,17
-36,14
-38,5
-37,5
-40,4
-41,2
-39,1
----- TYPES
-BIGINT, BIGINT
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q14.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q14.test b/testdata/workloads/tpch/queries/tpch-kudu-q14.test
deleted file mode 100644
index 9af3c03..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q14.test
+++ /dev/null
@@ -1,21 +0,0 @@
-====
----- QUERY: TPCH-Q14
-# Q14 - Promotion Effect
-select
-  round(100.00 * sum(case
-    when p_type like 'PROMO%'
-    then l_extendedprice * (1 - l_discount)
-    else 0.0
-    end) / sum(l_extendedprice * (1 - l_discount)), 4) as promo_revenue
-from
-  lineitem,
-  part
-where
-  l_partkey = p_partkey
-  and l_shipdate >= '1995-09-01'
-  and l_shipdate < '1995-10-01'
----- RESULTS
-16.3808
----- TYPES
-double
-====
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/impala/blob/f6ad4e6b/testdata/workloads/tpch/queries/tpch-kudu-q15.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch/queries/tpch-kudu-q15.test b/testdata/workloads/tpch/queries/tpch-kudu-q15.test
deleted file mode 100644
index 203a15a..0000000
--- a/testdata/workloads/tpch/queries/tpch-kudu-q15.test
+++ /dev/null
@@ -1,38 +0,0 @@
-====
----- QUERY: TPCH-Q15
-# Q15 - Top Supplier Query
-with revenue_view as (
-  select
-    l_suppkey as supplier_no,
-    round(sum(l_extendedprice * (1 - l_discount)), 1) as total_revenue
-  from
-    lineitem
-  where
-    l_shipdate >= '1996-01-01'
-    and l_shipdate < '1996-04-01'
-  group by
-    l_suppkey)
-select
-  s_suppkey,
-  s_name,
-  s_address,
-  s_phone,
-  total_revenue
-from
-  supplier,
-  revenue_view
-where
-  s_suppkey = supplier_no
-  and total_revenue = (
-    select
-      max(total_revenue)
-    from
-      revenue_view
-    )
-order by
-  s_suppkey
----- RESULTS
-8449,'Supplier#000008449','Wp34zim9qYFbVctdW','20-469-856-8873',1772627.2
----- TYPES
-BIGINT, STRING, STRING, STRING, DOUBLE
-====
\ No newline at end of file


[09/21] impala git commit: IMPALA-6589: remove invalid DCHECK in parquet reader

Posted by ta...@apache.org.
IMPALA-6589: remove invalid DCHECK in parquet reader

The DCHECK was only valid if the Parquet file metadata is internally
consistent, with the number of values reported by the metadata
matching the number of encoded levels.

The DCHECK was intended to directly detect misuse of the RleBatchDecoder
interface, which would lead to incorrect results. However, our other
test coverage for reading Parquet files is sufficient to test the
correctness of level decoding.

Testing:
Added a minimal corrupt test file that reproduces the issue.

Change-Id: Idd6e09f8c8cca8991be5b5b379f6420adaa97daa
Reviewed-on: http://gerrit.cloudera.org:8080/9556
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/8a861541
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/8a861541
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/8a861541

Branch: refs/heads/2.x
Commit: 8a861541d3528ba579e9853637dbafe9efe58c07
Parents: 614d0ff
Author: Tim Armstrong <ta...@cloudera.com>
Authored: Thu Mar 8 09:32:45 2018 -0800
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 be/src/exec/parquet-column-readers.cc           |  25 ++++++++++++++++---
 be/src/exec/parquet-column-readers.h            |   6 +++++
 testdata/data/README                            |   6 +++++
 .../data/num_values_def_levels_mismatch.parquet | Bin 0 -> 252 bytes
 .../parquet-num-values-def-levels-mismatch.test |   6 +++++
 tests/query_test/test_scanners.py               |  11 ++++++++
 6 files changed, 50 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/be/src/exec/parquet-column-readers.cc
----------------------------------------------------------------------
diff --git a/be/src/exec/parquet-column-readers.cc b/be/src/exec/parquet-column-readers.cc
index 2939691..09842c5 100644
--- a/be/src/exec/parquet-column-readers.cc
+++ b/be/src/exec/parquet-column-readers.cc
@@ -180,7 +180,7 @@ bool ParquetLevelDecoder::FillCache(int batch_size, int* num_cached_levels) {
   DCHECK(!CacheHasNext());
   DCHECK(num_cached_levels != nullptr);
   DCHECK_GE(max_level_, 0);
-  DCHECK_EQ(num_cached_levels_ % 32, 0) << "Last batch was not a multiple of 32";
+  DCHECK_GE(*num_cached_levels, 0);
   cached_level_idx_ = 0;
   if (max_level_ == 0) {
     // No levels to read, e.g., because the field is required. The cache was
@@ -593,6 +593,7 @@ class ScalarColumnReader : public BaseScalarColumnReader {
     parent_->parse_status_ = Status(TErrorCode::PARQUET_DICT_DECODE_FAILURE, filename(),
         slot_desc_->type().DebugString(), stream_->file_offset());
   }
+
   void __attribute__((noinline)) SetPlainDecodeError() {
     parent_->parse_status_ = Status(TErrorCode::PARQUET_CORRUPT_PLAIN_VALUE, filename(),
         slot_desc_->type().DebugString(), stream_->file_offset());
@@ -1202,15 +1203,17 @@ bool BaseScalarColumnReader::NextLevels() {
   // The compiler can optimize these two conditions into a single branch by treating
   // def_level_ as unsigned.
   if (UNLIKELY(def_level_ < 0 || def_level_ > max_def_level())) {
-    parent_->parse_status_.MergeStatus(Status(Substitute("Corrupt Parquet file '$0': "
-        "invalid def level $1 > max def level $2 for column '$3'", filename(),
-        def_level_, max_def_level(), schema_element().name)));
+    SetLevelDecodeError("def", def_level_, max_def_level());
     return false;
   }
 
   if (ADVANCE_REP_LEVEL && max_rep_level() > 0) {
     // Repetition level is only present if this column is nested in any collection type.
     rep_level_ = rep_levels_.ReadLevel();
+    if (UNLIKELY(rep_level_ < 0 || rep_level_ > max_rep_level())) {
+      SetLevelDecodeError("rep", rep_level_, max_rep_level());
+      return false;
+    }
     // Reset position counter if we are at the start of a new parent collection.
     if (rep_level_ <= max_rep_level() - 1) pos_current_value_ = 0;
   }
@@ -1232,6 +1235,20 @@ bool BaseScalarColumnReader::NextPage() {
   return true;
 }
 
+void BaseScalarColumnReader::SetLevelDecodeError(const char* level_name,
+    int decoded_level, int max_level) {
+  if (decoded_level < 0) {
+    DCHECK_EQ(decoded_level, HdfsParquetScanner::INVALID_LEVEL);
+    parent_->parse_status_.MergeStatus(Status(Substitute("Corrupt Parquet file '$0': "
+        "could not read all $1 levels for column '$2'", filename(),
+        level_name, schema_element().name)));
+  } else {
+    parent_->parse_status_.MergeStatus(Status(Substitute("Corrupt Parquet file '$0': "
+        "invalid $1 level $2 > max $1 level $3 for column '$4'", filename(),
+        level_name, decoded_level, max_level, schema_element().name)));
+  }
+}
+
 bool CollectionColumnReader::NextLevels() {
   DCHECK(!children_.empty());
   DCHECK_LE(rep_level_, new_collection_rep_level());

http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/be/src/exec/parquet-column-readers.h
----------------------------------------------------------------------
diff --git a/be/src/exec/parquet-column-readers.h b/be/src/exec/parquet-column-readers.h
index 5186813..6b92ccb 100644
--- a/be/src/exec/parquet-column-readers.h
+++ b/be/src/exec/parquet-column-readers.h
@@ -506,6 +506,12 @@ class BaseScalarColumnReader : public ParquetColumnReader {
     return page_encoding != parquet::Encoding::PLAIN_DICTIONARY
         && slot_desc_ != nullptr && slot_desc_->type().IsVarLenStringType();
   }
+
+  /// Slow-path status construction code for def/rep decoding errors. 'level_name' is
+  /// either "rep" or "def", 'decoded_level' is the value returned from
+  /// ParquetLevelDecoder::ReadLevel() and 'max_level' is the maximum allowed value.
+  void __attribute__((noinline)) SetLevelDecodeError(const char* level_name,
+      int decoded_level, int max_level);
 };
 
 /// Collections are not materialized directly in parquet files; only scalar values appear

http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/testdata/data/README
----------------------------------------------------------------------
diff --git a/testdata/data/README b/testdata/data/README
index f02e70b..928d435 100644
--- a/testdata/data/README
+++ b/testdata/data/README
@@ -162,3 +162,9 @@ compression codec. The data in the file is the whole of the "alltypestiny" data
 the same columns: id int, bool_col boolean, tinyint_col tinyint, smallint_col smallint,
 int_col int, bigint_col bigint, float_col float, double_col double,
 date_string_col string, string_col string, timestamp_col timestamp, year int, month int
+
+num_values_def_levels_mismatch.parquet:
+A file with a single boolean column with page metadata reporting 2 values but only def
+levels for a single literal value. Generated by hacking Impala's parquet writer to
+increment page.header.data_page_header.num_values. This caused Impala to hit a DCHECK
+(IMPALA-6589).

http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/testdata/data/num_values_def_levels_mismatch.parquet
----------------------------------------------------------------------
diff --git a/testdata/data/num_values_def_levels_mismatch.parquet b/testdata/data/num_values_def_levels_mismatch.parquet
new file mode 100644
index 0000000..92f6e60
Binary files /dev/null and b/testdata/data/num_values_def_levels_mismatch.parquet differ

http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/testdata/workloads/functional-query/queries/QueryTest/parquet-num-values-def-levels-mismatch.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/parquet-num-values-def-levels-mismatch.test b/testdata/workloads/functional-query/queries/QueryTest/parquet-num-values-def-levels-mismatch.test
new file mode 100644
index 0000000..47fbc1a
--- /dev/null
+++ b/testdata/workloads/functional-query/queries/QueryTest/parquet-num-values-def-levels-mismatch.test
@@ -0,0 +1,6 @@
+====
+---- QUERY
+select * from num_values_def_levels_mismatch
+---- CATCH
+could not read all def levels for column '_c0'
+====

http://git-wip-us.apache.org/repos/asf/impala/blob/8a861541/tests/query_test/test_scanners.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_scanners.py b/tests/query_test/test_scanners.py
index a0c36c7..baa031e 100644
--- a/tests/query_test/test_scanners.py
+++ b/tests/query_test/test_scanners.py
@@ -430,6 +430,17 @@ class TestParquet(ImpalaTestSuite):
         "/testdata/data/bad_codec.parquet", tbl_loc])
     self.run_test_case('QueryTest/parquet-bad-codec', vector, unique_database)
 
+  def test_num_values_def_levels_mismatch(self, vector, unique_database):
+    """IMPALA-6589: test the bad num_values handled correctly. """
+    self.client.execute(("""CREATE TABLE {0}.num_values_def_levels_mismatch (_c0 BOOLEAN)
+        STORED AS PARQUET""").format(unique_database))
+    tbl_loc = get_fs_path("/test-warehouse/%s.db/%s" % (unique_database,
+        "num_values_def_levels_mismatch"))
+    check_call(['hdfs', 'dfs', '-copyFromLocal', os.environ['IMPALA_HOME'] +
+        "/testdata/data/num_values_def_levels_mismatch.parquet", tbl_loc])
+    self.run_test_case('QueryTest/parquet-num-values-def-levels-mismatch',
+        vector, unique_database)
+
   @SkipIfS3.hdfs_block_size
   @SkipIfADLS.hdfs_block_size
   @SkipIfIsilon.hdfs_block_size


[08/21] impala git commit: IMPALA-6682: Remove MD5 assumption from pypi download script

Posted by ta...@apache.org.
IMPALA-6682: Remove MD5 assumption from pypi download script

pip_download.py assumes the python repository to use md5 as the hash
algorithm, which is not required by PEP-503 and not always true in
reality. This patch removes this assumption and enables support of all
hash algorithms in python hashlib.

Testing: buildall.sh works with 2 repos. One uses md5 and another uses
sha-256.

Change-Id: Ie78f851490cbab10daa654aece36dab6e6c4329b
Reviewed-on: http://gerrit.cloudera.org:8080/9683
Reviewed-by: Tianyi Wang <tw...@cloudera.com>
Reviewed-by: Taras Bobrovytsky <tb...@cloudera.com>
Tested-by: Impala Public Jenkins
Reviewed-on: http://gerrit.cloudera.org:8080/9709
Reviewed-by: Lars Volker <lv...@cloudera.com>
Tested-by: Lars Volker <lv...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/185127a3
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/185127a3
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/185127a3

Branch: refs/heads/2.x
Commit: 185127a322d432ce92ba7a5e488f2776024faaf3
Parents: c5e1f24
Author: Tianyi Wang <tw...@cloudera.com>
Authored: Thu Mar 15 16:41:05 2018 -0700
Committer: Lars Volker <lv...@cloudera.com>
Committed: Sun Mar 18 17:43:11 2018 +0000

----------------------------------------------------------------------
 infra/python/deps/pip_download.py | 48 +++++++++++++++++++++-------------
 1 file changed, 30 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/185127a3/infra/python/deps/pip_download.py
----------------------------------------------------------------------
diff --git a/infra/python/deps/pip_download.py b/infra/python/deps/pip_download.py
index cc9b412..5a79b80 100755
--- a/infra/python/deps/pip_download.py
+++ b/infra/python/deps/pip_download.py
@@ -21,12 +21,11 @@
 # over which archive type is downloaded and what post-download steps are executed.
 # This script requires Python 2.6+.
 
-import json
+import hashlib
 import os
 import os.path
 import re
 import sys
-from hashlib import md5
 from random import randint
 from time import sleep
 from urllib import urlopen, URLopener
@@ -39,9 +38,21 @@ PYPI_MIRROR = os.environ.get('PYPI_MIRROR', 'https://pypi.python.org')
 REQUIREMENTS_FILES = ['requirements.txt', 'compiled-requirements.txt',
                       'kudu-requirements.txt', 'adls-requirements.txt']
 
-def check_md5sum(filename, expected_md5):
-  actual_md5 = md5(open(filename).read()).hexdigest()
-  return actual_md5 == expected_md5
+
+def check_digest(filename, algorithm, expected_digest):
+  try:
+    supported_algorithms = hashlib.algorithms_available
+  except AttributeError:
+    # Fallback to hardcoded set if hashlib.algorithms_available doesn't exist.
+    supported_algorithms = {'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'}
+  if algorithm not in supported_algorithms:
+    print 'Hash algorithm {0} is not supported by hashlib'.format(algorithm)
+    return False
+  h = hashlib.new(algorithm)
+  h.update(open(filename).read())
+  actual_digest = h.hexdigest()
+  return actual_digest == expected_digest
+
 
 def retry(func):
   '''Retry decorator.'''
@@ -64,7 +75,7 @@ def retry(func):
   return wrapper
 
 def get_package_info(pkg_name, pkg_version):
-  '''Returns the file name, path and md5 digest of the package.'''
+  '''Returns the file name, path, hash algorithm and digest of the package.'''
   # We store the matching result in the candidates list instead of returning right away
   # to sort them and return the first value in alphabetical order. This ensures that the
   # same result is always returned even if the ordering changed on the server.
@@ -76,39 +87,40 @@ def get_package_info(pkg_name, pkg_version):
   # downloading an extra package before running this script. Since the HTML is guaranteed
   # to be formatted according to PEP 503, this is acceptable.
   pkg_info = urlopen(url).read()
-  # We assume that the URL includes a hash and the hash function is md5. This not strictly
-  # required by PEP 503.
-  regex = r'<a href=\".*?packages/(.*?)#md5=(.*?)\".*?>(.*?)<\/a>'
+  regex = r'<a href=\".*?packages/(.*?)#(.*?)=(.*?)\".*?>(.*?)<\/a>'
   for match in re.finditer(regex, pkg_info):
     path = match.group(1)
-    md5_digest = match.group(2)
-    file_name = match.group(3)
+    hash_algorithm = match.group(2)
+    digest = match.group(3)
+    file_name = match.group(4)
     # Make sure that we consider only non Wheel archives, because those are not supported.
     if (file_name.endswith('-{0}.tar.gz'.format(pkg_version)) or
         file_name.endswith('-{0}.tar.bz2'.format(pkg_version)) or
         file_name.endswith('-{0}.zip'.format(pkg_version))):
-      candidates.append((file_name, path, md5_digest))
+      candidates.append((file_name, path, hash_algorithm, digest))
   if not candidates:
     print 'Could not find archive to download for {0} {1}'.format(pkg_name, pkg_version)
-    return (None, None, None)
+    return (None, None, None, None)
   return sorted(candidates)[0]
 
 @retry
 def download_package(pkg_name, pkg_version):
-  file_name, path, expected_md5 = get_package_info(pkg_name, pkg_version)
+  file_name, path, hash_algorithm, expected_digest = get_package_info(pkg_name,
+      pkg_version)
   if not file_name:
     return False
-  if os.path.isfile(file_name) and check_md5sum(file_name, expected_md5):
-    print 'File with matching md5sum already exists, skipping {0}'.format(file_name)
+  if os.path.isfile(file_name) and check_digest(file_name, hash_algorithm,
+      expected_digest):
+    print 'File with matching digest already exists, skipping {0}'.format(file_name)
     return True
   downloader = URLopener()
   pkg_url = '{0}/packages/{1}'.format(PYPI_MIRROR, path)
   print 'Downloading {0} from {1}'.format(file_name, pkg_url)
   downloader.retrieve(pkg_url, file_name)
-  if check_md5sum(file_name, expected_md5):
+  if check_digest(file_name, hash_algorithm, expected_digest):
     return True
   else:
-    print 'MD5 mismatch in file {0}.'.format(file_name)
+    print 'Hash digest check failed in file {0}.'.format(file_name)
     return False
 
 def main():


[14/21] impala git commit: IMPALA-6683: Fix infinite loop after restarting the catalog

Posted by ta...@apache.org.
IMPALA-6683: Fix infinite loop after restarting the catalog

Currently the catalog service ID topic item includes the ID string.
It causes the coexistence of multiple catalog service ID topic items
after the catalogd restarts. Impalad therefore keeps detecting the
change of catalog service ID and requests a full catalog update. This
patch uses "CATALOG_SERVICE_ID" as the topic item name instead.

With the patch impalad prints only one line of catalog change log after
the catalog restarts.

Change-Id: I1ee6c6477458e0f4dd31b12daa9ed5f146d84e7b
Reviewed-on: http://gerrit.cloudera.org:8080/9684
Reviewed-by: Alex Behm <al...@cloudera.com>
Reviewed-by: Dimitris Tsirogiannis <dt...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/9810ec6c
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/9810ec6c
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/9810ec6c

Branch: refs/heads/2.x
Commit: 9810ec6cdfcd4e4532e75cad5d1b8fca9e23cf61
Parents: 31d075f
Author: Tianyi Wang <tw...@cloudera.com>
Authored: Thu Mar 15 18:25:54 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sun Mar 18 21:03:22 2018 +0000

----------------------------------------------------------------------
 fe/src/main/java/org/apache/impala/catalog/Catalog.java | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/9810ec6c/fe/src/main/java/org/apache/impala/catalog/Catalog.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Catalog.java b/fe/src/main/java/org/apache/impala/catalog/Catalog.java
index bee5be5..6f9cdb5 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Catalog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Catalog.java
@@ -575,8 +575,7 @@ public abstract class Catalog {
       case DATA_SOURCE:
         return "DATA_SOURCE:" + catalogObject.getData_source().getName().toLowerCase();
       case CATALOG:
-        return "CATALOG:" +
-            TUniqueIdUtil.PrintId(catalogObject.getCatalog().catalog_service_id);
+        return "CATALOG_SERVICE_ID";
       default:
         throw new IllegalStateException(
             "Unsupported catalog object type: " + catalogObject.getType());