snowflake-snowpark-python 1.53.0__tar.gz → 1.53.1__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.53.0 → snowflake_snowpark_python-1.53.1}/CHANGELOG.md +4 -0
- {snowflake_snowpark_python-1.53.0/src/snowflake_snowpark_python.egg-info → snowflake_snowpark_python-1.53.1}/PKG-INFO +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/utils.py +67 -24
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_reader.py +77 -23
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/functions.py +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/query_history.py +95 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/session.py +18 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/table.py +4 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/version.py +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1/src/snowflake_snowpark_python.egg-info}/PKG-INFO +1 -1
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/LICENSE.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/MANIFEST.in +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/README.md +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/pyproject.toml +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/setup.cfg +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/setup.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_functions/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_functions/general_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_functions/scalar_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/analyzer_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/binary_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/binary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/grouping_set.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/metadata_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/query_plan_analysis_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/schema_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/select_statement.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/sort_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/table_function.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/table_merge_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/unary_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/unary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/analyzer/window_expression.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/ast/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/ast/batch.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/ast/builder.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/ast/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/code_generation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/cte_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/large_query_breakdown.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/plan_compiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/query_generator.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/repeated_subquery_elimination.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/telemetry_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/compiler/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/datasource_partitioner.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/datasource_reader.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/datasource_typing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/base_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/databricks_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/mysql_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/oracledb_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/postgresql_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlite3_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlserver_dialect.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/base_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/databricks_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/oracledb_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/psycopg2_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/pymsql_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/pyodbc_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/drivers/sqlite_driver.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/jdbc.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/data_source/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/debug_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/error_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/event_table_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/open_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/packaging_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/proto/generated/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.pyi +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/select_projection_complexity_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/server_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/snowpark_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/temp_table_auto_cleaner.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/udf_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/xml_reader.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/xml_schema_inference.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/_internal/xpath_handlers.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/async_job.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/catalog.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/column.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/context.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_ai_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_analytics_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_na_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_stat_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/dataframe_writer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/file_operation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/files.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/lineage.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_functions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_nop_analyzer.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_nop_connection.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_nop_plan.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_options.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_pandas_util.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_plan.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_plan_builder.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_select_statement.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_snowflake_data_type.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_snowflake_to_pandas_converter.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_stage_registry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_udaf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_udf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_udf_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_udtf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_util.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/_window_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/mock/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/config/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/config/__main__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/config/envvars.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/config/pubsub.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/conftest.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/aggregation_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/align_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/binary_op_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/concat_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/cumulative_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/cut_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/frame.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/generator_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/get_dummies_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/groupby_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/indexing_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/io_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/isin_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/join_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/ordered_dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/pivot_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/resample_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/row_count_estimation.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/session.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/snowpark_pandas_types.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/statement_params_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/timestamp_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/transpose_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/unpivot_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/where_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_internal/window_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/_typing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/compiler/doc_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/compiler/ray_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/compiler/snowflake_query_compiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/base.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/general.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/groupby.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/io.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/resample.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/series.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/series_utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/shared_docs.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/docstrings/window.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/base_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/general_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/indexing_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/io_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/pd_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/resample_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/resampler_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/rolling_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/series_extensions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/series_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/series_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/snow_partition_iterator.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/extensions/window_overrides.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/io/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/io/factories.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/io/snow_io.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/__init__.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/error_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/exceptions.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/frontend_constants.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/numpy_to_pandas.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/plugin/utils/warning_message.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/modin/utils.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/py.typed +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/relational_grouped_dataframe.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/row.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/secrets.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/stored_procedure_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/table_function.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/testing.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/types.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/udaf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/udf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/udf_profiler.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/udtf.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake/snowpark/window.py +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/SOURCES.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/dependency_links.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/namespace_packages.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/not-zip-safe +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/requires.txt +0 -0
- {snowflake_snowpark_python-1.53.0 → snowflake_snowpark_python-1.53.1}/src/snowflake_snowpark_python.egg-info/top_level.txt +0 -0
|
@@ -2009,6 +2009,23 @@ def remove_comments(sql_query: str, uuids: List[str]) -> str:
|
|
|
2009
2009
|
)
|
|
2010
2010
|
|
|
2011
2011
|
|
|
2012
|
+
def _validate_iceberg_named_version_ref(
|
|
2013
|
+
value: Optional[str], param_name: str
|
|
2014
|
+
) -> Optional[str]:
|
|
2015
|
+
"""Validate a non-empty Iceberg tag/branch/version-ref name."""
|
|
2016
|
+
if value is None:
|
|
2017
|
+
return None
|
|
2018
|
+
if not isinstance(value, str):
|
|
2019
|
+
raise ValueError(
|
|
2020
|
+
f"'{param_name}' must be a string Iceberg name, "
|
|
2021
|
+
f"got {type(value).__name__}."
|
|
2022
|
+
)
|
|
2023
|
+
stripped = value.strip()
|
|
2024
|
+
if not stripped:
|
|
2025
|
+
raise ValueError(f"'{param_name}' must be a non-empty Iceberg name.")
|
|
2026
|
+
return stripped
|
|
2027
|
+
|
|
2028
|
+
|
|
2012
2029
|
class TimeTravelConfig(NamedTuple):
|
|
2013
2030
|
"""Configuration for time travel operations."""
|
|
2014
2031
|
|
|
@@ -2020,6 +2037,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2020
2037
|
stream: Optional[str] = None
|
|
2021
2038
|
version: Optional[int] = None
|
|
2022
2039
|
version_tag: Optional[str] = None
|
|
2040
|
+
version_ref: Optional[str] = None
|
|
2041
|
+
branch: Optional[str] = None
|
|
2023
2042
|
|
|
2024
2043
|
@staticmethod
|
|
2025
2044
|
def validate_and_normalize_params(
|
|
@@ -2031,6 +2050,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2031
2050
|
stream: Optional[str] = None,
|
|
2032
2051
|
version: Optional[int] = None,
|
|
2033
2052
|
version_tag: Optional[str] = None,
|
|
2053
|
+
version_ref: Optional[str] = None,
|
|
2054
|
+
branch: Optional[str] = None,
|
|
2034
2055
|
) -> Optional["TimeTravelConfig"]:
|
|
2035
2056
|
"""
|
|
2036
2057
|
Validates and normalizes time travel parameters.
|
|
@@ -2052,9 +2073,31 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2052
2073
|
Raises:
|
|
2053
2074
|
ValueError: If parameters are invalid.
|
|
2054
2075
|
"""
|
|
2076
|
+
version_tag = _validate_iceberg_named_version_ref(version_tag, "version_tag")
|
|
2077
|
+
version_ref = _validate_iceberg_named_version_ref(version_ref, "version_ref")
|
|
2078
|
+
branch = _validate_iceberg_named_version_ref(branch, "branch")
|
|
2079
|
+
|
|
2080
|
+
named_ref_count = sum(
|
|
2081
|
+
arg is not None for arg in (version_tag, version_ref, branch)
|
|
2082
|
+
)
|
|
2083
|
+
if named_ref_count > 1:
|
|
2084
|
+
raise ValueError(
|
|
2085
|
+
"Exactly one of 'version_tag', 'version_ref', or 'branch' may be "
|
|
2086
|
+
"provided for Iceberg named-ref time travel."
|
|
2087
|
+
)
|
|
2088
|
+
|
|
2055
2089
|
time_travel_arg_count = sum(
|
|
2056
2090
|
arg is not None
|
|
2057
|
-
for arg in (
|
|
2091
|
+
for arg in (
|
|
2092
|
+
statement,
|
|
2093
|
+
offset,
|
|
2094
|
+
timestamp,
|
|
2095
|
+
stream,
|
|
2096
|
+
version,
|
|
2097
|
+
version_tag,
|
|
2098
|
+
version_ref,
|
|
2099
|
+
branch,
|
|
2100
|
+
)
|
|
2058
2101
|
)
|
|
2059
2102
|
|
|
2060
2103
|
# Validate mode
|
|
@@ -2089,32 +2132,25 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2089
2132
|
f"'version' must be an int Iceberg snapshot id, got {type(version).__name__}."
|
|
2090
2133
|
)
|
|
2091
2134
|
|
|
2092
|
-
#
|
|
2093
|
-
# ``AT(
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
)
|
|
2101
|
-
|
|
2102
|
-
# Validate version_tag type — Iceberg tag names are strings. Empty
|
|
2103
|
-
# strings are invalid.
|
|
2104
|
-
if version_tag is not None:
|
|
2105
|
-
if not isinstance(version_tag, str):
|
|
2135
|
+
# Named Iceberg refs (tag / branch / version_ref) map to Snowflake's
|
|
2136
|
+
# ``AT(VERSION_REF => '<name>')`` grammar and only work with 'at' mode.
|
|
2137
|
+
for param_name, param_value in (
|
|
2138
|
+
("version_tag", version_tag),
|
|
2139
|
+
("version_ref", version_ref),
|
|
2140
|
+
("branch", branch),
|
|
2141
|
+
):
|
|
2142
|
+
if param_value is not None and time_travel_mode.lower() != "at":
|
|
2106
2143
|
raise ValueError(
|
|
2107
|
-
f"
|
|
2108
|
-
|
|
2144
|
+
f"Iceberg {param_name} time travel can only be used with "
|
|
2145
|
+
"time_travel_mode='at', not 'before'."
|
|
2109
2146
|
)
|
|
2110
|
-
if not version_tag:
|
|
2111
|
-
raise ValueError("'version_tag' must be a non-empty Iceberg tag name.")
|
|
2112
2147
|
|
|
2113
2148
|
# Validate exactly one parameter is provided
|
|
2114
2149
|
if time_travel_arg_count != 1:
|
|
2115
2150
|
raise ValueError(
|
|
2116
2151
|
"Exactly one of 'statement', 'offset', 'timestamp', 'stream', "
|
|
2117
|
-
"'version', or '
|
|
2152
|
+
"'version', 'version_tag', 'version_ref', or 'branch' must be "
|
|
2153
|
+
"provided."
|
|
2118
2154
|
)
|
|
2119
2155
|
|
|
2120
2156
|
# Normalize timestamp
|
|
@@ -2150,6 +2186,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2150
2186
|
stream=stream,
|
|
2151
2187
|
version=version,
|
|
2152
2188
|
version_tag=version_tag,
|
|
2189
|
+
version_ref=version_ref,
|
|
2190
|
+
branch=branch,
|
|
2153
2191
|
)
|
|
2154
2192
|
|
|
2155
2193
|
def generate_sql_clause(self) -> str:
|
|
@@ -2160,11 +2198,12 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2160
2198
|
Returns:
|
|
2161
2199
|
SQL clause like " AT (TIMESTAMP => TO_TIMESTAMP_NTZ('...'))",
|
|
2162
2200
|
" AT (VERSION => 1234567890)" for Iceberg snapshot id time travel,
|
|
2163
|
-
or " AT (
|
|
2164
|
-
travel.
|
|
2201
|
+
or " AT (VERSION_REF => 'audit-branch')" for Iceberg tag/branch
|
|
2202
|
+
time travel.
|
|
2165
2203
|
|
|
2166
2204
|
Note on escaping: string-valued parameters (``statement``,
|
|
2167
|
-
``stream``, ``version_tag``, ``
|
|
2205
|
+
``stream``, ``version_tag``, ``version_ref``, ``branch``,
|
|
2206
|
+
``timestamp``) are embedded inside
|
|
2168
2207
|
single-quoted SQL literals via the existing ``str_to_sql``
|
|
2169
2208
|
helper in ``analyzer.datatype_mapper`` so embedded ``'``, ``\\``
|
|
2170
2209
|
and newline characters are properly escaped. This keeps the
|
|
@@ -2191,8 +2230,12 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2191
2230
|
clause += f"(STREAM => {str_to_sql(self.stream)})"
|
|
2192
2231
|
elif self.version is not None:
|
|
2193
2232
|
clause += f"(VERSION => {self.version})"
|
|
2233
|
+
elif self.version_ref is not None:
|
|
2234
|
+
clause += f"(VERSION_REF => {str_to_sql(self.version_ref)})"
|
|
2235
|
+
elif self.branch is not None:
|
|
2236
|
+
clause += f"(VERSION_REF => {str_to_sql(self.branch)})"
|
|
2194
2237
|
elif self.version_tag is not None:
|
|
2195
|
-
clause += f"(
|
|
2238
|
+
clause += f"(VERSION_REF => {str_to_sql(self.version_tag)})"
|
|
2196
2239
|
elif self.timestamp is not None:
|
|
2197
2240
|
if self.timestamp_type is not None:
|
|
2198
2241
|
timestamp_type = self.timestamp_type.upper()
|
|
@@ -165,12 +165,17 @@ def _extract_time_travel_from_options(options: dict) -> dict:
|
|
|
165
165
|
|
|
166
166
|
Special handling for 'VERSION_TAG' / 'VERSION-TAG' (Iceberg tag name) —
|
|
167
167
|
both aliases map to the internal ``version_tag`` time travel parameter
|
|
168
|
-
and emit ``AT(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
and emit ``AT(VERSION_REF => '<name>')`` on the Snowflake side.
|
|
169
|
+
|
|
170
|
+
Special handling for 'VERSION_REF' / 'VERSION-REF' (Iceberg tag or
|
|
171
|
+
branch name) — maps to the internal ``version_ref`` parameter.
|
|
172
|
+
|
|
173
|
+
Special handling for 'BRANCH' (Spark Iceberg WAP branch read) — maps
|
|
174
|
+
to the internal ``branch`` parameter and emits
|
|
175
|
+
``AT(VERSION_REF => '<name>')``.
|
|
176
|
+
|
|
177
|
+
Special handling for 'TAG' (Spark Iceberg ``SparkReadOptions.TAG``) —
|
|
178
|
+
maps to the internal ``version_tag`` parameter.
|
|
174
179
|
"""
|
|
175
180
|
result = {}
|
|
176
181
|
excluded_keys = set()
|
|
@@ -221,27 +226,64 @@ def _extract_time_travel_from_options(options: dict) -> dict:
|
|
|
221
226
|
)
|
|
222
227
|
result["time_travel_mode"] = "at"
|
|
223
228
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
version_tag_source = "version-tag"
|
|
232
|
-
if version_tag_value is not None:
|
|
229
|
+
def _set_named_ref_option(
|
|
230
|
+
result: dict,
|
|
231
|
+
*,
|
|
232
|
+
param_name: str,
|
|
233
|
+
option_source: str,
|
|
234
|
+
raw_value: Any,
|
|
235
|
+
) -> None:
|
|
233
236
|
if (
|
|
234
237
|
"TIME_TRAVEL_MODE" in options
|
|
235
238
|
and options["TIME_TRAVEL_MODE"].lower() == "before"
|
|
236
239
|
):
|
|
237
240
|
raise ValueError(
|
|
238
|
-
f"Cannot use '{
|
|
239
|
-
"time_travel_mode='before'. Iceberg
|
|
240
|
-
"supports time_travel_mode='at'."
|
|
241
|
+
f"Cannot use '{option_source}' option with "
|
|
242
|
+
"time_travel_mode='before'. Iceberg named-ref time travel "
|
|
243
|
+
"only supports time_travel_mode='at'."
|
|
241
244
|
)
|
|
242
|
-
result[
|
|
245
|
+
result[param_name] = str(raw_value)
|
|
243
246
|
result["time_travel_mode"] = "at"
|
|
244
247
|
|
|
248
|
+
# Handle Iceberg tag (``version_tag`` / ``version-tag`` / Spark ``tag``).
|
|
249
|
+
version_tag_value = options.get("VERSION_TAG")
|
|
250
|
+
version_tag_source = "version_tag"
|
|
251
|
+
if version_tag_value is None:
|
|
252
|
+
version_tag_value = options.get("VERSION-TAG")
|
|
253
|
+
version_tag_source = "version-tag"
|
|
254
|
+
if version_tag_value is None:
|
|
255
|
+
version_tag_value = options.get("TAG")
|
|
256
|
+
version_tag_source = "tag"
|
|
257
|
+
if version_tag_value is not None:
|
|
258
|
+
_set_named_ref_option(
|
|
259
|
+
result,
|
|
260
|
+
param_name="version_tag",
|
|
261
|
+
option_source=version_tag_source,
|
|
262
|
+
raw_value=version_tag_value,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
version_ref_value = options.get("VERSION_REF")
|
|
266
|
+
version_ref_source = "version_ref"
|
|
267
|
+
if version_ref_value is None:
|
|
268
|
+
version_ref_value = options.get("VERSION-REF")
|
|
269
|
+
version_ref_source = "version-ref"
|
|
270
|
+
if version_ref_value is not None:
|
|
271
|
+
_set_named_ref_option(
|
|
272
|
+
result,
|
|
273
|
+
param_name="version_ref",
|
|
274
|
+
option_source=version_ref_source,
|
|
275
|
+
raw_value=version_ref_value,
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
branch_value = options.get("BRANCH")
|
|
279
|
+
if branch_value is not None:
|
|
280
|
+
_set_named_ref_option(
|
|
281
|
+
result,
|
|
282
|
+
param_name="branch",
|
|
283
|
+
option_source="branch",
|
|
284
|
+
raw_value=branch_value,
|
|
285
|
+
)
|
|
286
|
+
|
|
245
287
|
for option_key, param_name in _TIME_TRAVEL_OPTIONS_PARAMS_MAP.items():
|
|
246
288
|
if option_key in options and option_key not in excluded_keys:
|
|
247
289
|
result[param_name] = options[option_key]
|
|
@@ -737,6 +779,8 @@ class DataFrameReader:
|
|
|
737
779
|
version_tag = kwargs.pop("version_tag", None)
|
|
738
780
|
start_snapshot_id = kwargs.pop("start_snapshot_id", None)
|
|
739
781
|
end_snapshot_id = kwargs.pop("end_snapshot_id", None)
|
|
782
|
+
version_ref = kwargs.pop("version_ref", None)
|
|
783
|
+
branch = kwargs.pop("branch", None)
|
|
740
784
|
if kwargs:
|
|
741
785
|
raise TypeError(
|
|
742
786
|
f"table() got unexpected keyword arguments: {sorted(kwargs)}"
|
|
@@ -793,15 +837,23 @@ class DataFrameReader:
|
|
|
793
837
|
time_travel_mode is not None
|
|
794
838
|
or version is not None
|
|
795
839
|
or version_tag is not None
|
|
840
|
+
or version_ref is not None
|
|
841
|
+
or branch is not None
|
|
796
842
|
):
|
|
797
|
-
# If version /
|
|
798
|
-
# 'at'
|
|
799
|
-
# (symmetric with the as-of-timestamp option handling).
|
|
843
|
+
# If version / named-ref params are provided without mode,
|
|
844
|
+
# default to 'at'.
|
|
800
845
|
effective_mode = (
|
|
801
846
|
time_travel_mode
|
|
802
847
|
if time_travel_mode
|
|
803
848
|
else (
|
|
804
|
-
"at"
|
|
849
|
+
"at"
|
|
850
|
+
if (
|
|
851
|
+
version is not None
|
|
852
|
+
or version_tag is not None
|
|
853
|
+
or version_ref is not None
|
|
854
|
+
or branch is not None
|
|
855
|
+
)
|
|
856
|
+
else None
|
|
805
857
|
)
|
|
806
858
|
)
|
|
807
859
|
time_travel_params = {
|
|
@@ -813,6 +865,8 @@ class DataFrameReader:
|
|
|
813
865
|
"stream": stream,
|
|
814
866
|
"version": version,
|
|
815
867
|
"version_tag": version_tag,
|
|
868
|
+
"version_ref": version_ref,
|
|
869
|
+
"branch": branch,
|
|
816
870
|
}
|
|
817
871
|
table = self._session.table(name, _emit_ast=False, **time_travel_params)
|
|
818
872
|
else:
|
|
@@ -13821,7 +13821,7 @@ def ai_complete(
|
|
|
13821
13821
|
>>> # With detailed output
|
|
13822
13822
|
>>> df = session.range(1).select(
|
|
13823
13823
|
... ai_complete(
|
|
13824
|
-
... model='mistral-
|
|
13824
|
+
... model='mistral-large2',
|
|
13825
13825
|
... prompt='Explain AI in one sentence.',
|
|
13826
13826
|
... show_details=True
|
|
13827
13827
|
... ).alias("detailed_response")
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
3
3
|
#
|
|
4
|
+
import os
|
|
4
5
|
from abc import abstractmethod
|
|
6
|
+
from logging import getLogger
|
|
5
7
|
from typing import Dict, List, NamedTuple, Tuple
|
|
6
8
|
|
|
7
9
|
import snowflake.snowpark
|
|
8
10
|
|
|
11
|
+
_logger = getLogger(__name__)
|
|
12
|
+
|
|
9
13
|
|
|
10
14
|
class QueryRecord(NamedTuple):
|
|
11
15
|
"""Contains the query information returned from the Snowflake database after the query is run."""
|
|
@@ -141,3 +145,94 @@ class AstListener(QueryListener):
|
|
|
141
145
|
@property
|
|
142
146
|
def base64_batches(self) -> List[str]:
|
|
143
147
|
return self._ast_batches
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class _VscHistoryExporter(QueryListener):
|
|
151
|
+
"""Exports executed query IDs to a directory watched by the Snowflake VS Code extension.
|
|
152
|
+
|
|
153
|
+
For each query, an empty file named after the query ID is created in the
|
|
154
|
+
target directory.
|
|
155
|
+
|
|
156
|
+
Note that this exporter is active only when the
|
|
157
|
+
``SNOWFLAKE_SNOWPARK_VSC_QUERY_HISTORY_DIR`` environment variable is set.
|
|
158
|
+
|
|
159
|
+
The exported files are meant to be consumed by the Snowflake VS Code
|
|
160
|
+
extension, which is responsible for cleaning up the directory; the exporter
|
|
161
|
+
never removes files on its own. As a safeguard against an unbounded
|
|
162
|
+
directory, the constructor counts the files already present and disables the
|
|
163
|
+
exporter (making it a no-op) if that count is at or above a threshold. The
|
|
164
|
+
threshold defaults to :attr:`DEFAULT_FILE_COUNT_LIMIT_AT_INIT` and can be
|
|
165
|
+
overridden via the ``SNOWFLAKE_SNOWPARK_VSC_QUERY_HISTORY_DIR_MAX_FILES``
|
|
166
|
+
environment variable.
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
DEFAULT_FILE_COUNT_LIMIT_AT_INIT = 1000
|
|
170
|
+
|
|
171
|
+
def __init__(self, query_history_dir: str) -> None:
|
|
172
|
+
"""
|
|
173
|
+
Initializes the _VscHistoryExporter.
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
query_history_dir: Directory into which an empty file named after each
|
|
177
|
+
executed query ID is written. Created if it does not already exist.
|
|
178
|
+
"""
|
|
179
|
+
self._query_history_dir = query_history_dir
|
|
180
|
+
# When _disabled is True, _notify becomes a pure no-op. Default to
|
|
181
|
+
# disabled, and only enable below if the target directory is ready
|
|
182
|
+
# (created or already present) and confirmed below the file-count
|
|
183
|
+
# limit; any failure leaves it disabled.
|
|
184
|
+
self._disabled = True
|
|
185
|
+
try:
|
|
186
|
+
os.makedirs(query_history_dir, exist_ok=True)
|
|
187
|
+
except OSError:
|
|
188
|
+
# Exporting query history is a best-effort feature for the VS Code
|
|
189
|
+
# extension; a failure here must not break the user's session.
|
|
190
|
+
_logger.debug(
|
|
191
|
+
"Failed to create query history directory %s",
|
|
192
|
+
query_history_dir,
|
|
193
|
+
exc_info=True,
|
|
194
|
+
)
|
|
195
|
+
return
|
|
196
|
+
|
|
197
|
+
# Resolve the file-count limit, falling back to the default when the env
|
|
198
|
+
# var is unset or not a valid integer.
|
|
199
|
+
try:
|
|
200
|
+
limit = int(
|
|
201
|
+
os.environ.get(
|
|
202
|
+
"SNOWFLAKE_SNOWPARK_VSC_QUERY_HISTORY_DIR_MAX_FILES",
|
|
203
|
+
self.DEFAULT_FILE_COUNT_LIMIT_AT_INIT,
|
|
204
|
+
)
|
|
205
|
+
)
|
|
206
|
+
except ValueError:
|
|
207
|
+
limit = self.DEFAULT_FILE_COUNT_LIMIT_AT_INIT
|
|
208
|
+
try:
|
|
209
|
+
# Enable exporting only if the directory is below the limit; if it is
|
|
210
|
+
# already saturated we stay disabled so we do not keep growing it.
|
|
211
|
+
self._disabled = len(os.listdir(self._query_history_dir)) >= limit
|
|
212
|
+
except OSError:
|
|
213
|
+
# If we cannot inspect the directory, err on the side of caution
|
|
214
|
+
# by keeping the exporter disabled.
|
|
215
|
+
_logger.debug(
|
|
216
|
+
"Failed to count files in query history directory %s",
|
|
217
|
+
self._query_history_dir,
|
|
218
|
+
exc_info=True,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
def _notify(self, query_record: QueryRecord, **kwargs) -> None:
|
|
222
|
+
if self._disabled:
|
|
223
|
+
return
|
|
224
|
+
if query_record.is_describe or not query_record.query_id:
|
|
225
|
+
return
|
|
226
|
+
try:
|
|
227
|
+
open(
|
|
228
|
+
os.path.join(self._query_history_dir, query_record.query_id), "w"
|
|
229
|
+
).close()
|
|
230
|
+
except OSError:
|
|
231
|
+
# Exporting query history is a best-effort feature for the VS Code
|
|
232
|
+
# extension; a failure here must not break the user's session.
|
|
233
|
+
_logger.debug(
|
|
234
|
+
"Failed to write query history file for query id %s in %s",
|
|
235
|
+
query_record.query_id,
|
|
236
|
+
self._query_history_dir,
|
|
237
|
+
exc_info=True,
|
|
238
|
+
)
|
|
@@ -856,6 +856,20 @@ class Session:
|
|
|
856
856
|
|
|
857
857
|
_logger.info("Snowpark Session information: %s", self._session_info)
|
|
858
858
|
|
|
859
|
+
self._vsc_history_exporter = None
|
|
860
|
+
self._vsc_history_dir = os.environ.get(
|
|
861
|
+
"SNOWFLAKE_SNOWPARK_VSC_QUERY_HISTORY_DIR"
|
|
862
|
+
)
|
|
863
|
+
if self._vsc_history_dir:
|
|
864
|
+
from snowflake.snowpark.query_history import _VscHistoryExporter
|
|
865
|
+
|
|
866
|
+
_logger.debug(
|
|
867
|
+
"Setting up VS Code query history exporter with directory %s",
|
|
868
|
+
self._vsc_history_dir,
|
|
869
|
+
)
|
|
870
|
+
self._vsc_history_exporter = _VscHistoryExporter(self._vsc_history_dir)
|
|
871
|
+
self._conn.add_query_listener(self._vsc_history_exporter)
|
|
872
|
+
|
|
859
873
|
# Register self._close_at_exit so it will be called at interpreter shutdown
|
|
860
874
|
atexit.register(self._close_at_exit)
|
|
861
875
|
|
|
@@ -2782,6 +2796,8 @@ class Session:
|
|
|
2782
2796
|
version_tag = kwargs.pop("version_tag", None)
|
|
2783
2797
|
start_snapshot_id = kwargs.pop("start_snapshot_id", None)
|
|
2784
2798
|
end_snapshot_id = kwargs.pop("end_snapshot_id", None)
|
|
2799
|
+
version_ref = kwargs.pop("version_ref", None)
|
|
2800
|
+
branch = kwargs.pop("branch", None)
|
|
2785
2801
|
if kwargs:
|
|
2786
2802
|
raise TypeError(
|
|
2787
2803
|
f"table() got unexpected keyword arguments: {sorted(kwargs)}"
|
|
@@ -2827,6 +2843,8 @@ class Session:
|
|
|
2827
2843
|
version_tag=version_tag,
|
|
2828
2844
|
start_snapshot_id=start_snapshot_id,
|
|
2829
2845
|
end_snapshot_id=end_snapshot_id,
|
|
2846
|
+
version_ref=version_ref,
|
|
2847
|
+
branch=branch,
|
|
2830
2848
|
)
|
|
2831
2849
|
# Replace API call origin for table
|
|
2832
2850
|
set_api_call_source(t, "Session.table")
|
|
@@ -306,6 +306,8 @@ class Table(DataFrame):
|
|
|
306
306
|
version_tag = kwargs.pop("version_tag", None)
|
|
307
307
|
start_snapshot_id = kwargs.pop("start_snapshot_id", None)
|
|
308
308
|
end_snapshot_id = kwargs.pop("end_snapshot_id", None)
|
|
309
|
+
version_ref = kwargs.pop("version_ref", None)
|
|
310
|
+
branch = kwargs.pop("branch", None)
|
|
309
311
|
if kwargs:
|
|
310
312
|
raise TypeError(
|
|
311
313
|
f"Table() got unexpected keyword arguments: {sorted(kwargs)}"
|
|
@@ -344,6 +346,8 @@ class Table(DataFrame):
|
|
|
344
346
|
stream=stream,
|
|
345
347
|
version=version,
|
|
346
348
|
version_tag=version_tag,
|
|
349
|
+
version_ref=version_ref,
|
|
350
|
+
branch=branch,
|
|
347
351
|
)
|
|
348
352
|
if iceberg_changes_config is not None and time_travel_config is not None:
|
|
349
353
|
raise ValueError(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|