@@ -354,6 +354,8 @@ def query_factory() -> Query:
354354 else None
355355 )
356356
357+ ordered_df = df [list (source_columns_to_types )]
358+
357359 if is_snowpark_dataframe :
358360 temp_table .set ("catalog" , database )
359361
@@ -362,11 +364,11 @@ def query_factory() -> Query:
362364 # then they will be quoted already. But if the Snowpark dataframe was created manually by the user, then the
363365 # columns may not be quoted
364366 columns_already_quoted = all (
365- col .startswith ('"' ) and col .endswith ('"' ) for col in df .columns
367+ col .startswith ('"' ) and col .endswith ('"' ) for col in ordered_df .columns
366368 )
367- local_df = df
369+ local_df = ordered_df
368370 if not columns_already_quoted :
369- local_df = df .rename (
371+ local_df = ordered_df .rename (
370372 {
371373 col : exp .to_identifier (col ).sql (dialect = self .dialect , identify = True )
372374 for col in source_columns_to_types
@@ -375,7 +377,7 @@ def query_factory() -> Query:
375377 local_df .createOrReplaceTempView (
376378 temp_table .sql (dialect = self .dialect , identify = True )
377379 ) # type: ignore
378- elif isinstance (df , pd .DataFrame ):
380+ elif isinstance (ordered_df , pd .DataFrame ):
379381 from snowflake .connector .pandas_tools import write_pandas
380382
381383 # Workaround for https://github.com/snowflakedb/snowflake-connector-python/issues/1034
@@ -388,16 +390,16 @@ def query_factory() -> Query:
388390
389391 # See: https://stackoverflow.com/a/75627721
390392 for column , kind in source_columns_to_types .items ():
391- if is_datetime64_any_dtype (df .dtypes [column ]):
393+ if is_datetime64_any_dtype (ordered_df .dtypes [column ]):
392394 if kind .is_type ("date" ): # type: ignore
393- df [column ] = pd .to_datetime (df [column ]).dt .date # type: ignore
394- elif getattr (df .dtypes [column ], "tz" , None ) is not None : # type: ignore
395- df [column ] = pd .to_datetime (df [column ]).dt .strftime (
395+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .date # type: ignore
396+ elif getattr (ordered_df .dtypes [column ], "tz" , None ) is not None : # type: ignore
397+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .strftime (
396398 "%Y-%m-%d %H:%M:%S.%f%z"
397399 ) # type: ignore
398400 # https://github.com/snowflakedb/snowflake-connector-python/issues/1677
399401 else : # type: ignore
400- df [column ] = pd .to_datetime (df [column ]).dt .strftime (
402+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .strftime (
401403 "%Y-%m-%d %H:%M:%S.%f"
402404 ) # type: ignore
403405
@@ -407,7 +409,7 @@ def query_factory() -> Query:
407409
408410 write_pandas (
409411 self ._connection_pool .get (),
410- df ,
412+ ordered_df ,
411413 temp_table .name ,
412414 schema = temp_table .db or None ,
413415 database = database .sql (dialect = self .dialect ) if database else None ,
@@ -417,7 +419,7 @@ def query_factory() -> Query:
417419 )
418420 else :
419421 raise SQLMeshError (
420- f"Unknown dataframe type: { type (df )} for { target_table } . Expecting pandas or snowpark."
422+ f"Unknown dataframe type: { type (ordered_df )} for { target_table } . Expecting pandas or snowpark."
421423 )
422424
423425 return exp .select (
0 commit comments