snowflake-snowpark-python 1.51.0__tar.gz → 1.52.0__tar.gz
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.
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/CHANGELOG.md +29 -1
- {snowflake_snowpark_python-1.51.0/src/snowflake_snowpark_python.egg-info → snowflake_snowpark_python-1.52.0}/PKG-INFO +4 -5
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/README.md +2 -2
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/setup.py +2 -3
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/analyzer_utils.py +1 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +0 -2
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/select_statement.py +2 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan_node.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/table_function.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/code_generation.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/cte_utils.py +6 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/repeated_subquery_elimination.py +38 -10
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/debug_utils.py +1 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/type_utils.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/udf_utils.py +2 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/utils.py +27 -3
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xml_schema_inference.py +1 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/column.py +1 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/context.py +28 -20
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe.py +17 -10
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_ai_functions.py +4 -4
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_na_functions.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_reader.py +59 -11
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_stat_functions.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_writer.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/files.py +1 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/functions.py +5 -12
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/__init__.py +2 -2
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/ordered_dataframe.py +1 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/indexing_overrides.py +1 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/pd_extensions.py +1 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/utils.py +2 -2
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/row.py +1 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/secrets.py +39 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/session.py +134 -48
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/stored_procedure.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/table.py +13 -8
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/types.py +3 -9
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udaf.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udf.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udtf.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/version.py +1 -1
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/window.py +1 -7
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0/src/snowflake_snowpark_python.egg-info}/PKG-INFO +4 -5
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/LICENSE.txt +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/MANIFEST.in +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/pyproject.toml +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/setup.cfg +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/general_functions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/scalar_functions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/binary_expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/binary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/grouping_set.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/metadata_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/query_plan_analysis_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/schema_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/sort_expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/table_merge_expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/unary_expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/unary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/window_expression.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/batch.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/builder.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/large_query_breakdown.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/plan_compiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/query_generator.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/telemetry_constants.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_partitioner.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_reader.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_typing.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/base_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/databricks_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/mysql_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/oracledb_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/postgresql_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlite3_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlserver_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/base_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/databricks_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/oracledb_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/psycopg2_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/pymsql_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/pyodbc_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/sqlite_driver.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/jdbc.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/error_message.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/event_table_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/open_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/packaging_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.pyi +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/select_projection_complexity_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/server_connection.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/snowpark_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/temp_table_auto_cleaner.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xml_reader.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xpath_handlers.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/async_job.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/catalog.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_analytics_functions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/file_operation.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/lineage.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_connection.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_constants.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_functions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_connection.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_plan.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_options.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_pandas_util.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_plan.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_plan_builder.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_select_statement.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_snowflake_data_type.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_snowflake_to_pandas_converter.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_stage_registry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udaf.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udf.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udf_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udtf.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_util.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_window_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/__main__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/envvars.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/pubsub.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/conftest.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/aggregation_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/align_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/binary_op_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/concat_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/cumulative_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/cut_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/frame.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/generator_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/get_dummies_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/groupby_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/indexing_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/io_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/isin_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/join_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/pivot_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/resample_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/row_count_estimation.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/session.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/snowpark_pandas_types.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/statement_params_constants.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/timestamp_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/transpose_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/unpivot_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/where_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/window_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_typing.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/doc_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/ray_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/snowflake_query_compiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/base.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/dataframe.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/general.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/groupby.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/io.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/resample.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/series.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/series_utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/shared_docs.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/window.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/base_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_extensions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/general_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/io_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/resample_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/resampler_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/rolling_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_extensions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/snow_partition_iterator.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/window_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/factories.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/snow_io.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/error_message.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/frontend_constants.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/numpy_to_pandas.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/warning_message.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/utils.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/py.typed +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/query_history.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/relational_grouped_dataframe.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/stored_procedure_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/table_function.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/testing.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udf_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/SOURCES.txt +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/dependency_links.txt +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/namespace_packages.txt +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/not-zip-safe +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/requires.txt +0 -0
- {snowflake_snowpark_python-1.51.0 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.52.0 (2026-06-10)
|
|
4
|
+
|
|
5
|
+
### Snowpark Python API Updates
|
|
6
|
+
|
|
7
|
+
#### New Features
|
|
8
|
+
|
|
9
|
+
- Added `get_wif_token` to `snowflake.snowpark.secrets` for workload identity federation tokens on the Snowflake server (not available in SPCS file-based secret environments).
|
|
10
|
+
|
|
11
|
+
#### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- Fixed a bug where copying a `DataFrame` via `copy.copy()` lost post-aggregate state, causing subsequent `.limit()` or `.sort()` to generate incorrect SQL.
|
|
14
|
+
- Fixed a bug where calling `DataFrame.alias()` twice on the same DataFrame (e.g. for a self-join) caused both aliases to share the same internal column-mapping dictionary. This made `col("R", "col")` resolve to the same column as `col("L", "col")`, producing incorrect join conditions and filter expressions.
|
|
15
|
+
- Fixed a bug where `cloudpickle` could not be resolved when registering a Python stored procedure or UDF with `runtime_version='3.13'`.
|
|
16
|
+
|
|
17
|
+
#### Improvements
|
|
18
|
+
|
|
19
|
+
- Improved CTE optimization to deduplicate identical subtrees in self-joins, which were previously emitted as repeated subqueries.
|
|
20
|
+
|
|
21
|
+
#### Deprecations
|
|
22
|
+
|
|
23
|
+
- Removed support for Python 3.9.
|
|
24
|
+
|
|
25
|
+
## 1.51.1 (2026-05-28)
|
|
26
|
+
|
|
27
|
+
#### Documentation
|
|
28
|
+
|
|
29
|
+
- Clarified that the JDBC driver JAR referenced via `udtf_configs.imports` in `DataFrameReader.jdbc()` must be downloaded from the database vendor and uploaded to a Snowflake stage.
|
|
30
|
+
|
|
31
|
+
## 1.51.0 (2026-05-18)
|
|
4
32
|
|
|
5
33
|
### Snowpark Python API Updates
|
|
6
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-snowpark-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.52.0
|
|
4
4
|
Summary: Snowflake Snowpark for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -22,7 +22,6 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
22
22
|
Classifier: Operating System :: OS Independent
|
|
23
23
|
Classifier: Programming Language :: SQL
|
|
24
24
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.10
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -33,7 +32,7 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
33
32
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
34
33
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
35
34
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
36
|
-
Requires-Python: >=3.
|
|
35
|
+
Requires-Python: >=3.10, <3.15
|
|
37
36
|
Description-Content-Type: text/markdown
|
|
38
37
|
License-File: LICENSE.txt
|
|
39
38
|
Requires-Dist: setuptools>=40.6.0
|
|
@@ -149,9 +148,9 @@ If you don't have a Snowflake account yet, you can [sign up for a 30-day free tr
|
|
|
149
148
|
|
|
150
149
|
### Create a Python virtual environment
|
|
151
150
|
You can use [miniconda][miniconda], [anaconda][anaconda], or [virtualenv][virtualenv]
|
|
152
|
-
to create a Python 3.
|
|
151
|
+
to create a Python 3.10, 3.11, 3.12 or 3.13 virtual environment.
|
|
153
152
|
|
|
154
|
-
For Snowpark pandas, only Python 3.
|
|
153
|
+
For Snowpark pandas, only Python 3.10 or 3.11 is supported.
|
|
155
154
|
|
|
156
155
|
To have the best experience when using it with UDFs, [creating a local conda environment with the Snowflake channel][use snowflake channel] is recommended.
|
|
157
156
|
|
|
@@ -18,9 +18,9 @@ If you don't have a Snowflake account yet, you can [sign up for a 30-day free tr
|
|
|
18
18
|
|
|
19
19
|
### Create a Python virtual environment
|
|
20
20
|
You can use [miniconda][miniconda], [anaconda][anaconda], or [virtualenv][virtualenv]
|
|
21
|
-
to create a Python 3.
|
|
21
|
+
to create a Python 3.10, 3.11, 3.12 or 3.13 virtual environment.
|
|
22
22
|
|
|
23
|
-
For Snowpark pandas, only Python 3.
|
|
23
|
+
For Snowpark pandas, only Python 3.10 or 3.11 is supported.
|
|
24
24
|
|
|
25
25
|
To have the best experience when using it with UDFs, [creating a local conda environment with the Snowflake channel][use snowflake channel] is recommended.
|
|
26
26
|
|
|
@@ -32,10 +32,10 @@ INSTALL_REQ_LIST = [
|
|
|
32
32
|
"python-dateutil", # Snowpark IR
|
|
33
33
|
"tzlocal", # Snowpark IR
|
|
34
34
|
]
|
|
35
|
-
REQUIRED_PYTHON_VERSION = ">=3.
|
|
35
|
+
REQUIRED_PYTHON_VERSION = ">=3.10, <3.15"
|
|
36
36
|
|
|
37
37
|
if os.getenv("SNOWFLAKE_IS_PYTHON_RUNTIME_TEST", False):
|
|
38
|
-
REQUIRED_PYTHON_VERSION = ">=3.
|
|
38
|
+
REQUIRED_PYTHON_VERSION = ">=3.10"
|
|
39
39
|
|
|
40
40
|
PANDAS_REQUIREMENTS = [
|
|
41
41
|
f"snowflake-connector-python[pandas]{CONNECTOR_DEPENDENCY_VERSION}",
|
|
@@ -246,7 +246,6 @@ setup(
|
|
|
246
246
|
"Operating System :: OS Independent",
|
|
247
247
|
"Programming Language :: SQL",
|
|
248
248
|
"Programming Language :: Python :: 3 :: Only",
|
|
249
|
-
"Programming Language :: Python :: 3.9",
|
|
250
249
|
"Programming Language :: Python :: 3.10",
|
|
251
250
|
"Programming Language :: Python :: 3.11",
|
|
252
251
|
"Programming Language :: Python :: 3.12",
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import json
|
|
7
7
|
import math
|
|
8
8
|
import os
|
|
9
|
-
import sys
|
|
10
9
|
import tempfile
|
|
11
10
|
from typing import Any, Dict, List, Optional, Tuple, Union, Literal, Sequence
|
|
12
11
|
|
|
@@ -52,13 +51,7 @@ from snowflake.snowpark._internal.utils import (
|
|
|
52
51
|
from snowflake.snowpark.row import Row
|
|
53
52
|
from snowflake.snowpark.types import DataType
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
# Python 3.9 can use both
|
|
57
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
58
|
-
if sys.version_info <= (3, 9):
|
|
59
|
-
from typing import Iterable
|
|
60
|
-
else:
|
|
61
|
-
from collections.abc import Iterable
|
|
54
|
+
from collections.abc import Iterable
|
|
62
55
|
|
|
63
56
|
LEFT_PARENTHESIS = "("
|
|
64
57
|
RIGHT_PARENTHESIS = ")"
|
|
@@ -518,8 +518,6 @@ def schema_expression(data_type: DataType, is_nullable: bool) -> str:
|
|
|
518
518
|
return "PARSE_JSON('NULL') :: VARIANT"
|
|
519
519
|
return "NULL :: " + convert_sp_to_sf_type(data_type)
|
|
520
520
|
|
|
521
|
-
if isinstance(data_type, DecFloatType):
|
|
522
|
-
return "DECFLOAT '0'"
|
|
523
521
|
if isinstance(data_type, _NumericType):
|
|
524
522
|
return "0 :: " + convert_sp_to_sf_type(data_type)
|
|
525
523
|
if isinstance(data_type, StringType):
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
3
3
|
#
|
|
4
4
|
|
|
5
|
-
import sys
|
|
6
5
|
import uuid
|
|
7
6
|
import re
|
|
8
7
|
from abc import ABC, abstractmethod
|
|
@@ -90,13 +89,7 @@ from snowflake.snowpark._internal.utils import (
|
|
|
90
89
|
)
|
|
91
90
|
import snowflake.snowpark.context as context
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
# Python 3.9 can use both
|
|
95
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
96
|
-
if sys.version_info <= (3, 9):
|
|
97
|
-
from typing import Iterable
|
|
98
|
-
else:
|
|
99
|
-
from collections.abc import Iterable
|
|
92
|
+
from collections.abc import Iterable
|
|
100
93
|
|
|
101
94
|
SET_UNION = analyzer_utils.UNION
|
|
102
95
|
SET_UNION_ALL = analyzer_utils.UNION_ALL
|
|
@@ -963,7 +956,7 @@ class SelectStatement(Selectable):
|
|
|
963
956
|
new._snowflake_plan = None
|
|
964
957
|
new.flatten_disabled = False # by default a SelectStatement can be flattened.
|
|
965
958
|
new._api_calls = self._api_calls.copy() if self._api_calls is not None else None
|
|
966
|
-
new.df_aliased_col_name_to_real_col_name = (
|
|
959
|
+
new.df_aliased_col_name_to_real_col_name = deepcopy(
|
|
967
960
|
self.df_aliased_col_name_to_real_col_name
|
|
968
961
|
)
|
|
969
962
|
new._merge_projection_complexity_with_subquery = (
|
|
@@ -143,13 +143,7 @@ from snowflake.snowpark.row import Row
|
|
|
143
143
|
from snowflake.snowpark.types import StructType
|
|
144
144
|
import snowflake.snowpark.context as context
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
# Python 3.9 can use both
|
|
148
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
149
|
-
if sys.version_info <= (3, 9):
|
|
150
|
-
from typing import Iterable
|
|
151
|
-
else:
|
|
152
|
-
from collections.abc import Iterable
|
|
146
|
+
from collections.abc import Iterable
|
|
153
147
|
|
|
154
148
|
_logger = getLogger(__name__)
|
|
155
149
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
from collections.abc import Iterable
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
|
9
9
|
|
|
@@ -17,14 +17,6 @@ from snowflake.snowpark._internal.analyzer.query_plan_analysis_utils import (
|
|
|
17
17
|
from snowflake.snowpark.row import Row
|
|
18
18
|
from snowflake.snowpark.types import StructType
|
|
19
19
|
|
|
20
|
-
# Python 3.8 needs to use typing.Iterable because collections.abc.Iterable is not subscriptable
|
|
21
|
-
# Python 3.9 can use both
|
|
22
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
23
|
-
if sys.version_info <= (3, 9):
|
|
24
|
-
from typing import Iterable
|
|
25
|
-
else:
|
|
26
|
-
from collections.abc import Iterable
|
|
27
|
-
|
|
28
20
|
if TYPE_CHECKING:
|
|
29
21
|
from snowflake.snowpark import Session
|
|
30
22
|
from snowflake.snowpark.udtf import UserDefinedTableFunction
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
3
3
|
#
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
from collections.abc import Iterable
|
|
6
6
|
from typing import Dict, List, Optional
|
|
7
7
|
|
|
8
8
|
from snowflake.snowpark._internal.analyzer.expression import Expression
|
|
@@ -13,14 +13,6 @@ from snowflake.snowpark._internal.analyzer.query_plan_analysis_utils import (
|
|
|
13
13
|
from snowflake.snowpark._internal.analyzer.snowflake_plan_node import LogicalPlan
|
|
14
14
|
from snowflake.snowpark._internal.analyzer.sort_expression import SortOrder
|
|
15
15
|
|
|
16
|
-
# Python 3.8 needs to use typing.Iterable because collections.abc.Iterable is not subscriptable
|
|
17
|
-
# Python 3.9 can use both
|
|
18
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
19
|
-
if sys.version_info <= (3, 9):
|
|
20
|
-
from typing import Iterable
|
|
21
|
-
else:
|
|
22
|
-
from collections.abc import Iterable
|
|
23
|
-
|
|
24
16
|
|
|
25
17
|
class TableFunctionPartitionSpecDefinition(Expression):
|
|
26
18
|
def __init__(
|
|
@@ -17,13 +17,7 @@ from typing import Any, Dict, List, Set, Tuple, Union
|
|
|
17
17
|
|
|
18
18
|
import opcode
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
# Python 3.9 can use both
|
|
22
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
23
|
-
if sys.version_info <= (3, 9):
|
|
24
|
-
from typing import Iterable
|
|
25
|
-
else:
|
|
26
|
-
from collections.abc import Iterable
|
|
20
|
+
from collections.abc import Iterable
|
|
27
21
|
|
|
28
22
|
logger = getLogger(__name__)
|
|
29
23
|
|
|
@@ -307,7 +307,12 @@ def encode_query_id(node: "TreeNode") -> Optional[str]:
|
|
|
307
307
|
if query_params:
|
|
308
308
|
string = f"{string}#{query_params}"
|
|
309
309
|
if hasattr(node, "expr_to_alias") and node.expr_to_alias:
|
|
310
|
-
|
|
310
|
+
# Hash by alias values only, not the UUID keys, since UUID keys are regenerated on every deep-copy/re-resolve (e.g. the two
|
|
311
|
+
# branches of a self-join). This lets nodes representing the same computation hash identically, enabling CTE dedup for self-joins.
|
|
312
|
+
# NOTE: since nodes with different UUID keys can now share a CTE, _replace_duplicate_node_with_cte must merge each duplicate's
|
|
313
|
+
# UUID→alias entries into the shared CTE so parent re-resolution can resolve any UUID variant (see companion comment there).
|
|
314
|
+
# Different alias values (e.g. a "_WITH_AD_GROUP" join suffix from _disambiguate) still hash differently, preserving SNOW-2261400.
|
|
315
|
+
string = f"{string}#{sorted(set(node.expr_to_alias.values()))}"
|
|
311
316
|
if (
|
|
312
317
|
hasattr(node, "df_aliased_col_name_to_real_col_name")
|
|
313
318
|
and node.df_aliased_col_name_to_real_col_name
|
|
@@ -108,6 +108,24 @@ class RepeatedSubqueryElimination:
|
|
|
108
108
|
total_num_ctes=self._total_number_ctes,
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
+
@staticmethod
|
|
112
|
+
def _has_alias_conflict(
|
|
113
|
+
node: TreeNode, existing_cte: Optional[SnowflakePlan]
|
|
114
|
+
) -> bool:
|
|
115
|
+
"""Whether sharing ``existing_cte`` for ``node`` would map the same expr_id to a
|
|
116
|
+
different alias. encode_query_id hashes expr_to_alias by alias values only, so
|
|
117
|
+
nodes mapping the same expr_id to different aliases can collide. Merging such a
|
|
118
|
+
node into the shared CTE would silently drop an entry and corrupt parent column
|
|
119
|
+
resolution, so in that case we skip the CTE and render the node inline."""
|
|
120
|
+
if existing_cte is None:
|
|
121
|
+
return False
|
|
122
|
+
node_expr_to_alias = getattr(node, "expr_to_alias", None) or {}
|
|
123
|
+
return any(
|
|
124
|
+
key in existing_cte.expr_to_alias
|
|
125
|
+
and existing_cte.expr_to_alias[key] != alias
|
|
126
|
+
for key, alias in node_expr_to_alias.items()
|
|
127
|
+
)
|
|
128
|
+
|
|
111
129
|
def _replace_duplicate_node_with_cte(
|
|
112
130
|
self,
|
|
113
131
|
root: TreeNode,
|
|
@@ -159,16 +177,20 @@ class RepeatedSubqueryElimination:
|
|
|
159
177
|
if node in visited_nodes:
|
|
160
178
|
continue
|
|
161
179
|
|
|
162
|
-
#
|
|
163
|
-
#
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
180
|
+
# Decide whether this node should be represented by a (new or shared) CTE:
|
|
181
|
+
# it must be a detected duplicate, and sharing the CTE must not introduce an
|
|
182
|
+
# alias conflict (see _has_alias_conflict). When it cannot be a CTE, the node
|
|
183
|
+
# is left inline and only the parent-propagation path applies, exactly like a
|
|
184
|
+
# non-duplicated node.
|
|
185
|
+
resolved_with_block = resolved_with_block_map.get(
|
|
186
|
+
node.encoded_node_id_with_query
|
|
187
|
+
)
|
|
188
|
+
is_cte_node = node.encoded_node_id_with_query in duplicated_node_ids and (
|
|
189
|
+
not self._has_alias_conflict(node, resolved_with_block)
|
|
190
|
+
)
|
|
191
|
+
if is_cte_node:
|
|
192
|
+
if resolved_with_block is None:
|
|
193
|
+
# no CTE block has been created for this node yet, create one.
|
|
172
194
|
if (
|
|
173
195
|
self._query_generator.session.reduce_describe_query_enabled
|
|
174
196
|
and context._is_snowpark_connect_compatible_mode
|
|
@@ -187,6 +209,12 @@ class RepeatedSubqueryElimination:
|
|
|
187
209
|
node.encoded_node_id_with_query
|
|
188
210
|
] = resolved_with_block
|
|
189
211
|
self._total_number_ctes += 1
|
|
212
|
+
elif getattr(node, "expr_to_alias", None):
|
|
213
|
+
# reuse the existing CTE block. expr_ids are regenerated on copy, so
|
|
214
|
+
# this node's keys differ from the node the CTE was built from; merge
|
|
215
|
+
# this node's entries so every expr_id variant stays resolvable during
|
|
216
|
+
# parent re-resolution.
|
|
217
|
+
resolved_with_block.expr_to_alias.update(node.expr_to_alias)
|
|
190
218
|
_update_parents(
|
|
191
219
|
node, should_replace_child=True, new_child=resolved_with_block
|
|
192
220
|
)
|
|
@@ -64,7 +64,7 @@ class DataFrameTraceNode:
|
|
|
64
64
|
code_lines[0] = code_lines[0][start_column:]
|
|
65
65
|
code_lines[-1] = code_lines[-1][:end_column]
|
|
66
66
|
else:
|
|
67
|
-
# For python 3.
|
|
67
|
+
# For python 3.10, we do not extract the end line from the source code
|
|
68
68
|
# so we just read the start line and return.
|
|
69
69
|
for line in itertools.islice(f, start_line - 1, start_line):
|
|
70
70
|
code_lines.append(line)
|
|
@@ -83,13 +83,7 @@ from snowflake.snowpark.types import (
|
|
|
83
83
|
File,
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
# Python 3.9 can use both
|
|
88
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
89
|
-
try:
|
|
90
|
-
from typing import Iterable # noqa: F401
|
|
91
|
-
except ImportError:
|
|
92
|
-
from collections.abc import Iterable # noqa: F401
|
|
86
|
+
from collections.abc import Iterable # noqa: F401
|
|
93
87
|
|
|
94
88
|
if installed_pandas:
|
|
95
89
|
from snowflake.snowpark.types import (
|
|
@@ -71,13 +71,7 @@ if installed_pandas:
|
|
|
71
71
|
PandasSeriesType,
|
|
72
72
|
)
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
# Python 3.9 can use both
|
|
76
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
77
|
-
if sys.version_info <= (3, 9):
|
|
78
|
-
from typing import Iterable
|
|
79
|
-
else:
|
|
80
|
-
from collections.abc import Iterable
|
|
74
|
+
from collections.abc import Iterable
|
|
81
75
|
|
|
82
76
|
logger = getLogger(__name__)
|
|
83
77
|
|
|
@@ -1276,7 +1270,7 @@ def resolve_imports_and_packages(
|
|
|
1276
1270
|
any(pkg.startswith("cloudpickle") for pkg in packages)
|
|
1277
1271
|
)
|
|
1278
1272
|
resolved_packages = packages + (
|
|
1279
|
-
[f"cloudpickle
|
|
1273
|
+
[f"cloudpickle>={cloudpickle.__version__}"]
|
|
1280
1274
|
if not has_cloudpickle
|
|
1281
1275
|
else []
|
|
1282
1276
|
)
|
|
@@ -1955,6 +1955,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1955
1955
|
timestamp: Optional[str] = None
|
|
1956
1956
|
timestamp_type: Optional[str] = None
|
|
1957
1957
|
stream: Optional[str] = None
|
|
1958
|
+
version: Optional[int] = None
|
|
1958
1959
|
|
|
1959
1960
|
@staticmethod
|
|
1960
1961
|
def validate_and_normalize_params(
|
|
@@ -1964,6 +1965,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1964
1965
|
timestamp: Optional[Union[str, datetime.datetime]] = None,
|
|
1965
1966
|
timestamp_type: Optional[Union[str, "TimestampTimeZone"]] = None,
|
|
1966
1967
|
stream: Optional[str] = None,
|
|
1968
|
+
version: Optional[int] = None,
|
|
1967
1969
|
) -> Optional["TimeTravelConfig"]:
|
|
1968
1970
|
"""
|
|
1969
1971
|
Validates and normalizes time travel parameters.
|
|
@@ -1986,7 +1988,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1986
1988
|
ValueError: If parameters are invalid.
|
|
1987
1989
|
"""
|
|
1988
1990
|
time_travel_arg_count = sum(
|
|
1989
|
-
arg is not None for arg in (statement, offset, timestamp, stream)
|
|
1991
|
+
arg is not None for arg in (statement, offset, timestamp, stream, version)
|
|
1990
1992
|
)
|
|
1991
1993
|
|
|
1992
1994
|
# Validate mode
|
|
@@ -2003,10 +2005,28 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2003
2005
|
f"Invalid time travel mode: {time_travel_mode}. Must be 'at' or 'before'."
|
|
2004
2006
|
)
|
|
2005
2007
|
|
|
2008
|
+
# version (Iceberg snapshot id) only works with 'at' mode — matches
|
|
2009
|
+
# Snowflake's ``AT(VERSION => <id>)`` grammar and Spark Iceberg's
|
|
2010
|
+
# ``snapshot-id`` option semantics ("read snapshot N", not "before N").
|
|
2011
|
+
if version is not None and time_travel_mode.lower() != "at":
|
|
2012
|
+
raise ValueError(
|
|
2013
|
+
"Iceberg snapshot version time travel can only be used with "
|
|
2014
|
+
"time_travel_mode='at', not 'before'."
|
|
2015
|
+
)
|
|
2016
|
+
|
|
2017
|
+
# Validate version type — snapshot IDs are 64-bit integers in Iceberg.
|
|
2018
|
+
# Reject bool explicitly because ``isinstance(True, int)`` is True in Python.
|
|
2019
|
+
if version is not None and (
|
|
2020
|
+
not isinstance(version, int) or isinstance(version, bool)
|
|
2021
|
+
):
|
|
2022
|
+
raise ValueError(
|
|
2023
|
+
f"'version' must be an int Iceberg snapshot id, got {type(version).__name__}."
|
|
2024
|
+
)
|
|
2025
|
+
|
|
2006
2026
|
# Validate exactly one parameter is provided
|
|
2007
2027
|
if time_travel_arg_count != 1:
|
|
2008
2028
|
raise ValueError(
|
|
2009
|
-
"Exactly one of 'statement', 'offset', 'timestamp', or '
|
|
2029
|
+
"Exactly one of 'statement', 'offset', 'timestamp', 'stream', or 'version' must be provided."
|
|
2010
2030
|
)
|
|
2011
2031
|
|
|
2012
2032
|
# Normalize timestamp
|
|
@@ -2040,6 +2060,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2040
2060
|
timestamp=normalized_timestamp,
|
|
2041
2061
|
timestamp_type=timestamp_type,
|
|
2042
2062
|
stream=stream,
|
|
2063
|
+
version=version,
|
|
2043
2064
|
)
|
|
2044
2065
|
|
|
2045
2066
|
def generate_sql_clause(self) -> str:
|
|
@@ -2048,7 +2069,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2048
2069
|
Args:
|
|
2049
2070
|
config: Time travel configuration.
|
|
2050
2071
|
Returns:
|
|
2051
|
-
SQL clause like " AT (TIMESTAMP => TO_TIMESTAMP_NTZ('...'))"
|
|
2072
|
+
SQL clause like " AT (TIMESTAMP => TO_TIMESTAMP_NTZ('...'))" or
|
|
2073
|
+
" AT (VERSION => 1234567890)" for Iceberg snapshot id time travel.
|
|
2052
2074
|
"""
|
|
2053
2075
|
clause = f" {self.time_travel_mode.upper()} "
|
|
2054
2076
|
|
|
@@ -2058,6 +2080,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2058
2080
|
clause += f"(OFFSET => {self.offset})"
|
|
2059
2081
|
elif self.stream is not None:
|
|
2060
2082
|
clause += f"(STREAM => '{self.stream}')"
|
|
2083
|
+
elif self.version is not None:
|
|
2084
|
+
clause += f"(VERSION => {self.version})"
|
|
2061
2085
|
elif self.timestamp is not None:
|
|
2062
2086
|
if self.timestamp_type is not None:
|
|
2063
2087
|
timestamp_type = self.timestamp_type.upper()
|
|
@@ -112,7 +112,7 @@ def _infer_primitive_type(text: str) -> DataType:
|
|
|
112
112
|
pass
|
|
113
113
|
|
|
114
114
|
# Timestamp (Spark default: TimestampFormatter with CAST logic)
|
|
115
|
-
# Backward compatibility: Python 3.
|
|
115
|
+
# Backward compatibility: Python 3.10 fromisoformat doesn't support 'Z' suffix; replace with +00:00
|
|
116
116
|
try:
|
|
117
117
|
ts_text = text.replace("Z", "+00:00") if text.endswith("Z") else text
|
|
118
118
|
datetime.fromisoformat(ts_text)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
|
|
6
|
-
import sys
|
|
7
6
|
import typing
|
|
8
7
|
from typing import Any, Optional, Union
|
|
9
8
|
|
|
@@ -100,13 +99,7 @@ from snowflake.snowpark.types import (
|
|
|
100
99
|
)
|
|
101
100
|
from snowflake.snowpark.window import Window, WindowSpec
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
# Python 3.9 can use both
|
|
105
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
106
|
-
if sys.version_info <= (3, 9):
|
|
107
|
-
from typing import Iterable
|
|
108
|
-
else:
|
|
109
|
-
from collections.abc import Iterable
|
|
102
|
+
from collections.abc import Iterable
|
|
110
103
|
|
|
111
104
|
|
|
112
105
|
def _to_col_if_lit(
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"""Context module for Snowpark."""
|
|
7
7
|
import logging
|
|
8
8
|
import sys
|
|
9
|
-
from typing import Callable, Optional
|
|
9
|
+
from typing import Any, Callable, Optional
|
|
10
10
|
|
|
11
11
|
import snowflake.snowpark
|
|
12
12
|
import threading
|
|
@@ -45,6 +45,11 @@ _aggregation_function_set = (
|
|
|
45
45
|
set()
|
|
46
46
|
) # lower cased names of aggregation functions, used in sql simplification
|
|
47
47
|
_aggregation_function_set_lock = threading.RLock()
|
|
48
|
+
_aggregation_function_prefetch_state: dict[str, Any] = {
|
|
49
|
+
"lock": threading.RLock(),
|
|
50
|
+
"event": None,
|
|
51
|
+
"job": None,
|
|
52
|
+
}
|
|
48
53
|
|
|
49
54
|
# Hardcoded fallback for system built-in aggregation functions.
|
|
50
55
|
# Used when the dynamic query fails to retrieve the list from the database.
|
|
@@ -62,9 +67,6 @@ _KNOWN_AGGREGATION_FUNCTIONS = frozenset(
|
|
|
62
67
|
"ai_agg",
|
|
63
68
|
"ai_summarize_agg",
|
|
64
69
|
"any_value",
|
|
65
|
-
"approximate_count_distinct",
|
|
66
|
-
"approximate_jaccard_index",
|
|
67
|
-
"approximate_similarity",
|
|
68
70
|
"approx_count_distinct",
|
|
69
71
|
"approx_percentile",
|
|
70
72
|
"approx_percentile_accumulate",
|
|
@@ -72,25 +74,29 @@ _KNOWN_AGGREGATION_FUNCTIONS = frozenset(
|
|
|
72
74
|
"approx_top_k",
|
|
73
75
|
"approx_top_k_accumulate",
|
|
74
76
|
"approx_top_k_combine",
|
|
75
|
-
"
|
|
77
|
+
"approximate_count_distinct",
|
|
78
|
+
"approximate_jaccard_index",
|
|
79
|
+
"approximate_similarity",
|
|
76
80
|
"array_agg",
|
|
77
81
|
"array_union_agg",
|
|
78
82
|
"array_unique_agg",
|
|
83
|
+
"arrayagg",
|
|
79
84
|
"avg",
|
|
80
|
-
"
|
|
85
|
+
"bit_and_agg",
|
|
86
|
+
"bit_andagg",
|
|
87
|
+
"bit_or_agg",
|
|
88
|
+
"bit_oragg",
|
|
89
|
+
"bit_xor_agg",
|
|
90
|
+
"bit_xoragg",
|
|
81
91
|
"bitand_agg",
|
|
92
|
+
"bitandagg",
|
|
93
|
+
"bitmap_and_agg",
|
|
82
94
|
"bitmap_construct_agg",
|
|
83
95
|
"bitmap_or_agg",
|
|
84
|
-
"bitoragg",
|
|
85
96
|
"bitor_agg",
|
|
86
|
-
"
|
|
97
|
+
"bitoragg",
|
|
87
98
|
"bitxor_agg",
|
|
88
|
-
"
|
|
89
|
-
"bit_and_agg",
|
|
90
|
-
"bit_oragg",
|
|
91
|
-
"bit_or_agg",
|
|
92
|
-
"bit_xoragg",
|
|
93
|
-
"bit_xor_agg",
|
|
99
|
+
"bitxoragg",
|
|
94
100
|
"booland_agg",
|
|
95
101
|
"boolor_agg",
|
|
96
102
|
"boolxor_agg",
|
|
@@ -115,12 +121,12 @@ _KNOWN_AGGREGATION_FUNCTIONS = frozenset(
|
|
|
115
121
|
"max_by",
|
|
116
122
|
"median",
|
|
117
123
|
"min",
|
|
124
|
+
"min_by",
|
|
118
125
|
"minhash",
|
|
119
126
|
"minhash_combine",
|
|
120
|
-
"min_by",
|
|
121
127
|
"mode",
|
|
122
|
-
"objectagg",
|
|
123
128
|
"object_agg",
|
|
129
|
+
"objectagg",
|
|
124
130
|
"percentile_cont",
|
|
125
131
|
"percentile_disc",
|
|
126
132
|
"regr_avgx",
|
|
@@ -133,20 +139,21 @@ _KNOWN_AGGREGATION_FUNCTIONS = frozenset(
|
|
|
133
139
|
"regr_sxy",
|
|
134
140
|
"regr_syy",
|
|
135
141
|
"skew",
|
|
142
|
+
"st_intersection_agg_geography_internal",
|
|
143
|
+
"st_union_agg_geography_internal",
|
|
136
144
|
"stddev",
|
|
137
145
|
"stddev_pop",
|
|
138
146
|
"stddev_samp",
|
|
139
|
-
"st_intersection_agg_geography_internal",
|
|
140
|
-
"st_union_agg_geography_internal",
|
|
141
147
|
"sum",
|
|
142
148
|
"sum_internal",
|
|
143
149
|
"sum_internal_real",
|
|
144
150
|
"sum_real",
|
|
151
|
+
"summarize_agg",
|
|
152
|
+
"var_pop",
|
|
153
|
+
"var_samp",
|
|
145
154
|
"variance",
|
|
146
155
|
"variance_pop",
|
|
147
156
|
"variance_samp",
|
|
148
|
-
"var_pop",
|
|
149
|
-
"var_samp",
|
|
150
157
|
"vector_avg",
|
|
151
158
|
"vector_max",
|
|
152
159
|
"vector_min",
|
|
@@ -154,6 +161,7 @@ _KNOWN_AGGREGATION_FUNCTIONS = frozenset(
|
|
|
154
161
|
]
|
|
155
162
|
)
|
|
156
163
|
|
|
164
|
+
|
|
157
165
|
_cte_error_threshold = 3 # 0 to disable auto-cte-disable, otherwise the number of times CTE optimization can fail before it is automatically disabled for the remainder of the session.
|
|
158
166
|
|
|
159
167
|
# Following are internal-only global flags, used to enable development features.
|