Created
November 25, 2013 13:37
-
-
Save gregakespret/7641293 to your computer and use it in GitHub Desktop.
Inserting into a table backed by pre-join projection HASH JOIN problem
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
drop table test_1 cascade; | |
drop table test_2 cascade; | |
CREATE TABLE test_1 | |
( | |
a date NOT NULL, | |
b char(8) NOT NULL, | |
PRIMARY KEY (a), | |
UNIQUE (b) | |
); | |
CREATE PROJECTION test_1_super_by_a | |
( | |
a ENCODING RLE, | |
b ENCODING RLE | |
) | |
AS | |
SELECT * FROM test_1 | |
ORDER BY a, b | |
SEGMENTED BY MODULARHASH(b) ALL NODES; | |
CREATE TABLE test_2 | |
( | |
a date NOT NULL, | |
c char(8) NOT NULL, | |
d char(8) NOT NULL, | |
PRIMARY KEY (a, c, d), | |
FOREIGN KEY (a) REFERENCES test_1 (a) | |
); | |
CREATE PROJECTION test_2_super_by_a | |
( | |
a ENCODING RLE, | |
c ENCODING RLE, | |
d ENCODING RLE, | |
a_duplicated, | |
b | |
) | |
AS | |
SELECT * | |
FROM test_2 | |
JOIN test_1 ON (test_2.a) = (test_1.a) | |
ORDER BY test_2.a, test_2.c, test_2.d | |
SEGMENTED BY MODULARHASH(d) ALL NODES; | |
INSERT INTO test_1 VALUES('2013-01-01', 'foobar'); | |
SELECT ANALYZE_STATISTICS(''); | |
-- HASH JOIN | |
EXPLAIN INSERT INTO test_2 VALUES ('2013-01-01', 'TEST0000', 'TEMP0000'); | |
-- Access Path: | |
-- +-DML INSERT [Cost: 0, Rows: 0] | |
-- | Target Projection: mab_test.test_2_super_by_a (RESEGMENT) | |
-- | Target Prep: | |
-- | +---> JOIN HASH [Cost: 35, Rows: 0] (PATH ID: 1) <-- should be merge join | |
-- | | Join Cond: (test_2.a = test_1.a) | |
-- | | +-- Outer -> SELECT [Cost: 0, Rows: 0] (PATH ID: 2) | |
-- | | +-- Inner -> STORAGE ACCESS for test_1 [Cost: 34, Rows: 1] (PATH ID: 3) | |
-- | | | Projection: mab_test.test_1_super_by_a | |
-- | | | Materialize: test_1.a, test_1.b | |
-- MERGE JOIN | |
EXPLAIN INSERT INTO test_2 SELECT '2013-01-01', 'TEST0000', 'TEMP0000'; | |
-- Access Path: | |
-- +-DML INSERT [Cost: 0, Rows: 0] | |
-- | Target Projection: mab_test.test_2_super_by_a (RESEGMENT) | |
-- | Target Prep: | |
-- | +---> JOIN MERGEJOIN(inputs presorted) [Cost: 709, Rows: 10K (NO STATISTICS)] (PATH ID: 1) | |
-- | | Join Cond: (test_2.a = test_1.a) | |
-- | | +-- Outer -> SELECT [Cost: 663, Rows: 10K (NO STATISTICS)] (PATH ID: 2) | |
-- | | | +---> STORAGE ACCESS for dual [Cost: 663, Rows: 10K (NO STATISTICS)] (PATH ID: 4) | |
-- | | | | Projection: v_catalog.dual_p | |
-- | | | | Materialize: dual.dummy | |
-- | | +-- Inner -> STORAGE ACCESS for test_1 [Cost: 34, Rows: 1] (PATH ID: 5) | |
-- | | | Projection: mab_test.test_1_super_by_a | |
-- | | | Materialize: test_1.a, test_1.b |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment