snowpark-connect 0.24.0__py3-none-any.whl → 0.26.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 (484) hide show
  1. snowflake/snowpark_connect/column_name_handler.py +116 -4
  2. snowflake/snowpark_connect/config.py +23 -0
  3. snowflake/snowpark_connect/constants.py +0 -29
  4. snowflake/snowpark_connect/dataframe_container.py +22 -0
  5. snowflake/snowpark_connect/execute_plan/map_execution_command.py +56 -1
  6. snowflake/snowpark_connect/expression/literal.py +13 -2
  7. snowflake/snowpark_connect/expression/map_cast.py +5 -8
  8. snowflake/snowpark_connect/expression/map_sql_expression.py +23 -1
  9. snowflake/snowpark_connect/expression/map_udf.py +88 -29
  10. snowflake/snowpark_connect/expression/map_unresolved_attribute.py +199 -15
  11. snowflake/snowpark_connect/expression/map_unresolved_extract_value.py +44 -16
  12. snowflake/snowpark_connect/expression/map_unresolved_function.py +840 -367
  13. snowflake/snowpark_connect/expression/map_unresolved_star.py +3 -2
  14. snowflake/snowpark_connect/hidden_column.py +39 -0
  15. snowflake/snowpark_connect/includes/jars/hadoop-client-api-trimmed-3.3.4.jar +0 -0
  16. snowflake/snowpark_connect/includes/jars/json4s-native_2.12-3.7.0-M11.jar +0 -0
  17. snowflake/snowpark_connect/includes/jars/paranamer-2.8.3.jar +0 -0
  18. snowflake/snowpark_connect/includes/jars/sas-scala-udf_2.12-0.1.0.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 +17 -4
  21. snowflake/snowpark_connect/relation/map_extension.py +52 -11
  22. snowflake/snowpark_connect/relation/map_join.py +258 -62
  23. snowflake/snowpark_connect/relation/map_map_partitions.py +9 -4
  24. snowflake/snowpark_connect/relation/map_relation.py +12 -1
  25. snowflake/snowpark_connect/relation/map_row_ops.py +8 -1
  26. snowflake/snowpark_connect/relation/map_sql.py +88 -11
  27. snowflake/snowpark_connect/relation/map_udtf.py +100 -46
  28. snowflake/snowpark_connect/relation/read/map_read.py +3 -3
  29. snowflake/snowpark_connect/relation/read/map_read_jdbc.py +1 -1
  30. snowflake/snowpark_connect/relation/read/map_read_json.py +8 -1
  31. snowflake/snowpark_connect/relation/read/map_read_table.py +1 -9
  32. snowflake/snowpark_connect/relation/read/reader_config.py +3 -1
  33. snowflake/snowpark_connect/relation/utils.py +44 -0
  34. snowflake/snowpark_connect/relation/write/map_write.py +175 -75
  35. snowflake/snowpark_connect/resources_initializer.py +47 -6
  36. snowflake/snowpark_connect/server.py +26 -4
  37. snowflake/snowpark_connect/type_mapping.py +29 -25
  38. snowflake/snowpark_connect/typed_column.py +14 -0
  39. snowflake/snowpark_connect/utils/artifacts.py +23 -0
  40. snowflake/snowpark_connect/utils/concurrent.py +4 -0
  41. snowflake/snowpark_connect/utils/context.py +6 -1
  42. snowflake/snowpark_connect/utils/external_udxf_cache.py +36 -0
  43. snowflake/snowpark_connect/utils/scala_udf_utils.py +596 -0
  44. snowflake/snowpark_connect/utils/session.py +4 -0
  45. snowflake/snowpark_connect/utils/telemetry.py +6 -17
  46. snowflake/snowpark_connect/utils/udf_helper.py +2 -0
  47. snowflake/snowpark_connect/utils/udf_utils.py +22 -1
  48. snowflake/snowpark_connect/utils/udtf_utils.py +1 -0
  49. snowflake/snowpark_connect/version.py +1 -1
  50. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/METADATA +1 -1
  51. snowpark_connect-0.26.0.dist-info/RECORD +481 -0
  52. snowflake/snowpark_connect/includes/jars/scala-compiler-2.12.18.jar +0 -0
  53. snowflake/snowpark_connect/includes/jars/spark-kubernetes_2.12-3.5.6.jar +0 -0
  54. snowflake/snowpark_connect/includes/jars/spark-mllib_2.12-3.5.6.jar +0 -0
  55. snowflake/snowpark_connect/includes/jars/spark-streaming_2.12-3.5.6.jar +0 -0
  56. snowflake/snowpark_connect/includes/python/pyspark/errors/tests/__init__.py +0 -16
  57. snowflake/snowpark_connect/includes/python/pyspark/errors/tests/test_errors.py +0 -60
  58. snowflake/snowpark_connect/includes/python/pyspark/ml/deepspeed/tests/test_deepspeed_distributor.py +0 -306
  59. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/__init__.py +0 -16
  60. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_classification.py +0 -53
  61. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_evaluation.py +0 -50
  62. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_feature.py +0 -43
  63. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_function.py +0 -114
  64. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_pipeline.py +0 -47
  65. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_summarizer.py +0 -43
  66. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_connect_tuning.py +0 -46
  67. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_classification.py +0 -238
  68. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_evaluation.py +0 -194
  69. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_feature.py +0 -156
  70. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_pipeline.py +0 -184
  71. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_summarizer.py +0 -78
  72. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_legacy_mode_tuning.py +0 -292
  73. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_parity_torch_data_loader.py +0 -50
  74. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/connect/test_parity_torch_distributor.py +0 -152
  75. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_algorithms.py +0 -456
  76. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_base.py +0 -96
  77. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_dl_util.py +0 -186
  78. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_evaluation.py +0 -77
  79. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_feature.py +0 -401
  80. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_functions.py +0 -528
  81. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_image.py +0 -82
  82. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_linalg.py +0 -409
  83. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_model_cache.py +0 -55
  84. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_param.py +0 -441
  85. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_persistence.py +0 -546
  86. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_pipeline.py +0 -71
  87. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_stat.py +0 -52
  88. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_training_summary.py +0 -494
  89. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_util.py +0 -85
  90. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/test_wrapper.py +0 -138
  91. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/__init__.py +0 -16
  92. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_basic.py +0 -151
  93. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_nested.py +0 -97
  94. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_cv_io_pipeline.py +0 -143
  95. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tuning.py +0 -551
  96. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_basic.py +0 -137
  97. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_nested.py +0 -96
  98. snowflake/snowpark_connect/includes/python/pyspark/ml/tests/tuning/test_tvs_io_pipeline.py +0 -142
  99. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/__init__.py +0 -16
  100. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_data_loader.py +0 -137
  101. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_distributor.py +0 -561
  102. snowflake/snowpark_connect/includes/python/pyspark/ml/torch/tests/test_log_communication.py +0 -172
  103. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/__init__.py +0 -16
  104. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_algorithms.py +0 -353
  105. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_feature.py +0 -192
  106. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_linalg.py +0 -680
  107. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_stat.py +0 -206
  108. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_streaming_algorithms.py +0 -471
  109. snowflake/snowpark_connect/includes/python/pyspark/mllib/tests/test_util.py +0 -108
  110. snowflake/snowpark_connect/includes/python/pyspark/pandas/spark/__init__.py +0 -16
  111. snowflake/snowpark_connect/includes/python/pyspark/pandas/spark/accessors.py +0 -1281
  112. snowflake/snowpark_connect/includes/python/pyspark/pandas/spark/functions.py +0 -203
  113. snowflake/snowpark_connect/includes/python/pyspark/pandas/spark/utils.py +0 -202
  114. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/__init__.py +0 -16
  115. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/__init__.py +0 -16
  116. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_any_all.py +0 -177
  117. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_apply_func.py +0 -575
  118. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_binary_ops.py +0 -235
  119. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_combine.py +0 -653
  120. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_compute.py +0 -463
  121. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_corrwith.py +0 -86
  122. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_cov.py +0 -151
  123. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_cumulative.py +0 -139
  124. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_describe.py +0 -458
  125. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_eval.py +0 -86
  126. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_melt.py +0 -202
  127. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_missing_data.py +0 -520
  128. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/computation/test_pivot.py +0 -361
  129. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/__init__.py +0 -16
  130. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/__init__.py +0 -16
  131. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_any_all.py +0 -40
  132. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_apply_func.py +0 -42
  133. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_binary_ops.py +0 -40
  134. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_combine.py +0 -37
  135. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_compute.py +0 -60
  136. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_corrwith.py +0 -40
  137. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_cov.py +0 -40
  138. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_cumulative.py +0 -90
  139. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_describe.py +0 -40
  140. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_eval.py +0 -40
  141. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_melt.py +0 -40
  142. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_missing_data.py +0 -42
  143. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/computation/test_parity_pivot.py +0 -37
  144. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/__init__.py +0 -16
  145. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_base.py +0 -36
  146. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_binary_ops.py +0 -42
  147. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_boolean_ops.py +0 -47
  148. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_categorical_ops.py +0 -55
  149. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_complex_ops.py +0 -40
  150. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_date_ops.py +0 -47
  151. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_datetime_ops.py +0 -47
  152. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_null_ops.py +0 -42
  153. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_arithmetic.py +0 -43
  154. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_ops.py +0 -47
  155. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_num_reverse.py +0 -43
  156. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_string_ops.py +0 -47
  157. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_timedelta_ops.py +0 -47
  158. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/test_parity_udt_ops.py +0 -40
  159. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/data_type_ops/testing_utils.py +0 -226
  160. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/__init__.py +0 -16
  161. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_align.py +0 -39
  162. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_basic_slow.py +0 -55
  163. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_cov_corrwith.py +0 -39
  164. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_dot_frame.py +0 -39
  165. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_dot_series.py +0 -39
  166. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_index.py +0 -39
  167. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_series.py +0 -39
  168. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_setitem_frame.py +0 -43
  169. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/diff_frames_ops/test_parity_setitem_series.py +0 -43
  170. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/__init__.py +0 -16
  171. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_attrs.py +0 -40
  172. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_constructor.py +0 -39
  173. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_conversion.py +0 -42
  174. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_reindexing.py +0 -42
  175. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_reshaping.py +0 -37
  176. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_spark.py +0 -40
  177. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_take.py +0 -42
  178. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_time_series.py +0 -48
  179. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/frame/test_parity_truncate.py +0 -40
  180. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/__init__.py +0 -16
  181. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_aggregate.py +0 -40
  182. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_apply_func.py +0 -41
  183. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_cumulative.py +0 -67
  184. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_describe.py +0 -40
  185. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_groupby.py +0 -55
  186. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_head_tail.py +0 -40
  187. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_index.py +0 -38
  188. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_missing_data.py +0 -55
  189. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_split_apply.py +0 -39
  190. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/groupby/test_parity_stat.py +0 -38
  191. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/__init__.py +0 -16
  192. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_align.py +0 -40
  193. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_base.py +0 -50
  194. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_category.py +0 -73
  195. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_datetime.py +0 -39
  196. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_indexing.py +0 -40
  197. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_reindex.py +0 -40
  198. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_rename.py +0 -40
  199. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_reset_index.py +0 -48
  200. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/indexes/test_parity_timedelta.py +0 -39
  201. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/io/__init__.py +0 -16
  202. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/io/test_parity_io.py +0 -40
  203. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/__init__.py +0 -16
  204. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot.py +0 -45
  205. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot_matplotlib.py +0 -45
  206. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_frame_plot_plotly.py +0 -49
  207. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot.py +0 -37
  208. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot_matplotlib.py +0 -53
  209. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/plot/test_parity_series_plot_plotly.py +0 -45
  210. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/__init__.py +0 -16
  211. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_all_any.py +0 -38
  212. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_arg_ops.py +0 -37
  213. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_as_of.py +0 -37
  214. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_as_type.py +0 -38
  215. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_compute.py +0 -37
  216. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_conversion.py +0 -40
  217. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_cumulative.py +0 -40
  218. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_index.py +0 -38
  219. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_missing_data.py +0 -40
  220. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_series.py +0 -37
  221. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_sort.py +0 -38
  222. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/series/test_parity_stat.py +0 -38
  223. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_categorical.py +0 -66
  224. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_config.py +0 -37
  225. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_csv.py +0 -37
  226. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_dataframe_conversion.py +0 -42
  227. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_dataframe_spark_io.py +0 -39
  228. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_default_index.py +0 -49
  229. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ewm.py +0 -37
  230. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_expanding.py +0 -39
  231. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_extension.py +0 -49
  232. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_frame_spark.py +0 -53
  233. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_generic_functions.py +0 -43
  234. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_indexing.py +0 -49
  235. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_indexops_spark.py +0 -39
  236. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_internal.py +0 -41
  237. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_namespace.py +0 -39
  238. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_numpy_compat.py +0 -60
  239. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames.py +0 -48
  240. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby.py +0 -39
  241. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby_expanding.py +0 -44
  242. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_ops_on_diff_frames_groupby_rolling.py +0 -84
  243. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_repr.py +0 -37
  244. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_resample.py +0 -45
  245. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_reshape.py +0 -39
  246. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_rolling.py +0 -39
  247. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_scalars.py +0 -37
  248. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_conversion.py +0 -39
  249. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_datetime.py +0 -39
  250. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_series_string.py +0 -39
  251. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_spark_functions.py +0 -39
  252. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_sql.py +0 -43
  253. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_stats.py +0 -37
  254. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_typedef.py +0 -36
  255. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_utils.py +0 -37
  256. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/connect/test_parity_window.py +0 -39
  257. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/__init__.py +0 -16
  258. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_base.py +0 -107
  259. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_binary_ops.py +0 -224
  260. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_boolean_ops.py +0 -825
  261. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_categorical_ops.py +0 -562
  262. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_complex_ops.py +0 -368
  263. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_date_ops.py +0 -257
  264. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_datetime_ops.py +0 -260
  265. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_null_ops.py +0 -178
  266. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_arithmetic.py +0 -184
  267. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_ops.py +0 -497
  268. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_num_reverse.py +0 -140
  269. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_string_ops.py +0 -354
  270. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_timedelta_ops.py +0 -219
  271. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/test_udt_ops.py +0 -192
  272. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/data_type_ops/testing_utils.py +0 -228
  273. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/__init__.py +0 -16
  274. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_align.py +0 -118
  275. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_basic_slow.py +0 -198
  276. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_cov_corrwith.py +0 -181
  277. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_dot_frame.py +0 -103
  278. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_dot_series.py +0 -141
  279. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_index.py +0 -109
  280. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_series.py +0 -136
  281. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_setitem_frame.py +0 -125
  282. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/diff_frames_ops/test_setitem_series.py +0 -217
  283. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/__init__.py +0 -16
  284. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_attrs.py +0 -384
  285. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_constructor.py +0 -598
  286. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_conversion.py +0 -73
  287. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_reindexing.py +0 -869
  288. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_reshaping.py +0 -487
  289. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_spark.py +0 -309
  290. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_take.py +0 -156
  291. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_time_series.py +0 -149
  292. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/frame/test_truncate.py +0 -163
  293. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/__init__.py +0 -16
  294. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_aggregate.py +0 -311
  295. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_apply_func.py +0 -524
  296. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_cumulative.py +0 -419
  297. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_describe.py +0 -144
  298. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_groupby.py +0 -979
  299. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_head_tail.py +0 -234
  300. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_index.py +0 -206
  301. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_missing_data.py +0 -421
  302. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_split_apply.py +0 -187
  303. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/groupby/test_stat.py +0 -397
  304. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/__init__.py +0 -16
  305. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_align.py +0 -100
  306. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_base.py +0 -2743
  307. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_category.py +0 -484
  308. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_datetime.py +0 -276
  309. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_indexing.py +0 -432
  310. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_reindex.py +0 -310
  311. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_rename.py +0 -257
  312. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_reset_index.py +0 -160
  313. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/indexes/test_timedelta.py +0 -128
  314. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/io/__init__.py +0 -16
  315. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/io/test_io.py +0 -137
  316. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/__init__.py +0 -16
  317. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot.py +0 -170
  318. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot_matplotlib.py +0 -547
  319. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_frame_plot_plotly.py +0 -285
  320. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot.py +0 -106
  321. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot_matplotlib.py +0 -409
  322. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/plot/test_series_plot_plotly.py +0 -247
  323. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/__init__.py +0 -16
  324. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_all_any.py +0 -105
  325. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_arg_ops.py +0 -197
  326. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_as_of.py +0 -137
  327. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_as_type.py +0 -227
  328. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_compute.py +0 -634
  329. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_conversion.py +0 -88
  330. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_cumulative.py +0 -139
  331. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_index.py +0 -475
  332. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_missing_data.py +0 -265
  333. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_series.py +0 -818
  334. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_sort.py +0 -162
  335. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/series/test_stat.py +0 -780
  336. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_categorical.py +0 -741
  337. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_config.py +0 -160
  338. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_csv.py +0 -453
  339. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_dataframe_conversion.py +0 -281
  340. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_dataframe_spark_io.py +0 -487
  341. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_default_index.py +0 -109
  342. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ewm.py +0 -434
  343. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_expanding.py +0 -253
  344. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_extension.py +0 -152
  345. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_frame_spark.py +0 -162
  346. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_generic_functions.py +0 -234
  347. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_indexing.py +0 -1339
  348. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_indexops_spark.py +0 -82
  349. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_internal.py +0 -124
  350. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_namespace.py +0 -638
  351. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_numpy_compat.py +0 -200
  352. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames.py +0 -1355
  353. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby.py +0 -655
  354. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby_expanding.py +0 -113
  355. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_ops_on_diff_frames_groupby_rolling.py +0 -118
  356. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_repr.py +0 -192
  357. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_resample.py +0 -346
  358. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_reshape.py +0 -495
  359. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_rolling.py +0 -263
  360. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_scalars.py +0 -59
  361. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_conversion.py +0 -85
  362. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_datetime.py +0 -364
  363. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_series_string.py +0 -362
  364. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_spark_functions.py +0 -46
  365. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_sql.py +0 -123
  366. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_stats.py +0 -581
  367. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_typedef.py +0 -447
  368. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_utils.py +0 -301
  369. snowflake/snowpark_connect/includes/python/pyspark/pandas/tests/test_window.py +0 -465
  370. snowflake/snowpark_connect/includes/python/pyspark/resource/tests/__init__.py +0 -16
  371. snowflake/snowpark_connect/includes/python/pyspark/resource/tests/test_resources.py +0 -83
  372. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/__init__.py +0 -16
  373. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/__init__.py +0 -16
  374. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/__init__.py +0 -16
  375. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/test_artifact.py +0 -420
  376. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/client/test_client.py +0 -358
  377. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/__init__.py +0 -16
  378. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_foreach.py +0 -36
  379. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_foreach_batch.py +0 -44
  380. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_listener.py +0 -116
  381. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/streaming/test_parity_streaming.py +0 -35
  382. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_basic.py +0 -3612
  383. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_column.py +0 -1042
  384. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_function.py +0 -2381
  385. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_connect_plan.py +0 -1060
  386. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow.py +0 -163
  387. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow_map.py +0 -38
  388. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_arrow_python_udf.py +0 -48
  389. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_catalog.py +0 -36
  390. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_column.py +0 -55
  391. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_conf.py +0 -36
  392. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_dataframe.py +0 -96
  393. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_datasources.py +0 -44
  394. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_errors.py +0 -36
  395. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_functions.py +0 -59
  396. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_group.py +0 -36
  397. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_cogrouped_map.py +0 -59
  398. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_grouped_map.py +0 -74
  399. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_grouped_map_with_state.py +0 -62
  400. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_map.py +0 -58
  401. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf.py +0 -70
  402. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_grouped_agg.py +0 -50
  403. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_scalar.py +0 -68
  404. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_pandas_udf_window.py +0 -40
  405. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_readwriter.py +0 -46
  406. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_serde.py +0 -44
  407. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_types.py +0 -100
  408. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_udf.py +0 -100
  409. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_parity_udtf.py +0 -163
  410. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_session.py +0 -181
  411. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/connect/test_utils.py +0 -42
  412. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/__init__.py +0 -16
  413. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_cogrouped_map.py +0 -623
  414. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_grouped_map.py +0 -869
  415. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_grouped_map_with_state.py +0 -342
  416. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_map.py +0 -436
  417. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf.py +0 -363
  418. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_grouped_agg.py +0 -592
  419. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_scalar.py +0 -1503
  420. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_typehints.py +0 -392
  421. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_typehints_with_future_annotations.py +0 -375
  422. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/pandas/test_pandas_udf_window.py +0 -411
  423. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/__init__.py +0 -16
  424. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming.py +0 -401
  425. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_foreach.py +0 -295
  426. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_foreach_batch.py +0 -106
  427. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/streaming/test_streaming_listener.py +0 -558
  428. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow.py +0 -1346
  429. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow_map.py +0 -182
  430. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_arrow_python_udf.py +0 -202
  431. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_catalog.py +0 -503
  432. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_column.py +0 -225
  433. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_conf.py +0 -83
  434. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_context.py +0 -201
  435. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_dataframe.py +0 -1931
  436. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_datasources.py +0 -256
  437. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_errors.py +0 -69
  438. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_functions.py +0 -1349
  439. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_group.py +0 -53
  440. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_pandas_sqlmetrics.py +0 -68
  441. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_readwriter.py +0 -283
  442. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_serde.py +0 -155
  443. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_session.py +0 -412
  444. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_types.py +0 -1581
  445. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udf.py +0 -961
  446. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udf_profiler.py +0 -165
  447. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_udtf.py +0 -1456
  448. snowflake/snowpark_connect/includes/python/pyspark/sql/tests/test_utils.py +0 -1686
  449. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/__init__.py +0 -16
  450. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_context.py +0 -184
  451. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_dstream.py +0 -706
  452. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_kinesis.py +0 -118
  453. snowflake/snowpark_connect/includes/python/pyspark/streaming/tests/test_listener.py +0 -160
  454. snowflake/snowpark_connect/includes/python/pyspark/tests/__init__.py +0 -16
  455. snowflake/snowpark_connect/includes/python/pyspark/tests/test_appsubmit.py +0 -306
  456. snowflake/snowpark_connect/includes/python/pyspark/tests/test_broadcast.py +0 -196
  457. snowflake/snowpark_connect/includes/python/pyspark/tests/test_conf.py +0 -44
  458. snowflake/snowpark_connect/includes/python/pyspark/tests/test_context.py +0 -346
  459. snowflake/snowpark_connect/includes/python/pyspark/tests/test_daemon.py +0 -89
  460. snowflake/snowpark_connect/includes/python/pyspark/tests/test_install_spark.py +0 -124
  461. snowflake/snowpark_connect/includes/python/pyspark/tests/test_join.py +0 -69
  462. snowflake/snowpark_connect/includes/python/pyspark/tests/test_memory_profiler.py +0 -167
  463. snowflake/snowpark_connect/includes/python/pyspark/tests/test_pin_thread.py +0 -194
  464. snowflake/snowpark_connect/includes/python/pyspark/tests/test_profiler.py +0 -168
  465. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rdd.py +0 -939
  466. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rddbarrier.py +0 -52
  467. snowflake/snowpark_connect/includes/python/pyspark/tests/test_rddsampler.py +0 -66
  468. snowflake/snowpark_connect/includes/python/pyspark/tests/test_readwrite.py +0 -368
  469. snowflake/snowpark_connect/includes/python/pyspark/tests/test_serializers.py +0 -257
  470. snowflake/snowpark_connect/includes/python/pyspark/tests/test_shuffle.py +0 -267
  471. snowflake/snowpark_connect/includes/python/pyspark/tests/test_stage_sched.py +0 -153
  472. snowflake/snowpark_connect/includes/python/pyspark/tests/test_statcounter.py +0 -130
  473. snowflake/snowpark_connect/includes/python/pyspark/tests/test_taskcontext.py +0 -350
  474. snowflake/snowpark_connect/includes/python/pyspark/tests/test_util.py +0 -97
  475. snowflake/snowpark_connect/includes/python/pyspark/tests/test_worker.py +0 -271
  476. snowpark_connect-0.24.0.dist-info/RECORD +0 -898
  477. {snowpark_connect-0.24.0.data → snowpark_connect-0.26.0.data}/scripts/snowpark-connect +0 -0
  478. {snowpark_connect-0.24.0.data → snowpark_connect-0.26.0.data}/scripts/snowpark-session +0 -0
  479. {snowpark_connect-0.24.0.data → snowpark_connect-0.26.0.data}/scripts/snowpark-submit +0 -0
  480. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/WHEEL +0 -0
  481. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/licenses/LICENSE-binary +0 -0
  482. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/licenses/LICENSE.txt +0 -0
  483. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/licenses/NOTICE-binary +0 -0
  484. {snowpark_connect-0.24.0.dist-info → snowpark_connect-0.26.0.dist-info}/top_level.txt +0 -0
@@ -13,6 +13,10 @@ from snowflake.snowpark_connect.config import global_config
13
13
  from snowflake.snowpark_connect.expression.typer import ExpressionTyper
14
14
  from snowflake.snowpark_connect.type_mapping import proto_to_snowpark_type
15
15
  from snowflake.snowpark_connect.typed_column import TypedColumn
16
+ from snowflake.snowpark_connect.utils.external_udxf_cache import (
17
+ cache_external_udf,
18
+ get_external_udf_from_cache,
19
+ )
16
20
  from snowflake.snowpark_connect.utils.session import get_or_create_snowpark_session
17
21
  from snowflake.snowpark_connect.utils.udf_helper import (
18
22
  SnowparkUDF,
@@ -30,6 +34,39 @@ from snowflake.snowpark_connect.utils.udxf_import_utils import (
30
34
  )
31
35
 
32
36
 
37
+ def cache_external_udf_wrapper(from_register_udf: bool):
38
+ def outer_wrapper(wrapper_func):
39
+ def wrapper(
40
+ udf_proto: expressions_proto.CommonInlineUserDefinedFunction,
41
+ ) -> SnowparkUDF | None:
42
+ udf_hash = hash(str(udf_proto))
43
+ cached_udf = get_external_udf_from_cache(udf_hash)
44
+
45
+ if cached_udf:
46
+ session = get_or_create_snowpark_session()
47
+ function_type = udf_proto.WhichOneof("function")
48
+ # TODO: Align this with SNOW-2316798 after merge
49
+ match function_type:
50
+ case "scalar_scala_udf":
51
+ session._udfs[cached_udf.name] = cached_udf
52
+ case "python_udf" if from_register_udf:
53
+ session._udfs[udf_proto.function_name.lower()] = cached_udf
54
+ case "python_udf":
55
+ pass
56
+ case _:
57
+ raise ValueError(f"Unsupported UDF type: {function_type}")
58
+
59
+ return cached_udf
60
+
61
+ snowpark_udf = wrapper_func(udf_proto)
62
+ cache_external_udf(udf_hash, snowpark_udf)
63
+ return snowpark_udf
64
+
65
+ return wrapper
66
+
67
+ return outer_wrapper
68
+
69
+
33
70
  def process_udf_return_type(
34
71
  return_type: types_proto.DataType,
35
72
  ) -> tuple[snowpark.types.DataType, snowpark.types.DataType]:
@@ -49,13 +86,21 @@ def process_udf_return_type(
49
86
  return original_snowpark_type, original_snowpark_type
50
87
 
51
88
 
89
+ @cache_external_udf_wrapper(from_register_udf=True)
52
90
  def register_udf(
53
91
  udf_proto: expressions_proto.CommonInlineUserDefinedFunction,
54
92
  ) -> SnowparkUDF:
55
93
  udf_check(udf_proto)
56
- processed_return_type, original_return_type = process_udf_return_type(
57
- udf_proto.python_udf.output_type
58
- )
94
+ match udf_proto.WhichOneof("function"):
95
+ case "python_udf":
96
+ output_type = udf_proto.python_udf.output_type
97
+ case "scalar_scala_udf":
98
+ output_type = udf_proto.scalar_scala_udf.outputType
99
+ case _:
100
+ raise ValueError(
101
+ f"Unsupported UDF type: {udf_proto.WhichOneof('function')}"
102
+ )
103
+ processed_return_type, original_return_type = process_udf_return_type(output_type)
59
104
  session = get_or_create_snowpark_session()
60
105
  kwargs = {
61
106
  "common_inline_user_defined_function": udf_proto,
@@ -77,9 +122,10 @@ def register_udf(
77
122
  return_type=udf._return_type,
78
123
  original_return_type=original_return_type,
79
124
  )
80
- # the create udf does register the udf but this seems to be for the client side check
81
- # TODO: check if this is needed
82
125
  session._udfs[udf_proto.function_name.lower()] = udf
126
+ # scala udfs can be also accessed using `udf.name`
127
+ if udf_processor._function_type == "scalar_scala_udf":
128
+ session._udfs[udf.name] = udf
83
129
  return udf
84
130
 
85
131
 
@@ -94,31 +140,44 @@ def map_common_inline_user_defined_udf(
94
140
  udf_proto, column_mapping, typer
95
141
  )
96
142
  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
- )
100
- session = get_or_create_snowpark_session()
101
- kwargs = {
102
- "common_inline_user_defined_function": udf_proto,
103
- "input_types": input_types,
104
- "called_from": "map_common_inline_user_defined_udf",
105
- "return_type": processed_return_type,
106
- "udf_packages": global_config.get("snowpark.connect.udf.packages", ""),
107
- "udf_imports": get_python_udxf_import_files(session),
108
- "original_return_type": original_return_type,
109
- }
110
- if require_creating_udf_in_sproc(udf_proto):
111
- snowpark_udf = process_udf_in_sproc(**kwargs)
112
- else:
113
- udf_processor = ProcessCommonInlineUserDefinedFunction(**kwargs)
114
- udf = udf_processor.create_udf()
115
- snowpark_udf = SnowparkUDF(
116
- name=udf.name,
117
- input_types=udf._input_types,
118
- return_type=udf._return_type,
119
- original_return_type=original_return_type,
120
- )
143
+ match udf_proto.WhichOneof("function"):
144
+ case "python_udf":
145
+ processed_return_type, original_return_type = process_udf_return_type(
146
+ udf_proto.python_udf.output_type
147
+ )
148
+ case "scalar_scala_udf":
149
+ processed_return_type, original_return_type = process_udf_return_type(
150
+ udf_proto.scalar_scala_udf.outputType
151
+ )
152
+
153
+ @cache_external_udf_wrapper(from_register_udf=False)
154
+ def get_snowpark_udf(
155
+ udf_proto: expressions_proto.CommonInlineUserDefinedFunction,
156
+ ) -> SnowparkUDF:
157
+ session = get_or_create_snowpark_session()
158
+ kwargs = {
159
+ "common_inline_user_defined_function": udf_proto,
160
+ "input_types": input_types,
161
+ "called_from": "map_common_inline_user_defined_udf",
162
+ "return_type": processed_return_type,
163
+ "udf_packages": global_config.get("snowpark.connect.udf.packages", ""),
164
+ "udf_imports": get_python_udxf_import_files(session),
165
+ "original_return_type": original_return_type,
166
+ }
167
+ if require_creating_udf_in_sproc(udf_proto):
168
+ snowpark_udf = process_udf_in_sproc(**kwargs)
169
+ else:
170
+ udf_processor = ProcessCommonInlineUserDefinedFunction(**kwargs)
171
+ udf = udf_processor.create_udf()
172
+ snowpark_udf = SnowparkUDF(
173
+ name=udf.name,
174
+ input_types=udf._input_types,
175
+ return_type=udf._return_type,
176
+ original_return_type=original_return_type,
177
+ )
178
+ return snowpark_udf
121
179
 
180
+ snowpark_udf = get_snowpark_udf(udf_proto)
122
181
  udf_call_expr = snowpark_fn.call_udf(snowpark_udf.name, *snowpark_udf_args)
123
182
 
124
183
  # 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