Skip to main content
Question

Partitioning problem + question?

  • June 2, 2021
  • 1 reply
  • 5 views

EleanorWyatt

Hi Experts!
I have been trying to partition a billion rows table according to time by CALENDAR_HIERARCHY_DAY algorithm.omegle xender
when I run the statement:
ALTER TABLE public.spins
PARTITION BY time::DATE
GROUP BY CALENDAR_HIERARCHY_DAY(time::DATE, 2, 1) REORGANIZE;

I get the error:
ROLLBACK 2648: Column time in PARTITION BY expression is not allowed, since it is not present in some projections
HINT: Projection "spins_pk" does not contain column "time"

When I try to drop the projection (I don't really need it..) I get:

WARNING 7000: The projection 'spins_pk' was used to enforce the enabled key constraint 'pk', and may be regenerated to validate a DML statement on the base table

how can I workaround that issue?should I add the column time to the pk projection?

And a general partitioning question
If I want my partitions to be as follows: 24 hours - by hours, 7 days , 1 month, 3 month, 1 year..
what is the group by clause needed for the
GROUP BY CALENDAR_HIERARCHY algorithm.

Many thanks!!

1 reply

Jim_Knicely
Forum|alt.badge.img+2
  • Participating Frequently
  • June 4, 2021

@EleanorWyatt - You can drop the PK constraint, add the partition and then add the PK constraint back.

Example:

verticademos=> CREATE TABLE spins (c2 INT, c1 INT NOT NULL, time timestamp);
CREATE TABLE

verticademos=> INSERT INTO spins SELECT 1, 1, SYSDATE;
 OUTPUT
--------
      1
(1 row)

verticademos=> ALTER TABLE spins ADD CONSTRAINT spins_pk PRIMARY KEY(c1) ENABLED;
ALTER TABLE

verticademos=> SELECT export_objects('', 'spins');
                                                                                                                                                                                                                                                                                                                              export_objects                                                                                                                                                                                                
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


CREATE TABLE public.spins
(
    c2 int,
    c1 int NOT NULL,
    "time" timestamp,
    CONSTRAINT spins_pk PRIMARY KEY (c1) ENABLED
);


CREATE PROJECTION public.spins_super /*+basename(spins),createtype(L)*/
(
 c2,
 c1,
 "time"
)
AS
 SELECT spins.c2,
        spins.c1,
        spins."time"
 FROM public.spins
 ORDER BY spins.c2,
          spins.c1,
          spins."time"
SEGMENTED BY hash(spins.c2, spins.c1, spins."time") ALL NODES OFFSET 0;

CREATE PROJECTION public.spins_pk /*+createtype(N)*/
(
 c1
)
AS
 SELECT spins.c1
 FROM public.spins
 ORDER BY spins.c1
SEGMENTED BY hash(spins.c1) ALL NODES OFFSET 0;


SELECT MARK_DESIGN_KSAFE(0);

(1 row)

verticademos=> ALTER TABLE public.spins
verticademos-> PARTITION BY time::DATE
verticademos-> GROUP BY CALENDAR_HIERARCHY_DAY(time::DATE, 2, 1) REORGANIZE;
ROLLBACK 2648:  Column time in PARTITION BY expression is not allowed, since it is not present in some projections
HINT:  Projection "spins_pk" does not contain column "time"
                                                 ^
verticademos=> ALTER TABLE public.spins DROP CONSTRAINT spins_pk;
ALTER TABLE

verticademos=> ALTER TABLE public.spins
verticademos-> PARTITION BY time::DATE
verticademos-> GROUP BY CALENDAR_HIERARCHY_DAY(time::DATE, 2, 1) REORGANIZE;
NOTICE 8364:  The new partitioning scheme will produce partitions in 1 physical storage containers per projection
WARNING 9249:  Using PARTITION expression that may result in NULL values
HINT:  DML statements which produce NULL values for partition expressions will roll back
NOTICE 4785:  Started background repartition table task
ALTER TABLE

verticademos=> ALTER TABLE spins ADD CONSTRAINT spins_pk PRIMARY KEY(c1) ENABLED;
ALTER TABLE