Skip to content

Commit 7a463f9

Browse files
committed
Add AST support
1 parent 557d260 commit 7a463f9

File tree

3 files changed

+1007
-435
lines changed

3 files changed

+1007
-435
lines changed

src/snowflake/snowpark/_internal/proto/ast.proto

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// N.B. This file is generated by `//ir-dsl-c`. DO NOT EDIT!
2-
// Generated from `{[email protected]:snowflakedb/snowflake.git}/Snowpark/ast`.
2+
// Generated from `{[email protected]:snowflake-eng/snowflake.git}/Snowpark/ast`.
33

44
syntax = "proto3";
55

@@ -987,7 +987,7 @@ message DataframeCollect {
987987
repeated Tuple_String_String statement_params = 7;
988988
}
989989

990-
// dataframe-io.ir:165
990+
// dataframe-io.ir:167
991991
message DataframeCopyIntoTable {
992992
repeated Tuple_String_Expr copy_options = 1;
993993
Expr df = 2;
@@ -1011,7 +1011,7 @@ message DataframeCount {
10111011
repeated Tuple_String_String statement_params = 4;
10121012
}
10131013

1014-
// dataframe-io.ir:148
1014+
// dataframe-io.ir:150
10151015
message DataframeCreateOrReplaceDynamicTable {
10161016
repeated Expr clustering_keys = 1;
10171017
google.protobuf.StringValue comment = 2;
@@ -1030,7 +1030,7 @@ message DataframeCreateOrReplaceDynamicTable {
10301030
string warehouse = 15;
10311031
}
10321032

1033-
// dataframe-io.ir:139
1033+
// dataframe-io.ir:141
10341034
message DataframeCreateOrReplaceView {
10351035
google.protobuf.StringValue comment = 1;
10361036
bool copy_grants = 2;
@@ -2685,7 +2685,7 @@ message WindowSpecRowsBetween {
26852685
WindowSpecExpr wnd = 4;
26862686
}
26872687

2688-
// dataframe-io.ir:116
2688+
// dataframe-io.ir:118
26892689
message WriteCopyIntoLocation {
26902690
bool block = 1;
26912691
repeated Tuple_String_Expr copy_options = 2;
@@ -2704,7 +2704,7 @@ message WriteCopyIntoLocation {
27042704
Expr writer = 15;
27052705
}
27062706

2707-
// dataframe-io.ir:123
2707+
// dataframe-io.ir:125
27082708
message WriteCsv {
27092709
bool block = 1;
27102710
repeated Tuple_String_Expr copy_options = 2;
@@ -2731,15 +2731,15 @@ message WriteFile {
27312731
}
27322732
}
27332733

2734-
// dataframe-io.ir:129
2734+
// dataframe-io.ir:131
27352735
message WriteInsertInto {
27362736
bool overwrite = 1;
27372737
SrcPosition src = 2;
27382738
NameRef table_name = 3;
27392739
Expr writer = 4;
27402740
}
27412741

2742-
// dataframe-io.ir:125
2742+
// dataframe-io.ir:127
27432743
message WriteJson {
27442744
bool block = 1;
27452745
repeated Tuple_String_Expr copy_options = 2;
@@ -2773,7 +2773,7 @@ message WritePandas {
27732773
string table_type = 13;
27742774
}
27752775

2776-
// dataframe-io.ir:127
2776+
// dataframe-io.ir:129
27772777
message WriteParquet {
27782778
bool block = 1;
27792779
repeated Tuple_String_Expr copy_options = 2;
@@ -2790,7 +2790,7 @@ message WriteParquet {
27902790
Expr writer = 13;
27912791
}
27922792

2793-
// dataframe-io.ir:121
2793+
// dataframe-io.ir:123
27942794
message WriteSave {
27952795
bool block = 1;
27962796
repeated Tuple_String_Expr copy_options = 2;
@@ -2821,9 +2821,11 @@ message WriteTable {
28212821
repeated Tuple_String_Expr iceberg_config = 10;
28222822
google.protobuf.Int64Value max_data_extension_time = 11;
28232823
SaveMode mode = 12;
2824-
SrcPosition src = 13;
2825-
repeated Tuple_String_String statement_params = 14;
2826-
NameRef table_name = 15;
2827-
string table_type = 16;
2828-
Expr writer = 17;
2824+
Expr overwrite_condition = 13;
2825+
SrcPosition src = 14;
2826+
repeated Tuple_String_String statement_params = 15;
2827+
google.protobuf.BoolValue table_exists = 16;
2828+
NameRef table_name = 17;
2829+
string table_type = 18;
2830+
Expr writer = 19;
28292831
}

src/snowflake/snowpark/dataframe_writer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,8 @@ def save_as_table(
411411
# change_tracking: Optional[bool] = None,
412412
# copy_grants: bool = False,
413413
# iceberg_config: Optional[dict] = None,
414+
# table_exists: Optional[bool] = None,
415+
# overwrite_condition: Optional[ColumnOrSqlExpr] = None,
414416

415417
build_table_name(expr.table_name, table_name)
416418

@@ -452,6 +454,12 @@ def save_as_table(
452454
t = expr.iceberg_config.add()
453455
t._1 = k
454456
build_expr_from_python_val(t._2, v)
457+
if table_exists is not None:
458+
expr.table_exists.value = table_exists
459+
if overwrite_condition is not None:
460+
build_expr_from_snowpark_column_or_sql_str(
461+
expr.overwrite_condition, overwrite_condition
462+
)
455463

456464
self._dataframe._session._ast_batch.eval(stmt)
457465

0 commit comments

Comments
 (0)