55import pandas as pd
66from sqlglot import exp
77
8- from sqlmesh .core .dialect import pandas_to_sql
98from sqlmesh .core .engine_adapter .base import EngineAdapter
109from sqlmesh .core .engine_adapter .shared import (
1110 DataObject ,
2120 DF ,
2221 PySparkDataFrame ,
2322 PySparkSession ,
24- Query ,
2523 QueryOrDF ,
2624 )
2725 from sqlmesh .core .model .meta import IntervalUnit
@@ -62,29 +60,11 @@ def _insert_overwrite_by_condition(
6260 where : t .Optional [exp .Condition ] = None ,
6361 columns_to_types : t .Optional [t .Dict [str , exp .DataType ]] = None ,
6462 ) -> None :
65- table = exp .to_table (table_name )
66- df = self .try_get_pandas_df (query_or_df )
67- pyspark_df = self .try_get_pyspark_df (query_or_df )
68- if self ._use_spark_session and (df is not None or pyspark_df ):
69- if df is not None :
70- pyspark_df = self ._ensure_pyspark_df (df )
71- assert pyspark_df
72- self ._insert_pyspark_df (table_name , pyspark_df , overwrite = True )
63+ df = self .try_get_df (query_or_df )
64+ if self ._use_spark_session and df is not None :
65+ self ._insert_pyspark_df (table_name , self ._ensure_pyspark_df (df ), overwrite = True )
7366 else :
74- if df is not None :
75- query_or_df = next (
76- pandas_to_sql (
77- df ,
78- alias = table .alias_or_name ,
79- columns_to_types = columns_to_types ,
80- )
81- )
82- column_names = list (columns_to_types or [])
83- self .execute (
84- exp .insert (
85- t .cast ("Query" , query_or_df ), table , columns = column_names , overwrite = True
86- )
87- )
67+ super ()._insert_overwrite_by_condition (table_name , query_or_df , where , columns_to_types )
8868
8969 def insert_append (
9070 self ,
@@ -94,10 +74,10 @@ def insert_append(
9474 contains_json : bool = False ,
9575 ) -> None :
9676 df = self .try_get_df (query_or_df )
97- if df is None or not self ._use_spark_session :
98- super ().insert_append (table_name , query_or_df , columns_to_types , contains_json )
99- else :
77+ if self ._use_spark_session and df is not None :
10078 self ._insert_append_pyspark_df (table_name , self ._ensure_pyspark_df (df ))
79+ else :
80+ super ().insert_append (table_name , query_or_df , columns_to_types , contains_json )
10181
10282 def merge (
10383 self ,
@@ -108,16 +88,16 @@ def merge(
10888 ) -> None :
10989 column_names = columns_to_types .keys ()
11090 df = self .try_get_df (source_table )
111- if df is None or not self ._use_spark_session :
112- super ().merge (target_table , source_table , columns_to_types , unique_key )
113- else :
114- df = self ._ensure_pyspark_df (df )
91+ if self ._use_spark_session and df is not None :
92+ pyspark_df = self ._ensure_pyspark_df (df )
11593 temp_view_name = self ._get_temp_table (target_table , table_only = True ).sql (
11694 dialect = self .dialect
11795 )
118- df .createOrReplaceTempView (temp_view_name )
96+ pyspark_df .createOrReplaceTempView (temp_view_name )
11997 query = exp .select (* column_names ).from_ (temp_view_name )
12098 super ().merge (target_table , query , columns_to_types , unique_key )
99+ else :
100+ super ().merge (target_table , source_table , columns_to_types , unique_key )
121101
122102 def _insert_append_pandas_df (
123103 self ,
@@ -126,10 +106,10 @@ def _insert_append_pandas_df(
126106 columns_to_types : t .Optional [t .Dict [str , exp .DataType ]] = None ,
127107 contains_json : bool = False ,
128108 ) -> None :
129- if not self ._use_spark_session :
130- super ()._insert_append_pandas_df (table_name , df , columns_to_types , contains_json )
131- else :
109+ if self ._use_spark_session :
132110 self ._insert_pyspark_df (table_name , self ._ensure_pyspark_df (df ), overwrite = False )
111+ else :
112+ super ()._insert_append_pandas_df (table_name , df , columns_to_types , contains_json )
133113
134114 def _insert_append_pyspark_df (
135115 self ,
@@ -160,13 +140,13 @@ def _create_table_from_df(
160140 replace : bool = True ,
161141 ** kwargs : t .Any ,
162142 ) -> None :
163- if not self ._use_spark_session :
164- super ()._create_table_from_df (table_name , df , columns_to_types , exists , replace )
165- else :
143+ if self ._use_spark_session :
166144 df = self ._ensure_pyspark_df (df )
167145 if isinstance (table_name , exp .Table ):
168146 table_name = table_name .sql (dialect = self .dialect )
169147 df .write .saveAsTable (table_name , mode = "overwrite" )
148+ else :
149+ super ()._create_table_from_df (table_name , df , columns_to_types , exists , replace )
170150
171151 def _get_data_objects (
172152 self , schema_name : str , catalog_name : t .Optional [str ] = None
0 commit comments