snowpark-connect 0.23.0__py3-none-any.whl → 0.25.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of snowpark-connect might be problematic. Click here for more details.

Files changed (476) hide show
  1. snowflake/snowpark_connect/column_name_handler.py +116 -4
  2. snowflake/snowpark_connect/config.py +13 -0
  3. snowflake/snowpark_connect/constants.py +0 -29
  4. snowflake/snowpark_connect/dataframe_container.py +6 -0
  5. snowflake/snowpark_connect/execute_plan/map_execution_command.py +56 -1
  6. snowflake/snowpark_connect/expression/function_defaults.py +207 -0
  7. snowflake/snowpark_connect/expression/literal.py +18 -2
  8. snowflake/snowpark_connect/expression/map_cast.py +5 -8
  9. snowflake/snowpark_connect/expression/map_expression.py +10 -1
  10. snowflake/snowpark_connect/expression/map_extension.py +12 -2
  11. snowflake/snowpark_connect/expression/map_sql_expression.py +23 -1
  12. snowflake/snowpark_connect/expression/map_udf.py +26 -8
  13. snowflake/snowpark_connect/expression/map_unresolved_attribute.py +199 -15
  14. snowflake/snowpark_connect/expression/map_unresolved_extract_value.py +44 -16
  15. snowflake/snowpark_connect/expression/map_unresolved_function.py +836 -365
  16. snowflake/snowpark_connect/expression/map_unresolved_star.py +3 -2
  17. snowflake/snowpark_connect/hidden_column.py +39 -0
  18. snowflake/snowpark_connect/includes/jars/hadoop-client-api-trimmed-3.3.4.jar +0 -0
  19. snowflake/snowpark_connect/includes/jars/{hadoop-client-api-3.3.4.jar → spark-connect-client-jvm_2.12-3.5.6.jar} +0 -0
  20. snowflake/snowpark_connect/relation/map_column_ops.py +18 -36
  21. snowflake/snowpark_connect/relation/map_extension.py +56 -15
  22. snowflake/snowpark_connect/relation/map_join.py +258 -62
  23. snowflake/snowpark_connect/relation/map_row_ops.py +2 -29
  24. snowflake/snowpark_connect/relation/map_sql.py +88 -11
  25. snowflake/snowpark_connect/relation/map_udtf.py +4 -2
  26. snowflake/snowpark_connect/relation/read/map_read.py +3 -3
  27. snowflake/snowpark_connect/relation/read/map_read_jdbc.py +1 -1
  28. snowflake/snowpark_connect/relation/read/map_read_json.py +8 -1
  29. snowflake/snowpark_connect/relation/read/map_read_table.py +1 -9
  30. snowflake/snowpark_connect/relation/read/reader_config.py +3 -1
  31. snowflake/snowpark_connect/relation/read/utils.py +6 -7
  32. snowflake/snowpark_connect/relation/utils.py +1 -170
  33. snowflake/snowpark_connect/relation/write/map_write.py +62 -53
  34. snowflake/snowpark_connect/resources_initializer.py +29 -1
  35. snowflake/snowpark_connect/server.py +18 -3
  36. snowflake/snowpark_connect/type_mapping.py +29 -25
  37. snowflake/snowpark_connect/typed_column.py +14 -0
  38. snowflake/snowpark_connect/utils/artifacts.py +23 -0
  39. snowflake/snowpark_connect/utils/context.py +6 -1
  40. snowflake/snowpark_connect/utils/scala_udf_utils.py +588 -0
  41. snowflake/snowpark_connect/utils/telemetry.py +6 -17
  42. snowflake/snowpark_connect/utils/udf_helper.py +2 -0
  43. snowflake/snowpark_connect/utils/udf_utils.py +38 -7
  44. snowflake/snowpark_connect/utils/udtf_utils.py +17 -3
  45. snowflake/snowpark_connect/version.py +1 -1
  46. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/METADATA +1 -1
  47. snowpark_connect-0.25.0.dist-info/RECORD +477 -0
  48. snowflake/snowpark_connect/includes/jars/scala-compiler-2.12.18.jar +0 -0
  49. snowflake/snowpark_connect/includes/jars/spark-kubernetes_2.12-3.5.6.jar +0 -0
  50. snowflake/snowpark_connect/includes/jars/spark-mllib_2.12-3.5.6.jar +0 -0
  51. snowflake/snowpark_connect/includes/jars/spark-streaming_2.12-3.5.6.jar +0 -0
  52. snowflake/snowpark_connect/includes/python/pyspark/errors/tests/__init__.py +0 -16
  53. snowflake/snowpark_connect/includes/python/pyspark/errors/tests/test_errors.py +0 -60
  54. snowflake/snowpark_connect/includes/python/pyspark/ml/deepspeed/tests/test_deepspeed_distributor.py +0 -306
  55. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/__init__.py +0 -16
  56. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_classification.py +0 -53
  57. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_evaluation.py +0 -50
  58. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_feature.py +0 -43
  59. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_function.py +0 -114
  60. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_pipeline.py +0 -47
  61. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_summarizer.py +0 -43
  62. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_tuning.py +0 -46
  63. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_classification.py +0 -238
  64. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_evaluation.py +0 -194
  65. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_feature.py +0 -156
  66. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_pipeline.py +0 -184
  67. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_summarizer.py +0 -78
  68. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_tuning.py +0 -292
  69. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_parity_torch_data_loader.py +0 -50
  70. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_parity_torch_distributor.py +0 -152
  71. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_algorithms.py +0 -456
  72. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_base.py +0 -96
  73. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_dl_util.py +0 -186
  74. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_evaluation.py +0 -77
  75. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_feature.py +0 -401
  76. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_functions.py +0 -528
  77. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_image.py +0 -82
  78. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_linalg.py +0 -409
  79. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_model_cache.py +0 -55
  80. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_param.py +0 -441
  81. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_persistence.py +0 -546
  82. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_pipeline.py +0 -71
  83. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_stat.py +0 -52
  84. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_training_summary.py +0 -494
  85. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_util.py +0 -85
  86. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_wrapper.py +0 -138
  87. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/__init__.py +0 -16
  88. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_basic.py +0 -151
  89. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_nested.py +0 -97
  90. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_pipeline.py +0 -143
  91. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tuning.py +0 -551
  92. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_basic.py +0 -137
  93. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_nested.py +0 -96
  94. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_pipeline.py +0 -142
  95. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/__init__.py +0 -16
  96. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_data_loader.py +0 -137
  97. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_distributor.py +0 -561
  98. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_log_communication.py +0 -172
  99. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/__init__.py +0 -16
  100. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_algorithms.py +0 -353
  101. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_feature.py +0 -192
  102. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_linalg.py +0 -680
  103. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_stat.py +0 -206
  104. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_streaming_algorithms.py +0 -471
  105. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_util.py +0 -108
  106. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/__init__.py +0 -16
  107. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/__init__.py +0 -16
  108. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_any_all.py +0 -177
  109. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_apply_func.py +0 -575
  110. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_binary_ops.py +0 -235
  111. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_combine.py +0 -653
  112. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_compute.py +0 -463
  113. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_corrwith.py +0 -86
  114. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_cov.py +0 -151
  115. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_cumulative.py +0 -139
  116. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_describe.py +0 -458
  117. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_eval.py +0 -86
  118. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_melt.py +0 -202
  119. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_missing_data.py +0 -520
  120. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_pivot.py +0 -361
  121. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/__init__.py +0 -16
  122. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/__init__.py +0 -16
  123. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_any_all.py +0 -40
  124. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_apply_func.py +0 -42
  125. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_binary_ops.py +0 -40
  126. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_combine.py +0 -37
  127. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_compute.py +0 -60
  128. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_corrwith.py +0 -40
  129. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_cov.py +0 -40
  130. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_cumulative.py +0 -90
  131. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_describe.py +0 -40
  132. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_eval.py +0 -40
  133. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_melt.py +0 -40
  134. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_missing_data.py +0 -42
  135. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_pivot.py +0 -37
  136. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/__init__.py +0 -16
  137. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_base.py +0 -36
  138. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_binary_ops.py +0 -42
  139. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_boolean_ops.py +0 -47
  140. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_categorical_ops.py +0 -55
  141. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_complex_ops.py +0 -40
  142. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_date_ops.py +0 -47
  143. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_datetime_ops.py +0 -47
  144. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_null_ops.py +0 -42
  145. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_arithmetic.py +0 -43
  146. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_ops.py +0 -47
  147. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_reverse.py +0 -43
  148. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_string_ops.py +0 -47
  149. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_timedelta_ops.py +0 -47
  150. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_udt_ops.py +0 -40
  151. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/testing_utils.py +0 -226
  152. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/__init__.py +0 -16
  153. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_align.py +0 -39
  154. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_basic_slow.py +0 -55
  155. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_cov_corrwith.py +0 -39
  156. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_dot_frame.py +0 -39
  157. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_dot_series.py +0 -39
  158. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_index.py +0 -39
  159. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_series.py +0 -39
  160. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_setitem_frame.py +0 -43
  161. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_setitem_series.py +0 -43
  162. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/__init__.py +0 -16
  163. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_attrs.py +0 -40
  164. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_constructor.py +0 -39
  165. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_conversion.py +0 -42
  166. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_reindexing.py +0 -42
  167. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_reshaping.py +0 -37
  168. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_spark.py +0 -40
  169. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_take.py +0 -42
  170. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_time_series.py +0 -48
  171. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_truncate.py +0 -40
  172. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/__init__.py +0 -16
  173. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_aggregate.py +0 -40
  174. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_apply_func.py +0 -41
  175. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_cumulative.py +0 -67
  176. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_describe.py +0 -40
  177. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_groupby.py +0 -55
  178. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_head_tail.py +0 -40
  179. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_index.py +0 -38
  180. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_missing_data.py +0 -55
  181. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_split_apply.py +0 -39
  182. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_stat.py +0 -38
  183. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/__init__.py +0 -16
  184. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_align.py +0 -40
  185. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_base.py +0 -50
  186. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_category.py +0 -73
  187. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_datetime.py +0 -39
  188. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_indexing.py +0 -40
  189. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_reindex.py +0 -40
  190. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_rename.py +0 -40
  191. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_reset_index.py +0 -48
  192. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_timedelta.py +0 -39
  193. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/io/__init__.py +0 -16
  194. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/io/test_parity_io.py +0 -40
  195. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/__init__.py +0 -16
  196. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot.py +0 -45
  197. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot_matplotlib.py +0 -45
  198. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot_plotly.py +0 -49
  199. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot.py +0 -37
  200. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot_matplotlib.py +0 -53
  201. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot_plotly.py +0 -45
  202. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/__init__.py +0 -16
  203. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_all_any.py +0 -38
  204. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_arg_ops.py +0 -37
  205. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_as_of.py +0 -37
  206. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_as_type.py +0 -38
  207. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_compute.py +0 -37
  208. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_conversion.py +0 -40
  209. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_cumulative.py +0 -40
  210. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_index.py +0 -38
  211. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_missing_data.py +0 -40
  212. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_series.py +0 -37
  213. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_sort.py +0 -38
  214. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_stat.py +0 -38
  215. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_categorical.py +0 -66
  216. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_config.py +0 -37
  217. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_csv.py +0 -37
  218. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_dataframe_conversion.py +0 -42
  219. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_dataframe_spark_io.py +0 -39
  220. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_default_index.py +0 -49
  221. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ewm.py +0 -37
  222. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_expanding.py +0 -39
  223. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_extension.py +0 -49
  224. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_frame_spark.py +0 -53
  225. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_generic_functions.py +0 -43
  226. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_indexing.py +0 -49
  227. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_indexops_spark.py +0 -39
  228. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_internal.py +0 -41
  229. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_namespace.py +0 -39
  230. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_numpy_compat.py +0 -60
  231. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames.py +0 -48
  232. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby.py +0 -39
  233. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby_expanding.py +0 -44
  234. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby_rolling.py +0 -84
  235. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_repr.py +0 -37
  236. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_resample.py +0 -45
  237. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_reshape.py +0 -39
  238. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_rolling.py +0 -39
  239. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_scalars.py +0 -37
  240. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_conversion.py +0 -39
  241. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_datetime.py +0 -39
  242. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_string.py +0 -39
  243. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_spark_functions.py +0 -39
  244. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_sql.py +0 -43
  245. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_stats.py +0 -37
  246. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_typedef.py +0 -36
  247. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_utils.py +0 -37
  248. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_window.py +0 -39
  249. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/__init__.py +0 -16
  250. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_base.py +0 -107
  251. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_binary_ops.py +0 -224
  252. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_boolean_ops.py +0 -825
  253. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_categorical_ops.py +0 -562
  254. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_complex_ops.py +0 -368
  255. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_date_ops.py +0 -257
  256. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_datetime_ops.py +0 -260
  257. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_null_ops.py +0 -178
  258. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_arithmetic.py +0 -184
  259. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_ops.py +0 -497
  260. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_reverse.py +0 -140
  261. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_string_ops.py +0 -354
  262. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_timedelta_ops.py +0 -219
  263. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_udt_ops.py +0 -192
  264. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/testing_utils.py +0 -228
  265. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/__init__.py +0 -16
  266. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_align.py +0 -118
  267. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_basic_slow.py +0 -198
  268. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_cov_corrwith.py +0 -181
  269. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_dot_frame.py +0 -103
  270. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_dot_series.py +0 -141
  271. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_index.py +0 -109
  272. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_series.py +0 -136
  273. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_setitem_frame.py +0 -125
  274. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_setitem_series.py +0 -217
  275. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/__init__.py +0 -16
  276. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_attrs.py +0 -384
  277. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_constructor.py +0 -598
  278. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_conversion.py +0 -73
  279. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_reindexing.py +0 -869
  280. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_reshaping.py +0 -487
  281. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_spark.py +0 -309
  282. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_take.py +0 -156
  283. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_time_series.py +0 -149
  284. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_truncate.py +0 -163
  285. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/__init__.py +0 -16
  286. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_aggregate.py +0 -311
  287. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_apply_func.py +0 -524
  288. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_cumulative.py +0 -419
  289. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_describe.py +0 -144
  290. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_groupby.py +0 -979
  291. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_head_tail.py +0 -234
  292. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_index.py +0 -206
  293. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_missing_data.py +0 -421
  294. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_split_apply.py +0 -187
  295. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_stat.py +0 -397
  296. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/__init__.py +0 -16
  297. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_align.py +0 -100
  298. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_base.py +0 -2743
  299. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_category.py +0 -484
  300. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_datetime.py +0 -276
  301. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_indexing.py +0 -432
  302. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_reindex.py +0 -310
  303. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_rename.py +0 -257
  304. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_reset_index.py +0 -160
  305. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_timedelta.py +0 -128
  306. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/io/__init__.py +0 -16
  307. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/io/test_io.py +0 -137
  308. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/__init__.py +0 -16
  309. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot.py +0 -170
  310. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot_matplotlib.py +0 -547
  311. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot_plotly.py +0 -285
  312. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot.py +0 -106
  313. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot_matplotlib.py +0 -409
  314. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot_plotly.py +0 -247
  315. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/__init__.py +0 -16
  316. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_all_any.py +0 -105
  317. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_arg_ops.py +0 -197
  318. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_as_of.py +0 -137
  319. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_as_type.py +0 -227
  320. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_compute.py +0 -634
  321. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_conversion.py +0 -88
  322. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_cumulative.py +0 -139
  323. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_index.py +0 -475
  324. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_missing_data.py +0 -265
  325. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_series.py +0 -818
  326. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_sort.py +0 -162
  327. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_stat.py +0 -780
  328. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_categorical.py +0 -741
  329. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_config.py +0 -160
  330. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_csv.py +0 -453
  331. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_dataframe_conversion.py +0 -281
  332. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_dataframe_spark_io.py +0 -487
  333. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_default_index.py +0 -109
  334. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ewm.py +0 -434
  335. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_expanding.py +0 -253
  336. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_extension.py +0 -152
  337. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_frame_spark.py +0 -162
  338. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_generic_functions.py +0 -234
  339. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_indexing.py +0 -1339
  340. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_indexops_spark.py +0 -82
  341. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_internal.py +0 -124
  342. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_namespace.py +0 -638
  343. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_numpy_compat.py +0 -200
  344. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames.py +0 -1355
  345. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby.py +0 -655
  346. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby_expanding.py +0 -113
  347. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby_rolling.py +0 -118
  348. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_repr.py +0 -192
  349. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_resample.py +0 -346
  350. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_reshape.py +0 -495
  351. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_rolling.py +0 -263
  352. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_scalars.py +0 -59
  353. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_conversion.py +0 -85
  354. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_datetime.py +0 -364
  355. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_string.py +0 -362
  356. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_spark_functions.py +0 -46
  357. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_sql.py +0 -123
  358. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_stats.py +0 -581
  359. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_typedef.py +0 -447
  360. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_utils.py +0 -301
  361. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_window.py +0 -465
  362. snowflake/snowpark_connect/includes/python/pyspark/resource/tests/__init__.py +0 -16
  363. snowflake/snowpark_connect/includes/python/pyspark/resource/tests/test_resources.py +0 -83
  364. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/__init__.py +0 -16
  365. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/__init__.py +0 -16
  366. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/__init__.py +0 -16
  367. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/test_artifact.py +0 -420
  368. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/test_client.py +0 -358
  369. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/__init__.py +0 -16
  370. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_foreach.py +0 -36
  371. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_foreach_batch.py +0 -44
  372. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_listener.py +0 -116
  373. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_streaming.py +0 -35
  374. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_basic.py +0 -3612
  375. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_column.py +0 -1042
  376. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_function.py +0 -2381
  377. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_plan.py +0 -1060
  378. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow.py +0 -163
  379. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow_map.py +0 -38
  380. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow_python_udf.py +0 -48
  381. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_catalog.py +0 -36
  382. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_column.py +0 -55
  383. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_conf.py +0 -36
  384. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_dataframe.py +0 -96
  385. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_datasources.py +0 -44
  386. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_errors.py +0 -36
  387. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_functions.py +0 -59
  388. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_group.py +0 -36
  389. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_cogrouped_map.py +0 -59
  390. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_grouped_map.py +0 -74
  391. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_grouped_map_with_state.py +0 -62
  392. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_map.py +0 -58
  393. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf.py +0 -70
  394. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_grouped_agg.py +0 -50
  395. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_scalar.py +0 -68
  396. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_window.py +0 -40
  397. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_readwriter.py +0 -46
  398. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_serde.py +0 -44
  399. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_types.py +0 -100
  400. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_udf.py +0 -100
  401. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_udtf.py +0 -163
  402. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_session.py +0 -181
  403. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_utils.py +0 -42
  404. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/__init__.py +0 -16
  405. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_cogrouped_map.py +0 -623
  406. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_grouped_map.py +0 -869
  407. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_grouped_map_with_state.py +0 -342
  408. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_map.py +0 -436
  409. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf.py +0 -363
  410. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_grouped_agg.py +0 -592
  411. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_scalar.py +0 -1503
  412. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_typehints.py +0 -392
  413. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_typehints_with_future_annotations.py +0 -375
  414. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_window.py +0 -411
  415. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/__init__.py +0 -16
  416. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming.py +0 -401
  417. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_foreach.py +0 -295
  418. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_foreach_batch.py +0 -106
  419. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_listener.py +0 -558
  420. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow.py +0 -1346
  421. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow_map.py +0 -182
  422. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow_python_udf.py +0 -202
  423. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_catalog.py +0 -503
  424. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_column.py +0 -225
  425. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_conf.py +0 -83
  426. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_context.py +0 -201
  427. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_dataframe.py +0 -1931
  428. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_datasources.py +0 -256
  429. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_errors.py +0 -69
  430. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_functions.py +0 -1349
  431. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_group.py +0 -53
  432. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_pandas_sqlmetrics.py +0 -68
  433. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_readwriter.py +0 -283
  434. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_serde.py +0 -155
  435. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_session.py +0 -412
  436. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_types.py +0 -1581
  437. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udf.py +0 -961
  438. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udf_profiler.py +0 -165
  439. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udtf.py +0 -1456
  440. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_utils.py +0 -1686
  441. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/__init__.py +0 -16
  442. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_context.py +0 -184
  443. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_dstream.py +0 -706
  444. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_kinesis.py +0 -118
  445. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_listener.py +0 -160
  446. snowflake/snowpark_connect/includes/python/pyspark/tests/__init__.py +0 -16
  447. snowflake/snowpark_connect/includes/python/pyspark/tests/test_appsubmit.py +0 -306
  448. snowflake/snowpark_connect/includes/python/pyspark/tests/test_broadcast.py +0 -196
  449. snowflake/snowpark_connect/includes/python/pyspark/tests/test_conf.py +0 -44
  450. snowflake/snowpark_connect/includes/python/pyspark/tests/test_context.py +0 -346
  451. snowflake/snowpark_connect/includes/python/pyspark/tests/test_daemon.py +0 -89
  452. snowflake/snowpark_connect/includes/python/pyspark/tests/test_install_spark.py +0 -124
  453. snowflake/snowpark_connect/includes/python/pyspark/tests/test_join.py +0 -69
  454. snowflake/snowpark_connect/includes/python/pyspark/tests/test_memory_profiler.py +0 -167
  455. snowflake/snowpark_connect/includes/python/pyspark/tests/test_pin_thread.py +0 -194
  456. snowflake/snowpark_connect/includes/python/pyspark/tests/test_profiler.py +0 -168
  457. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rdd.py +0 -939
  458. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rddbarrier.py +0 -52
  459. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rddsampler.py +0 -66
  460. snowflake/snowpark_connect/includes/python/pyspark/tests/test_readwrite.py +0 -368
  461. snowflake/snowpark_connect/includes/python/pyspark/tests/test_serializers.py +0 -257
  462. snowflake/snowpark_connect/includes/python/pyspark/tests/test_shuffle.py +0 -267
  463. snowflake/snowpark_connect/includes/python/pyspark/tests/test_stage_sched.py +0 -153
  464. snowflake/snowpark_connect/includes/python/pyspark/tests/test_statcounter.py +0 -130
  465. snowflake/snowpark_connect/includes/python/pyspark/tests/test_taskcontext.py +0 -350
  466. snowflake/snowpark_connect/includes/python/pyspark/tests/test_util.py +0 -97
  467. snowflake/snowpark_connect/includes/python/pyspark/tests/test_worker.py +0 -271
  468. snowpark_connect-0.23.0.dist-info/RECORD +0 -893
  469. {snowpark_connect-0.23.0.data → snowpark_connect-0.25.0.data}/scripts/snowpark-connect +0 -0
  470. {snowpark_connect-0.23.0.data → snowpark_connect-0.25.0.data}/scripts/snowpark-session +0 -0
  471. {snowpark_connect-0.23.0.data → snowpark_connect-0.25.0.data}/scripts/snowpark-submit +0 -0
  472. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/WHEEL +0 -0
  473. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/licenses/LICENSE-binary +0 -0
  474. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/licenses/LICENSE.txt +0 -0
  475. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/licenses/NOTICE-binary +0 -0
  476. {snowpark_connect-0.23.0.dist-info → snowpark_connect-0.25.0.dist-info}/top_level.txt +0 -0
