Skip to content

Commit 4f53e68

Browse files
committed
Create materialized view for variant publication dates
1 parent 4afc810 commit 4f53e68

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
"""materialized view for variant statistics
2+
Revision ID: b85bc7b1bec7
3+
Revises: c404b6719110
4+
Create Date: 2025-03-14 01:53:19.898198
5+
"""
6+
7+
from alembic import op
8+
from alembic_utils.pg_materialized_view import PGMaterializedView
9+
from sqlalchemy.dialects import postgresql
10+
11+
from mavedb.models.published_variant import signature, definition
12+
13+
14+
# revision identifiers, used by Alembic.
15+
revision = "b85bc7b1bec7"
16+
down_revision = "c404b6719110"
17+
branch_labels = None
18+
depends_on = None
19+
20+
21+
def upgrade():
22+
op.create_entity(
23+
PGMaterializedView(
24+
schema="public",
25+
signature=signature,
26+
definition=definition.compile(dialect=postgresql.dialect()).string,
27+
with_data=True,
28+
)
29+
)
30+
op.create_index(
31+
f"idx_{signature}_variant_id",
32+
signature,
33+
["variant_id"],
34+
unique=False,
35+
)
36+
op.create_index(
37+
f"idx_{signature}_variant_urn",
38+
signature,
39+
["variant_urn"],
40+
unique=False,
41+
)
42+
op.create_index(
43+
f"idx_{signature}_score_set_id",
44+
signature,
45+
["score_set_id"],
46+
unique=False,
47+
)
48+
op.create_index(
49+
f"idx_{signature}_score_set_urn",
50+
signature,
51+
["score_set_urn"],
52+
unique=False,
53+
)
54+
op.create_index(
55+
f"idx_{signature}_mapped_variant_id",
56+
signature,
57+
["mapped_variant_id"],
58+
unique=True,
59+
)
60+
61+
62+
def downgrade():
63+
op.drop_index(f"idx_{signature}_variant_id", signature)
64+
op.drop_index(f"idx_{signature}_variant_urn", signature)
65+
op.drop_index(f"idx_{signature}_mapped_variant_id", signature)
66+
op.drop_index(f"idx_{signature}_score_set_id", signature)
67+
op.drop_index(f"idx_{signature}_score_set_urn", signature)
68+
op.drop_entity(
69+
PGMaterializedView(
70+
schema="public",
71+
signature=signature,
72+
definition=definition.compile(dialect=postgresql.dialect()).string,
73+
with_data=True,
74+
)
75+
)

src/mavedb/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"license",
1313
"mapped_variant",
1414
"publication_identifier",
15+
"published_variant",
1516
"raw_read_identifier",
1617
"refseq_identifier",
1718
"refseq_offset",
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from sqlalchemy import select, join
2+
3+
from mavedb.db.view import MaterializedView, view
4+
5+
from mavedb.models.score_set import ScoreSet
6+
from mavedb.models.variant import Variant
7+
from mavedb.models.mapped_variant import MappedVariant
8+
9+
10+
signature = "published_variants_materialized_view"
11+
definition = (
12+
select(
13+
Variant.id.label("variant_id"),
14+
Variant.urn.label("variant_urn"),
15+
MappedVariant.id.label("mapped_variant_id"),
16+
ScoreSet.id.label("score_set_id"),
17+
ScoreSet.urn.label("score_set_urn"),
18+
ScoreSet.published_date.label("published_date"),
19+
MappedVariant.current.label("current_mapped_variant"),
20+
)
21+
.select_from(
22+
join(Variant, MappedVariant, Variant.id == MappedVariant.variant_id, isouter=True).join(
23+
ScoreSet, ScoreSet.id == Variant.score_set_id
24+
)
25+
)
26+
.where(
27+
ScoreSet.published_date.is_not(None),
28+
)
29+
)
30+
31+
32+
class PublishedVariantsMV(MaterializedView):
33+
__table__ = view(
34+
signature,
35+
definition,
36+
materialized=True,
37+
)
38+
39+
variant_id = __table__.c.variant_id
40+
variant_urn = __table__.c.variant_urn
41+
mapped_variant_id = __table__.c.mapped_variant_id
42+
score_set_id = __table__.c.score_set_id
43+
score_set_urn = __table__.c.score_set_urn
44+
published_date = __table__.c.published_date
45+
current_mapped_variant = __table__.c.current_mapped_variant

0 commit comments

Comments
 (0)