Skip to content

Instantly share code, notes, and snippets.

@gregakespret
Created November 25, 2013 13:37
Show Gist options
  • Save gregakespret/7641293 to your computer and use it in GitHub Desktop.
Save gregakespret/7641293 to your computer and use it in GitHub Desktop.
Inserting into a table backed by pre-join projection HASH JOIN problem
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