@@ -82,8 +82,10 @@ def map_cast(
82
82
  match exp.cast.WhichOneof("cast_to_type"):
83
83
  case "type":
84
84
  to_type = proto_to_snowpark_type(exp.cast.type)
85
+ to_type_str = to_type.simpleString().upper()
85
86
  case "type_str":
86
87
  to_type = map_type_string_to_snowpark_type(exp.cast.type_str)
88
+ to_type_str = exp.cast.type_str.upper()
87
89
  case _:
88
90
  raise ValueError("No type to cast to")
89
91
 
@@ -102,7 +104,7 @@ def map_cast(
102
104
  case _ if to_type.typeName().upper() in ("STRUCT", "ARRAY"):
103
105
  col_name = new_name
104
106
  case _ if get_is_evaluating_sql():
105
- col_name = f"CAST({new_name} AS {to_type.simpleString().upper()})"
107
+ col_name = f"CAST({new_name} AS {to_type_str})"
106
108
  case _:
107
109
  col_name = new_name
108
110
 
@@ -121,17 +123,13 @@ def map_cast(
121
123
  sanity_check(to_type, new_name, from_type, from_type_cast)
122
124
 
123
125
  col = typed_column.col
124
- # On TCM, sometimes these are StringType(x) and TimestampType(tz=x)
126
+ # On TCM, sometimes these are StringType(x)
125
127
  # This normalizes them for the cast.
126
128
  if isinstance(from_type, StringType):
127
129
  from_type = StringType()
128
130
  if isinstance(to_type, StringType):
129
131
  to_type = StringType()
130
132
 
131
- # todo - verify if that's correct SNOW-2248680
132
- if isinstance(from_type, TimestampType):
133
- from_type = TimestampType()
134
-
135
133
  match (from_type, to_type):
136
134
  case (_, _) if (from_type == to_type):
137
135
  result_exp = col
@@ -196,9 +194,8 @@ def map_cast(
196
194
  result_exp = snowpark_fn.convert_timezone(snowpark_fn.lit(zone), col).cast(
197
195
  TimestampType(TimestampTimeZone.NTZ)
198
196
  )
199
- # todo: verify if more support for LTZ and TZ is needed - SNOW-2248680
200
197
  case (TimestampType(), TimestampType()):
201
- result_exp = col
198
+ result_exp = col.cast(to_type)
202
199
  case (_, TimestampType()) if isinstance(from_type, _NumericType):
203
200
  microseconds = col * snowpark_fn.lit(1000000)
204
201
  result_exp = snowpark_fn.when(
@@ -27,7 +27,10 @@ from snowflake.snowpark_connect.expression.literal import get_literal_field_and_
27
27
  from snowflake.snowpark_connect.expression.map_cast import map_cast
28
28
  from snowflake.snowpark_connect.expression.map_sql_expression import map_sql_expr
29
29
  from snowflake.snowpark_connect.expression.typer import ExpressionTyper
30
- from snowflake.snowpark_connect.type_mapping import map_simple_types
30
+ from snowflake.snowpark_connect.type_mapping import (
31
+ map_simple_types,
32
+ proto_to_snowpark_type,
33
+ )
31
34
  from snowflake.snowpark_connect.typed_column import TypedColumn
32
35
  from snowflake.snowpark_connect.utils.context import (
33
36
  gen_sql_plan_id,
@@ -166,6 +169,12 @@ def map_expression(
166
169
  lambda: [map_simple_types(lit_type_str)],
167
170
  )
168
171
 
172
+ if lit_type_str == "array":
173
+ result_exp = snowpark_fn.lit(lit_value)
174
+ element_types = proto_to_snowpark_type(exp.literal.array.element_type)
175
+ array_type = snowpark.types.ArrayType(element_types)
176
+ return [lit_name], TypedColumn(result_exp, lambda: [array_type])
177
+
169
178
  # Decimal needs further processing to get the precision and scale properly.
170
179
  if lit_type_str == "decimal":
171
180
  # Precision and scale are optional in the proto.
@@ -10,7 +10,10 @@ from snowflake.snowpark.types import BooleanType
10
10
  from snowflake.snowpark_connect.column_name_handler import ColumnNameMap
11
11
  from snowflake.snowpark_connect.expression.typer import ExpressionTyper
12
12
  from snowflake.snowpark_connect.typed_column import TypedColumn
13
- from snowflake.snowpark_connect.utils.context import push_evaluating_sql_scope
13
+ from snowflake.snowpark_connect.utils.context import (
14
+ push_evaluating_sql_scope,
15
+ push_outer_dataframe,
16
+ )
14
17
  from snowflake.snowpark_connect.utils.telemetry import (
15
18
  SnowparkConnectNotImplementedError,
16
19
  )
@@ -52,12 +55,19 @@ def map_extension(
52
55
  return [name], typed_col
53
56
 
54
57
  case "subquery_expression":
58
+ from snowflake.snowpark_connect.dataframe_container import (
59
+ DataFrameContainer,
60
+ )
55
61
  from snowflake.snowpark_connect.expression.map_expression import (
56
62
  map_expression,
57
63
  )
58
64
  from snowflake.snowpark_connect.relation.map_relation import map_relation
59
65
 
60
- with push_evaluating_sql_scope():
66
+ current_outer_df = DataFrameContainer(
67
+ dataframe=typer.df, column_map=column_mapping
68
+ )
69
+
70
+ with push_evaluating_sql_scope(), push_outer_dataframe(current_outer_df):
61
71
  df_container = map_relation(extension.subquery_expression.input)
62
72
  df = df_container.dataframe
63
73
 
@@ -15,6 +15,7 @@ from pyspark.errors.exceptions.base import AnalysisException
15
15
  import snowflake.snowpark_connect.proto.snowflake_expression_ext_pb2 as snowflake_proto
16
16
  from snowflake import snowpark
17
17
  from snowflake.snowpark_connect.column_name_handler import ColumnNameMap
18
+ from snowflake.snowpark_connect.config import global_config
18
19
  from snowflake.snowpark_connect.typed_column import TypedColumn
19
20
  from snowflake.snowpark_connect.utils.context import (
20
21
  get_sql_named_arg,
@@ -34,11 +35,32 @@ DECIMAL_RE = re.compile(r"decimal\((\d+), *(\d+)\)")
34
35
  _window_specs = ContextVar[dict[str, any]]("_window_specs", default={})
35
36
 
36
37
 
37
- @cache
38
38
  def sql_parser():
39
+ """
40
+ SparkSqlParser needs spark.config. Here we are setting required config keys for SAS.
41
+ We can't do it in set.config request handler, because SparkSqlParser initialized without active SparkSession (our case, todo: fix it)
42
+ uses ThreadLocal to access conf, and conf.set can be handled by other thread.
43
+ https://github.com/apache/spark/blob/ea53ea71461508801586b1e5677aa6011df7cd95/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala#L143
44
+ """
45
+
46
+ ts_type = global_config.spark_sql_timestampType
47
+
48
+ if ts_type is not None:
49
+ _get_sql_conf().get().setConfString("spark.sql.timestampType", str(ts_type))
50
+
51
+ return _get_sql_parser()
52
+
53
+
54
+ @cache
55
+ def _get_sql_parser():
39
56
  return jpype.JClass("org.apache.spark.sql.execution.SparkSqlParser")()
40
57
 
41
58
 
59
+ @cache
60
+ def _get_sql_conf():
61
+ return jpype.JClass("org.apache.spark.sql.internal.SQLConf")
62
+
63
+
42
64
  @cache
43
65
  def _as_java_list():
44
66
  return jpype.JClass("scala.collection.JavaConverters").seqAsJavaList
@@ -53,9 +53,16 @@ def register_udf(
53
53
  udf_proto: expressions_proto.CommonInlineUserDefinedFunction,
54
54
  ) -> SnowparkUDF:
55
55
  udf_check(udf_proto)
56
- processed_return_type, original_return_type = process_udf_return_type(
57
- udf_proto.python_udf.output_type
58
- )
56
+ match udf_proto.WhichOneof("function"):
57
+ case "python_udf":
58
+ output_type = udf_proto.python_udf.output_type
59
+ case "scalar_scala_udf":
60
+ output_type = udf_proto.scalar_scala_udf.outputType
61
+ case _:
62
+ raise ValueError(
63
+ f"Unsupported UDF type: {udf_proto.WhichOneof('function')}"
64
+ )
65
+ processed_return_type, original_return_type = process_udf_return_type(output_type)
59
66
  session = get_or_create_snowpark_session()
60
67
  kwargs = {
61
68
  "common_inline_user_defined_function": udf_proto,
@@ -79,7 +86,10 @@ def register_udf(
79
86
  )
80
87
  # the create udf does register the udf but this seems to be for the client side check
81
88
  # TODO: check if this is needed
82
- session._udfs[udf_proto.function_name.lower()] = udf
89
+ if udf_processor._function_type == "scalar_scala_udf":
90
+ session._udfs[udf.name] = udf
91
+ else:
92
+ session._udfs[udf_proto.function_name.lower()] = udf
83
93
  return udf
84
94
 
85
95
 
@@ -94,9 +104,16 @@ def map_common_inline_user_defined_udf(
94
104
  udf_proto, column_mapping, typer
95
105
  )
96
106
  input_types = gen_input_types(snowpark_udf_args, typer)
97
- processed_return_type, original_return_type = process_udf_return_type(
98
- udf_proto.python_udf.output_type
99
- )
107
+ match udf_proto.WhichOneof("function"):
108
+ case "python_udf":
109
+ processed_return_type, original_return_type = process_udf_return_type(
110
+ udf_proto.python_udf.output_type
111
+ )
112
+ case "scalar_scala_udf":
113
+ processed_return_type, original_return_type = process_udf_return_type(
114
+ udf_proto.scalar_scala_udf.outputType
115
+ )
116
+
100
117
  session = get_or_create_snowpark_session()
101
118
  kwargs = {
102
119
  "common_inline_user_defined_function": udf_proto,
@@ -118,7 +135,8 @@ def map_common_inline_user_defined_udf(
118
135
  return_type=udf._return_type,
119
136
  original_return_type=original_return_type,
120
137
  )
121
-
138
+ if udf_processor._function_type == "scalar_scala_udf":
139
+ session._udfs[udf.name] = snowpark_udf
122
140
  udf_call_expr = snowpark_fn.call_udf(snowpark_udf.name, *snowpark_udf_args)
123
141
 
124
142
  # If the original return type was MapType or StructType but we converted it to VariantType,
@@ -12,12 +12,13 @@ from snowflake.snowpark._internal.analyzer.analyzer_utils import (
12
12
  quote_name_without_upper_casing,
13
13
  )
14
14
  from snowflake.snowpark.exceptions import SnowparkSQLException
15
- from snowflake.snowpark.types import ArrayType, MapType, StructType
15
+ from snowflake.snowpark.types import ArrayType, LongType, MapType, StructType
16
16
  from snowflake.snowpark_connect.column_name_handler import ColumnNameMap
17
17
  from snowflake.snowpark_connect.config import global_config
18
18
  from snowflake.snowpark_connect.expression.typer import ExpressionTyper
19
19
  from snowflake.snowpark_connect.typed_column import TypedColumn
20
20
  from snowflake.snowpark_connect.utils.context import (
21
+ get_current_grouping_columns,
21
22
  get_is_evaluating_sql,
22
23
  get_outer_dataframes,
23
24
  get_plan_id_map,
@@ -30,6 +31,41 @@ from snowflake.snowpark_connect.utils.identifiers import (
30
31
  SPARK_QUOTED = re.compile("^(`.*`)$", re.DOTALL)
31
32
 
32
33
 
34
+ def _get_catalog_database_from_column_map(
35
+ column_name: str, column_map: ColumnNameMap
36
+ ) -> dict[str, str]:
37
+ """
38
+ Get catalog/database info from the column map for a given column name.
39
+ This replaces the previous extraction logic by looking up stored metadata.
40
+
41
+ Returns:
42
+ dict: catalog_database_info containing catalog/database metadata if found
43
+ """
44
+ catalog_database_info = {}
45
+
46
+ # Look up in the column map using case-sensitive or case-insensitive matching
47
+ matching_columns = []
48
+ if hasattr(column_map, "is_case_sensitive") and column_map.is_case_sensitive():
49
+ matching_columns = column_map.spark_to_col.get(column_name, [])
50
+ elif hasattr(column_map, "uppercase_spark_to_col"):
51
+ matching_columns = column_map.uppercase_spark_to_col.get(
52
+ column_name.upper(), []
53
+ )
54
+ elif hasattr(column_map, "spark_to_col"):
55
+ matching_columns = column_map.spark_to_col.get(column_name, [])
56
+
57
+ # If we found a matching column with catalog/database info, use it
58
+ for col_names in matching_columns:
59
+ if col_names.catalog_info and col_names.database_info:
60
+ catalog_database_info = {
61
+ "catalog": col_names.catalog_info,
62
+ "database": col_names.database_info,
63
+ }
64
+ break
65
+
66
+ return catalog_database_info
67
+
68
+
33
69
  def map_unresolved_attribute(
34
70
  exp: expressions_proto.Expression,
35
71
  column_mapping: ColumnNameMap,
@@ -40,9 +76,93 @@ def map_unresolved_attribute(
40
76
 
41
77
  assert len(name_parts) > 0, f"Unable to parse input attribute: {original_attr_name}"
42
78
 
79
+ # Special handling for Spark's automatic grouping__id column
80
+ # In Spark SQL, when using GROUP BY CUBE/ROLLUP/GROUPING SETS, an automatic
81
+ # virtual column called 'grouping__id' (with double underscores) is available.
82
+ # In Snowflake, we need to convert this to a GROUPING_ID() function call.
83
+ if len(name_parts) == 1 and name_parts[0].lower() == "grouping__id":
84
+ grouping_spark_columns = get_current_grouping_columns()
85
+ if not grouping_spark_columns:
86
+ # grouping__id can only be used with GROUP BY CUBE/ROLLUP/GROUPING SETS
87
+ raise AnalysisException(
88
+ "[MISSING_GROUP_BY] grouping__id can only be used with GROUP BY (CUBE | ROLLUP | GROUPING SETS)"
89
+ )
90
+ # Convert to GROUPING_ID() function call with the grouping columns
91
+ # Map Spark column names to Snowpark column names
92
+ snowpark_cols = []
93
+ for spark_col_name in grouping_spark_columns:
94
+ # Get the Snowpark column name from the mapping
95
+ snowpark_name = (
96
+ column_mapping.get_snowpark_column_name_from_spark_column_name(
97
+ spark_col_name
98
+ )
99
+ )
100
+ if not snowpark_name:
101
+ raise AnalysisException(
102
+ f"[INTERNAL_ERROR] Cannot find Snowpark column mapping for grouping column '{spark_col_name}'"
103
+ )
104
+ snowpark_cols.append(snowpark_fn.col(snowpark_name))
105
+
106
+ # Call GROUPING_ID with all grouping columns using Snowpark names
107
+ result_col = snowpark_fn.grouping_id(*snowpark_cols)
108
+
109
+ # TypedColumn expects a callable that returns a list of types
110
+ # GROUPING_ID returns a BIGINT (LongType) in both Spark and Snowflake
111
+ # representing the bit vector of grouping indicators
112
+ typed_col = TypedColumn(result_col, lambda: [LongType()])
113
+ return ("grouping__id", typed_col)
114
+
115
+ # Validate that DataFrame API doesn't allow catalog.database.column patterns
116
+ # These patterns should only work in SQL, not DataFrame API
117
+ if len(name_parts) >= 4:
118
+ # For 4+ parts, check if this looks like catalog.database.column.field
119
+ # (as opposed to a valid table.column.field pattern)
120
+
121
+ # Heuristic: if the pattern looks like catalog.database.column.field,
122
+ # reject it in DataFrame API context (but allow in SQL)
123
+
124
+ # Check if first part looks like a catalog name (not a column)
125
+ first_part = name_parts[0]
126
+ first_part_snowpark = (
127
+ column_mapping.get_snowpark_column_name_from_spark_column_name(
128
+ first_part, allow_non_exists=True
129
+ )
130
+ )
131
+
132
+ # If first part is not a column and we have 4+ parts, check if it's a catalog reference
133
+ if first_part_snowpark is None and len(name_parts) >= 4:
134
+ # Import here to avoid circular import issues
135
+ from snowflake.snowpark_connect.relation.catalogs import CATALOGS
136
+
137
+ # Check if the first part is a registered catalog name OR looks like a catalog pattern
138
+ is_registered_catalog = first_part.lower() in CATALOGS
139
+ is_catalog_like = (
140
+ # Contains "catalog" in the name
141
+ "catalog" in first_part.lower()
142
+ # Follows catalog naming patterns (no numbers, shorter descriptive names)
143
+ or (
144
+ len(first_part) < 20
145
+ and not any(char.isdigit() for char in first_part)
146
+ and not first_part.startswith("mydb")
147
+ and not first_part.endswith( # Skip test-generated database names
148
+ "_dbmsu"
149
+ )
150
+ ) # Skip test-generated database names
151
+ )
152
+
153
+ is_catalog = is_registered_catalog or is_catalog_like
154
+
155
+ if is_catalog:
156
+ # This looks like a catalog.database.column.field pattern
157
+ raise AnalysisException(
158
+ f"[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `{original_attr_name}` cannot be resolved. "
159
+ f"Cross-catalog column references are not supported in DataFrame API."
160
+ )
161
+
43
162
  attr_name = ".".join(name_parts)
44
163
 
45
164
  has_plan_id = exp.unresolved_attribute.HasField("plan_id")
165
+ source_qualifiers = None
46
166
 
47
167
  if has_plan_id:
48
168
  plan_id = exp.unresolved_attribute.plan_id
@@ -51,13 +171,27 @@ def map_unresolved_attribute(
51
171
  assert (
52
172
  target_df is not None
53
173
  ), f"resolving an attribute of a unresolved dataframe {plan_id}"
174
+
175
+ # Get the qualifiers for this column from the target DataFrame
176
+ source_qualifiers = (
177
+ target_df_container.column_map.get_qualifier_for_spark_column(
178
+ name_parts[-1]
179
+ )
180
+ )
181
+
182
+ if hasattr(column_mapping, "hidden_columns"):
183
+ hidden = column_mapping.hidden_columns
184
+ else:
185
+ hidden = None
186
+
54
187
  column_mapping = target_df_container.column_map
188
+ column_mapping.hidden_columns = hidden
55
189
  typer = ExpressionTyper(target_df)
56
190
 
57
- def get_col(snowpark_name):
191
+ def get_col(snowpark_name, has_hidden=False):
58
192
  return (
59
193
  snowpark_fn.col(snowpark_name)
60
- if not has_plan_id
194
+ if not has_plan_id or has_hidden
61
195
  else target_df.col(snowpark_name)
62
196
  )
63
197
 
@@ -88,8 +222,14 @@ def map_unresolved_attribute(
88
222
  raise AnalysisException(f"Invalid regex pattern '{regex_pattern}': {e}")
89
223
 
90
224
  if not matched_columns:
225
+ # Keep the improved error message for SQL regex patterns
226
+ # This is only hit for SQL queries like SELECT `(e|f)` FROM table
227
+ # when spark.sql.parser.quotedRegexColumnNames is enabled
91
228
  raise AnalysisException(
92
- f"No columns match the regex pattern '{regex_pattern}'"
229
+ f"No columns match the regex pattern '{regex_pattern}'. "
230
+ f"Snowflake SQL does not support SELECT statements with no columns. "
231
+ f"Please ensure your regex pattern matches at least one column. "
232
+ f"Available columns: {', '.join(available_columns[:10])}{'...' if len(available_columns) > 10 else ''}"
93
233
  )
94
234
 
95
235
  # When multiple columns match, we need to signal that this should expand to multiple columns
@@ -136,24 +276,55 @@ def map_unresolved_attribute(
136
276
  quoted_attr_name = name_parts[0]
137
277
 
138
278
  snowpark_name = column_mapping.get_snowpark_column_name_from_spark_column_name(
139
- quoted_attr_name, allow_non_exists=True
279
+ quoted_attr_name,
280
+ allow_non_exists=True,
281
+ is_qualified=has_plan_id,
282
+ source_qualifiers=source_qualifiers if has_plan_id else None,
140
283
  )
284
+
141
285
  if snowpark_name is not None:
142
- col = get_col(snowpark_name)
286
+ is_hidden = column_mapping.is_hidden_column_reference(
287
+ quoted_attr_name, source_qualifiers
288
+ )
289
+ col = get_col(snowpark_name, is_hidden)
143
290
  qualifiers = column_mapping.get_qualifier_for_spark_column(quoted_attr_name)
144
291
  else:
145
292
  # this means it has to be a struct column with a field name
146
- snowpark_name = column_mapping.get_snowpark_column_name_from_spark_column_name(
147
- name_parts[0], allow_non_exists=True
293
+ snowpark_name: str | None = None
294
+ column_part_index: int = 0
295
+
296
+ # Get catalog/database info from column map if available
297
+ catalog_database_info = _get_catalog_database_from_column_map(
298
+ original_attr_name, column_mapping
148
299
  )
149
- if snowpark_name is None:
150
- for outer_df_container in get_outer_dataframes():
151
- snowpark_name = outer_df_container.column_map.get_snowpark_column_name_from_spark_column_name(
152
- name_parts[0], allow_non_exists=True
300
+
301
+ # Try to find the column name in different parts of the name_parts array
302
+ # For qualified names like "table.column.field", we need to find the column part
303
+ for i in range(len(name_parts)):
304
+ candidate_column = name_parts[i]
305
+ snowpark_name = (
306
+ column_mapping.get_snowpark_column_name_from_spark_column_name(
307
+ candidate_column, allow_non_exists=True
308
+ )
309
+ )
310
+ if snowpark_name is not None:
311
+ column_part_index = i
312
+ break
313
+
314
+ # Also try in outer dataframes
315
+ for outer_df in get_outer_dataframes():
316
+ snowpark_name = (
317
+ outer_df.column_map.get_snowpark_column_name_from_spark_column_name(
318
+ candidate_column, allow_non_exists=True
319
+ )
153
320
  )
154
321
  if snowpark_name is not None:
322
+ column_part_index = i
155
323
  break
156
324
 
325
+ if snowpark_name is not None:
326
+ break
327
+
157
328
  if snowpark_name is None:
158
329
  # Attempt LCA fallback.
159
330
  alias_tc = resolve_lca_alias(attr_name)
@@ -164,7 +335,8 @@ def map_unresolved_attribute(
164
335
 
165
336
  # If qualified name not found, try to resolve as unqualified column name
166
337
  # This handles cases like "d.name" where we need to find "name" after a JOIN
167
- if len(name_parts) > 1:
338
+ remaining_parts = name_parts
339
+ if len(remaining_parts) > 1:
168
340
  unqualified_name = name_parts[-1]
169
341
  snowpark_name = (
170
342
  column_mapping.get_snowpark_column_name_from_spark_column_name(
@@ -178,6 +350,9 @@ def map_unresolved_attribute(
178
350
  )
179
351
  typed_col = TypedColumn(col, lambda: typer.type(col))
180
352
  typed_col.set_qualifiers(qualifiers)
353
+ # Store catalog/database info if found in column map
354
+ if catalog_database_info:
355
+ typed_col.set_catalog_database_info(catalog_database_info)
181
356
  return (unqualified_name, typed_col)
182
357
 
183
358
  if snowpark_name is None:
@@ -193,7 +368,7 @@ def map_unresolved_attribute(
193
368
  try:
194
369
  col_type = typer.type(col)[0]
195
370
  except SnowparkSQLException as e:
196
- if "invalid identifier" in e.raw_message:
371
+ if e.raw_message is not None and "invalid identifier" in e.raw_message:
197
372
  raise AnalysisException(
198
373
  f'[COLUMN_NOT_FOUND] The column "{attr_name}" does not exist in the target dataframe.'
199
374
  )
@@ -204,7 +379,8 @@ def map_unresolved_attribute(
204
379
  if is_struct:
205
380
  attr_name = name_parts[-1]
206
381
 
207
- path = name_parts[1:]
382
+ # Calculate the field path correctly based on where we found the column
383
+ path = name_parts[column_part_index + 1 :]
208
384
  if is_struct and not global_config.spark_sql_caseSensitive:
209
385
  path = _match_path_to_struct(path, col_type)
210
386
 
@@ -215,6 +391,14 @@ def map_unresolved_attribute(
215
391
 
216
392
  typed_col = TypedColumn(col, lambda: typer.type(col))
217
393
  typed_col.set_qualifiers(qualifiers)
394
+
395
+ # Store catalog/database info if available from column map
396
+ final_catalog_database_info = _get_catalog_database_from_column_map(
397
+ original_attr_name, column_mapping
398
+ )
399
+ if final_catalog_database_info:
400
+ typed_col.set_catalog_database_info(final_catalog_database_info)
401
+
218
402
  return (name_parts[-1], typed_col)
219
403
 
220
404
 
@@ -6,7 +6,13 @@ import pyspark.sql.connect.proto.expressions_pb2 as expressions_proto
6
6
 
7
7
  import snowflake.snowpark.functions as snowpark_fn
8
8
  from snowflake.snowpark._internal.analyzer.expression import Literal
9
- from snowflake.snowpark.types import ArrayType, MapType, StructType, _IntegralType
9
+ from snowflake.snowpark.types import (
10
+ ArrayType,
11
+ MapType,
12
+ NullType,
13
+ StructType,
14
+ _IntegralType,
15
+ )
10
16
  from snowflake.snowpark_connect.column_name_handler import ColumnNameMap
11
17
  from snowflake.snowpark_connect.config import global_config
12
18
  from snowflake.snowpark_connect.expression.typer import ExpressionTyper
@@ -22,7 +28,7 @@ def _check_if_array_type(
22
28
  len(extract_typed_column_type) == 1
23
29
  and isinstance(extract_typed_column_type[0], ArrayType)
24
30
  and len(container_type) == 1
25
- and isinstance(container_type[0], _IntegralType)
31
+ and isinstance(container_type[0], (_IntegralType, NullType))
26
32
  )
27
33
 
28
34
 
@@ -56,29 +62,51 @@ def map_unresolved_extract_value(
56
62
  extract_fn = snowpark_fn.get
57
63
  else:
58
64
  extract_fn = snowpark_fn.get_ignore_case
59
- # Set index to a dummy value before we use it later in the ansi mode check.
60
- index = snowpark_fn.lit(1)
61
65
  is_array = _check_if_array_type(extract_typed_column, child_typed_column)
62
66
  if is_array:
63
- # Set all non-valid array indices to NULL.
64
- # This is done because both conditions of a CASE WHEN statement are executed regardless of if the condition is true or not.
65
- # Getting a negative index in Snowflake throws an error; thus, we convert all non-valid array indices to NULL before getting the index.
66
- index = snowpark_fn.when(
67
- (snowpark_fn.array_size(child_typed_column.col) > extract_typed_column.col)
68
- & (extract_typed_column.col >= 0),
69
- extract_typed_column.col,
70
- ).otherwise(snowpark_fn.lit(None))
71
- result_exp = snowpark_fn.when(index.isNull(), snowpark_fn.lit(None)).otherwise(
72
- snowpark_fn.get(child_typed_column.col, index)
73
- )
67
+ if isinstance(extract_typed_column.typ, NullType):
68
+ result_exp = snowpark_fn.lit(None)
69
+ else:
70
+ if (
71
+ isinstance(extract_typed_column.col._expression, Literal)
72
+ and extract_typed_column.col._expression.value is not None
73
+ ):
74
+ # Using NULL in NVL triggers Snowflake Optimiser to be much more efficient comparing to using a number.
75
+ # This unfortunately has a side effect of throwing and error when attempting to get the item from array.
76
+ # That's why we need to have a separate branch for fetching Nullable literals and non-literal expressions.
77
+ extracted_index = snowpark_fn.nvl(
78
+ extract_typed_column.col, snowpark_fn.lit(None)
79
+ )
80
+ else:
81
+ extracted_index = snowpark_fn.nvl(
82
+ extract_typed_column.col, snowpark_fn.lit(0)
83
+ )
84
+
85
+ result_exp = snowpark_fn.when(
86
+ snowpark_fn.nvl(
87
+ (extract_typed_column.col < 0)
88
+ | (extract_typed_column.col > 2_147_483_647),
89
+ snowpark_fn.lit(True),
90
+ ),
91
+ snowpark_fn.lit(None),
92
+ ).otherwise(
93
+ snowpark_fn.get(
94
+ child_typed_column.col,
95
+ extracted_index,
96
+ )
97
+ )
98
+
74
99
  else:
75
100
  result_exp = extract_fn(child_typed_column.col, extract_typed_column.col)
76
101
 
77
102
  spark_sql_ansi_enabled = global_config.spark_sql_ansi_enabled
78
103
 
79
104
  if spark_sql_ansi_enabled and is_array:
105
+ invalid_array_index = (
106
+ snowpark_fn.array_size(child_typed_column.col) <= extract_typed_column.col
107
+ ) | (extract_typed_column.col < 0)
80
108
  result_exp = snowpark_fn.when(
81
- index.isNull(),
109
+ invalid_array_index,
82
110
  child_typed_column.col.getItem("[snowpark_connect::INVALID_ARRAY_INDEX]"),
83
111
  ).otherwise(result_exp)
84
112