@@ -81,9 +81,9 @@ def key_field(self):
81
81
@property
82
82
def join_condition (self ):
83
83
return (
84
- 'src.variantId = dst.variantId'
84
+ 'assumeNotNull( src.variantId) = dst.variantId'
85
85
if self == ClickHouseTable .KEY_LOOKUP
86
- else 'toUInt32(src.key) = dst.key'
86
+ else 'assumeNotNull( toUInt32(src.key) ) = dst.key'
87
87
)
88
88
89
89
@property
@@ -92,11 +92,32 @@ def select_fields(self):
92
92
93
93
@property
94
94
def insert (self ) -> Callable :
95
- return (
96
- functools .partial (direct_insert , clickhouse_table = self )
97
- if self != ClickHouseTable .ENTRIES
98
- else functools .partial (atomic_entries_insert , _clickhouse_table = self )
99
- )
95
+ return {
96
+ ClickHouseTable .ANNOTATIONS_DISK : functools .partial (
97
+ direct_insert_new_keys ,
98
+ clickhouse_table = self ,
99
+ ),
100
+ ClickHouseTable .ANNOTATIONS_MEMORY : functools .partial (
101
+ direct_insert_new_keys ,
102
+ clickhouse_table = self ,
103
+ ),
104
+ ClickHouseTable .CLINVAR : functools .partial (
105
+ direct_insert_all_keys ,
106
+ clickhouse_table = self ,
107
+ ),
108
+ ClickHouseTable .ENTRIES : functools .partial (
109
+ atomic_entries_insert ,
110
+ _clickhouse_table = self ,
111
+ ),
112
+ ClickHouseTable .KEY_LOOKUP : functools .partial (
113
+ direct_insert_all_keys ,
114
+ _clickhouse_table = self ,
115
+ ),
116
+ ClickHouseTable .TRANSCRIPTS : functools .partial (
117
+ direct_insert_all_keys ,
118
+ _clickhouse_table = self ,
119
+ ),
120
+ }[self ]
100
121
101
122
102
123
class ClickHouseDictionary (StrEnum ):
@@ -414,7 +435,7 @@ def exchange_entity(
414
435
415
436
416
437
@retry ()
417
- def direct_insert (
438
+ def direct_insert_new_keys (
418
439
clickhouse_table : ClickHouseTable ,
419
440
reference_genome : ReferenceGenome ,
420
441
dataset_type : DatasetType ,
@@ -456,6 +477,30 @@ def direct_insert(
456
477
drop_staging_db ()
457
478
458
479
480
+ @retry ()
481
+ def direct_insert_all_keys (
482
+ clickhouse_table : ClickHouseTable ,
483
+ reference_genome : ReferenceGenome ,
484
+ dataset_type : DatasetType ,
485
+ run_id : str ,
486
+ ** _ ,
487
+ ) -> None :
488
+ table_name_builder = TableNameBuilder (
489
+ reference_genome ,
490
+ dataset_type ,
491
+ run_id ,
492
+ )
493
+ dst_table = table_name_builder .dst_table (clickhouse_table )
494
+ src_table = table_name_builder .src_table (clickhouse_table )
495
+ logged_query (
496
+ f"""
497
+ INSERT INTO { dst_table }
498
+ SELECT { clickhouse_table .select_fields }
499
+ FROM { src_table }
500
+ """ ,
501
+ )
502
+
503
+
459
504
@retry ()
460
505
def atomic_entries_insert (
461
506
_clickhouse_table : ClickHouseTable ,
0 commit comments