hotdata 0.12.0__tar.gz → 0.13.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.
- {hotdata-0.12.0 → hotdata-0.13.0}/PKG-INFO +1 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/__init__.py +2 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/connections_api.py +6 -3
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/databases_api.py +6 -3
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/query_api.py +3 -3
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/__init__.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_decl.py +4 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_request.py +4 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_default_table_decl.py +4 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/job_type.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/query_request.py +1 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/table_info.py +4 -1
- hotdata-0.13.0/hotdata/models/table_layout.py +38 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata.egg-info/PKG-INFO +1 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata.egg-info/SOURCES.txt +2 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/pyproject.toml +1 -1
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_add_managed_schema_request.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_add_managed_table_decl.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_add_managed_table_request.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_bulk_create_databases_request.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_database_request.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_default_schema_decl.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_default_table_decl.py +1 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_information_schema_response.py +2 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_table_info.py +2 -0
- hotdata-0.13.0/test/test_table_layout.py +34 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_model_extra_forbid.py +5 -2
- {hotdata-0.12.0 → hotdata-0.13.0}/README.md +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/_retry.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/_upload_watchdog.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/_useragent.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/_workspace.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/__init__.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/database_context_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/embedding_providers_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/indexes_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/information_schema_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/jobs_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/query_runs_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/results_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/saved_queries_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/uploads_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/usage_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api/workspaces_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api_client.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/api_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/arrow.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/configuration.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/exceptions.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/loads.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/add_managed_schema_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/api_error_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/api_error_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/async_query_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/attach_database_catalog_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/boolean_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_result.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/categorical_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/category_value_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_definition.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of1.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of2.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of3.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of4.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_profile_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/column_type_spec.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/connection_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_connection_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_connection_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_database_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_database_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_index_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_workspace_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/create_workspace_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_attachment_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_batch_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_context_entry.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_count_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_default_schema_decl.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_detail_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_lineage_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/database_summary.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/delete_database_batch_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/discovery_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/error.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/execute_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_part.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/fork_database_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/forked_from_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/get_connection_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/get_database_context_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/get_result_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/index_entry_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/index_info_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/index_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/information_schema_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/job_result.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/job_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/job_status_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/lineage_ancestor_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/lineage_fork_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_connections_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_database_contexts_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_databases_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_embedding_providers_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_indexes_page_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_indexes_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_jobs_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_query_runs_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_results_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_saved_queries_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_saved_query_versions_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/list_workspaces_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/managed_schema_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/managed_table_constant_per_key_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/managed_table_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/minted_upload_part_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/numeric_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/query_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/query_run_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/result_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/results_format_query.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/saved_query_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/saved_query_summary.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/saved_query_version_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/submit_job_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/table_partition_key.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/table_profile_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/table_sort_key.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/temporal_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/text_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/update_managed_table_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/update_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/upload_session_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/workspace_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/workspace_list_item.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/models/workspace_usage_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/py.typed +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/query.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/rest.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata/uploads.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata.egg-info/dependency_links.txt +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata.egg-info/requires.txt +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/hotdata.egg-info/top_level.txt +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/setup.cfg +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_api_client_close.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_api_error_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_api_error_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_async_query_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_attach_database_catalog_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_batch_create_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_batch_create_upload_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_boolean_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_bulk_create_databases_result.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_categorical_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_category_value_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_definition.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of1.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of2.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of3.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of4.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_profile_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_column_type_spec.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_connection_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_connections_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_connection_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_connection_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_database_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_embedding_provider_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_index_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_workspace_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_create_workspace_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_attachment_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_batch_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_context_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_context_entry.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_count_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_detail_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_lineage_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_database_summary.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_databases_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_delete_database_batch_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_discovery_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_embedding_providers_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_error.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_execute_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_finalize_upload_part.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_finalize_upload_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_finalize_upload_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_fork_database_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_forked_from_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_get_connection_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_get_database_context_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_get_result_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_index_entry_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_index_info_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_index_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_indexes_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_information_schema_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_job_result.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_job_status.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_job_status_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_job_type.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_jobs_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_lineage_ancestor_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_lineage_fork_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_connections_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_database_contexts_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_databases_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_embedding_providers_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_indexes_page_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_indexes_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_jobs_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_query_runs_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_results_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_saved_queries_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_saved_query_versions_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_list_workspaces_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_load_managed_table_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_load_managed_table_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_managed_schema_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_managed_table_constant_per_key_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_managed_table_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_mint_upload_parts_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_mint_upload_parts_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_minted_upload_part_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_numeric_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_query_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_query_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_query_run_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_query_runs_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_result_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_results_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_results_format_query.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_saved_queries_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_saved_query_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_saved_query_summary.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_saved_query_version_info.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_submit_job_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_table_partition_key.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_table_profile_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_table_sort_key.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_temporal_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_text_profile_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_update_embedding_provider_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_update_embedding_provider_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_update_managed_table_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_update_saved_query_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_upload_session_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_uploads_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_upsert_database_context_request.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_upsert_database_context_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_usage_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_workspace_detail.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_workspace_list_item.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_workspace_usage_response.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/test/test_workspaces_api.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_api_token_auth.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_arrow.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_config_auth_surface.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_config_env.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_loads.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_query.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_request_defaults.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_retry.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_update_changelog.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_codex_fixes.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_multipart_resilient.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_parity_fixes.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_resilient.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_retry_policy.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_upload_watchdog.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_uploads.py +0 -0
- {hotdata-0.12.0 → hotdata-0.13.0}/tests/test_workspace_guard.py +0 -0
|
@@ -146,6 +146,7 @@ __all__ = [
|
|
|
146
146
|
"SavedQueryVersionInfo",
|
|
147
147
|
"SubmitJobResponse",
|
|
148
148
|
"TableInfo",
|
|
149
|
+
"TableLayout",
|
|
149
150
|
"TablePartitionKey",
|
|
150
151
|
"TableProfileResponse",
|
|
151
152
|
"TableSortKey",
|
|
@@ -290,6 +291,7 @@ from hotdata.models.saved_query_summary import SavedQuerySummary as SavedQuerySu
|
|
|
290
291
|
from hotdata.models.saved_query_version_info import SavedQueryVersionInfo as SavedQueryVersionInfo
|
|
291
292
|
from hotdata.models.submit_job_response import SubmitJobResponse as SubmitJobResponse
|
|
292
293
|
from hotdata.models.table_info import TableInfo as TableInfo
|
|
294
|
+
from hotdata.models.table_layout import TableLayout as TableLayout
|
|
293
295
|
from hotdata.models.table_partition_key import TablePartitionKey as TablePartitionKey
|
|
294
296
|
from hotdata.models.table_profile_response import TableProfileResponse as TableProfileResponse
|
|
295
297
|
from hotdata.models.table_sort_key import TableSortKey as TableSortKey
|
|
@@ -2339,7 +2339,7 @@ class ConnectionsApi:
|
|
|
2339
2339
|
) -> LoadManagedTableResponse:
|
|
2340
2340
|
"""Load managed table from inline data, upload, or query result
|
|
2341
2341
|
|
|
2342
|
-
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
2342
|
+
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
2343
2343
|
|
|
2344
2344
|
:param connection_id: Connection ID (required)
|
|
2345
2345
|
:type connection_id: str
|
|
@@ -2389,6 +2389,7 @@ class ConnectionsApi:
|
|
|
2389
2389
|
'404': "ApiErrorResponse",
|
|
2390
2390
|
'409': "ApiErrorResponse",
|
|
2391
2391
|
'413': "ApiErrorResponse",
|
|
2392
|
+
'503': "ApiErrorResponse",
|
|
2392
2393
|
}
|
|
2393
2394
|
response_data = self.api_client.call_api(
|
|
2394
2395
|
*_param,
|
|
@@ -2423,7 +2424,7 @@ class ConnectionsApi:
|
|
|
2423
2424
|
) -> ApiResponse[LoadManagedTableResponse]:
|
|
2424
2425
|
"""Load managed table from inline data, upload, or query result
|
|
2425
2426
|
|
|
2426
|
-
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
2427
|
+
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
2427
2428
|
|
|
2428
2429
|
:param connection_id: Connection ID (required)
|
|
2429
2430
|
:type connection_id: str
|
|
@@ -2473,6 +2474,7 @@ class ConnectionsApi:
|
|
|
2473
2474
|
'404': "ApiErrorResponse",
|
|
2474
2475
|
'409': "ApiErrorResponse",
|
|
2475
2476
|
'413': "ApiErrorResponse",
|
|
2477
|
+
'503': "ApiErrorResponse",
|
|
2476
2478
|
}
|
|
2477
2479
|
response_data = self.api_client.call_api(
|
|
2478
2480
|
*_param,
|
|
@@ -2507,7 +2509,7 @@ class ConnectionsApi:
|
|
|
2507
2509
|
) -> RESTResponseType:
|
|
2508
2510
|
"""Load managed table from inline data, upload, or query result
|
|
2509
2511
|
|
|
2510
|
-
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
2512
|
+
Publish data as the new contents of a managed table from one of three sources — provide exactly one. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied and accepts five values: `replace` makes the uploaded rows the table's entire contents, `append` inserts them on top of the existing data, and `delete`, `update`, and `upsert` match rows by key — removing, replacing, or inserting-or-replacing the matched rows respectively. The three key-matching modes need a key: the one the table was created with, or one given in `key` on the request. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
2511
2513
|
|
|
2512
2514
|
:param connection_id: Connection ID (required)
|
|
2513
2515
|
:type connection_id: str
|
|
@@ -2557,6 +2559,7 @@ class ConnectionsApi:
|
|
|
2557
2559
|
'404': "ApiErrorResponse",
|
|
2558
2560
|
'409': "ApiErrorResponse",
|
|
2559
2561
|
'413': "ApiErrorResponse",
|
|
2562
|
+
'503': "ApiErrorResponse",
|
|
2560
2563
|
}
|
|
2561
2564
|
response_data = self.api_client.call_api(
|
|
2562
2565
|
*_param,
|
|
@@ -4082,7 +4082,7 @@ class DatabasesApi:
|
|
|
4082
4082
|
) -> LoadManagedTableResponse:
|
|
4083
4083
|
"""Load database table from inline data, upload, or query result
|
|
4084
4084
|
|
|
4085
|
-
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
4085
|
+
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
4086
4086
|
|
|
4087
4087
|
:param database_id: Database ID (required)
|
|
4088
4088
|
:type database_id: str
|
|
@@ -4132,6 +4132,7 @@ class DatabasesApi:
|
|
|
4132
4132
|
'404': "ApiErrorResponse",
|
|
4133
4133
|
'409': "ApiErrorResponse",
|
|
4134
4134
|
'413': "ApiErrorResponse",
|
|
4135
|
+
'503': "ApiErrorResponse",
|
|
4135
4136
|
}
|
|
4136
4137
|
response_data = self.api_client.call_api(
|
|
4137
4138
|
*_param,
|
|
@@ -4166,7 +4167,7 @@ class DatabasesApi:
|
|
|
4166
4167
|
) -> ApiResponse[LoadManagedTableResponse]:
|
|
4167
4168
|
"""Load database table from inline data, upload, or query result
|
|
4168
4169
|
|
|
4169
|
-
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
4170
|
+
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
4170
4171
|
|
|
4171
4172
|
:param database_id: Database ID (required)
|
|
4172
4173
|
:type database_id: str
|
|
@@ -4216,6 +4217,7 @@ class DatabasesApi:
|
|
|
4216
4217
|
'404': "ApiErrorResponse",
|
|
4217
4218
|
'409': "ApiErrorResponse",
|
|
4218
4219
|
'413': "ApiErrorResponse",
|
|
4220
|
+
'503': "ApiErrorResponse",
|
|
4219
4221
|
}
|
|
4220
4222
|
response_data = self.api_client.call_api(
|
|
4221
4223
|
*_param,
|
|
@@ -4250,7 +4252,7 @@ class DatabasesApi:
|
|
|
4250
4252
|
) -> RESTResponseType:
|
|
4251
4253
|
"""Load database table from inline data, upload, or query result
|
|
4252
4254
|
|
|
4253
|
-
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
|
|
4255
|
+
Publish data as the new contents of a table on the database's default catalog, from one of three sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `data`, CSV text is sent inline in this request, up to 2 MiB; column types are detected from the data unless `columns` declares them, and a larger payload is rejected with 413 and the error code `INLINE_DATA_TOO_LARGE`, at which point the data should be uploaded and loaded by `upload_id` instead. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload or inline data, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously. While background maintenance holds the table, a load waits for it to finish, for up to 60 seconds, before it starts, in every mode; with `async`, the 202 can arrive only after that wait. A load refused because another write to the table is running gets 409 with the error code `RESOURCE_LOCKED` and a `Retry-After` header.
|
|
4254
4256
|
|
|
4255
4257
|
:param database_id: Database ID (required)
|
|
4256
4258
|
:type database_id: str
|
|
@@ -4300,6 +4302,7 @@ class DatabasesApi:
|
|
|
4300
4302
|
'404': "ApiErrorResponse",
|
|
4301
4303
|
'409': "ApiErrorResponse",
|
|
4302
4304
|
'413': "ApiErrorResponse",
|
|
4305
|
+
'503': "ApiErrorResponse",
|
|
4303
4306
|
}
|
|
4304
4307
|
response_data = self.api_client.call_api(
|
|
4305
4308
|
*_param,
|
|
@@ -60,7 +60,7 @@ class QueryApi:
|
|
|
60
60
|
) -> QueryResponse:
|
|
61
61
|
"""Execute SQL query
|
|
62
62
|
|
|
63
|
-
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header.
|
|
63
|
+
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header. The endpoint also runs write statements: `INSERT INTO … VALUES … / SELECT …` (append only), `UPDATE … SET … [WHERE …]`, `DELETE FROM … [WHERE …]`, `CREATE TABLE`, `CREATE TABLE … AS SELECT …` and `DROP TABLE`. A write runs once, inline, and answers with a one-row result holding a single `rows_affected` column. Writes need an API key holding both the `read` and `write` permissions, may only target the database's own `default` catalog (attached catalogs stay read-only), and are never run from a saved query. A `DELETE` reports the number of rows its `WHERE` matched and deleted; `DELETE … LIMIT`, `USING` and `RETURNING` are refused. An `UPDATE` reports the number of rows its `WHERE` matched. Each `SET` value is computed from the row as it was before the statement, so `SET a = b, b = a` swaps two values. An `UPDATE` cannot use a table alias, `FROM`, `RETURNING`, `LIMIT` or `ORDER BY`, cannot set one column twice, and cannot set a column that a vector index generates; that column is computed again from its source text. On a table that declares `constant_per_key`, an `UPDATE` cannot set a key column or a `constant_per_key` column. Every other mutation (`ALTER`, views, `COPY`, transactions, `EXPLAIN` of a write) is refused.
|
|
64
64
|
|
|
65
65
|
:param query_request: (required)
|
|
66
66
|
:type query_request: QueryRequest
|
|
@@ -137,7 +137,7 @@ class QueryApi:
|
|
|
137
137
|
) -> ApiResponse[QueryResponse]:
|
|
138
138
|
"""Execute SQL query
|
|
139
139
|
|
|
140
|
-
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header.
|
|
140
|
+
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header. The endpoint also runs write statements: `INSERT INTO … VALUES … / SELECT …` (append only), `UPDATE … SET … [WHERE …]`, `DELETE FROM … [WHERE …]`, `CREATE TABLE`, `CREATE TABLE … AS SELECT …` and `DROP TABLE`. A write runs once, inline, and answers with a one-row result holding a single `rows_affected` column. Writes need an API key holding both the `read` and `write` permissions, may only target the database's own `default` catalog (attached catalogs stay read-only), and are never run from a saved query. A `DELETE` reports the number of rows its `WHERE` matched and deleted; `DELETE … LIMIT`, `USING` and `RETURNING` are refused. An `UPDATE` reports the number of rows its `WHERE` matched. Each `SET` value is computed from the row as it was before the statement, so `SET a = b, b = a` swaps two values. An `UPDATE` cannot use a table alias, `FROM`, `RETURNING`, `LIMIT` or `ORDER BY`, cannot set one column twice, and cannot set a column that a vector index generates; that column is computed again from its source text. On a table that declares `constant_per_key`, an `UPDATE` cannot set a key column or a `constant_per_key` column. Every other mutation (`ALTER`, views, `COPY`, transactions, `EXPLAIN` of a write) is refused.
|
|
141
141
|
|
|
142
142
|
:param query_request: (required)
|
|
143
143
|
:type query_request: QueryRequest
|
|
@@ -214,7 +214,7 @@ class QueryApi:
|
|
|
214
214
|
) -> RESTResponseType:
|
|
215
215
|
"""Execute SQL query
|
|
216
216
|
|
|
217
|
-
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header.
|
|
217
|
+
Execute a SQL query scoped to a database. A database is the only window into catalogs: the query sees only that database's auto `default` catalog plus any catalogs explicitly attached to it. Select the database with EITHER the `X-Database-Id` header OR the `database_id` body field (exactly one must be given; if both are sent and disagree, that's a 400). Use standard Postgres-compatible SQL; reference the default catalog as `default.<schema>.<table>` (or just `<schema>.<table>` / `<table>`) and attached catalogs by their alias. Results are returned inline and a `result_id` is provided for later retrieval via the Results API. Set `async: true` to execute asynchronously — returns a query run ID for polling. Optionally set `async_after_ms` to attempt synchronous execution first, falling back to async if the query exceeds the timeout. To receive the rows as an Arrow IPC stream instead of JSON, send `Accept: application/vnd.apache.arrow.stream` (without also listing `application/json`). A query that completes within the request then returns 200 with an Arrow IPC stream body (schema, record batches, end-of-stream), and the values the JSON body would carry are sent as response headers: `X-Query-Run-Id`, `X-Result-Id` (when the result was saved), `X-Total-Row-Count`, `X-Execution-Time-Ms`, and `X-Query-Warning` (when there is a warning). Arrow keeps `±Inf` and `NaN` float values as they are. An Arrow response always holds the whole result: if the result is larger than an inline response can hold, the request returns 202 with the query run ticket and an `X-Result-Id` header instead, and the full result is read from `GET /v1/results/{id}?format=arrow` once it is ready. A query that goes async, and every error, return the same JSON bodies as without the header. The endpoint also runs write statements: `INSERT INTO … VALUES … / SELECT …` (append only), `UPDATE … SET … [WHERE …]`, `DELETE FROM … [WHERE …]`, `CREATE TABLE`, `CREATE TABLE … AS SELECT …` and `DROP TABLE`. A write runs once, inline, and answers with a one-row result holding a single `rows_affected` column. Writes need an API key holding both the `read` and `write` permissions, may only target the database's own `default` catalog (attached catalogs stay read-only), and are never run from a saved query. A `DELETE` reports the number of rows its `WHERE` matched and deleted; `DELETE … LIMIT`, `USING` and `RETURNING` are refused. An `UPDATE` reports the number of rows its `WHERE` matched. Each `SET` value is computed from the row as it was before the statement, so `SET a = b, b = a` swaps two values. An `UPDATE` cannot use a table alias, `FROM`, `RETURNING`, `LIMIT` or `ORDER BY`, cannot set one column twice, and cannot set a column that a vector index generates; that column is computed again from its source text. On a table that declares `constant_per_key`, an `UPDATE` cannot set a key column or a `constant_per_key` column. Every other mutation (`ALTER`, views, `COPY`, transactions, `EXPLAIN` of a write) is refused.
|
|
218
218
|
|
|
219
219
|
:param query_request: (required)
|
|
220
220
|
:type query_request: QueryRequest
|
|
@@ -113,6 +113,7 @@ from hotdata.models.saved_query_summary import SavedQuerySummary
|
|
|
113
113
|
from hotdata.models.saved_query_version_info import SavedQueryVersionInfo
|
|
114
114
|
from hotdata.models.submit_job_response import SubmitJobResponse
|
|
115
115
|
from hotdata.models.table_info import TableInfo
|
|
116
|
+
from hotdata.models.table_layout import TableLayout
|
|
116
117
|
from hotdata.models.table_partition_key import TablePartitionKey
|
|
117
118
|
from hotdata.models.table_profile_response import TableProfileResponse
|
|
118
119
|
from hotdata.models.table_sort_key import TableSortKey
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from hotdata.models.table_layout import TableLayout
|
|
23
24
|
from hotdata.models.table_partition_key import TablePartitionKey
|
|
24
25
|
from hotdata.models.table_sort_key import TableSortKey
|
|
25
26
|
from typing import Optional, Set
|
|
@@ -31,10 +32,11 @@ class AddManagedTableDecl(BaseModel):
|
|
|
31
32
|
""" # noqa: E501
|
|
32
33
|
constant_per_key: Optional[List[StrictStr]] = Field(default=None, description="Columns whose value is determined by this table's `key`: for every uploaded row, every stored row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation (`delete`, `update`, `upsert`) restrict its search for prior versions to the values the upload carries, which prunes far harder than the key alone when the key's own file statistics are weak. Omit (the default) for the unrestricted search. **Correctness-affecting, not a hint.** If the assertion is false, a mutation supersedes one version of a key and appends beside another, silently duplicating it. Declare it only where the invariant is established.")
|
|
33
34
|
key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
|
|
35
|
+
layout: Optional[TableLayout] = Field(default=None, description="Storage layout of the table: `analytical` (the default), or `point_lookup`, which writes small data pages so the table's rows can be fetched by id cheaply, which is what a vector index's answers do; analytical scans of it read more pages. Declared when the table is created and fixed thereafter.")
|
|
34
36
|
name: StrictStr
|
|
35
37
|
partition_by: Optional[List[TablePartitionKey]] = Field(default=None, description="Partition keys for this table, applied in order. Omit for no partitioning. Declared when the table is created and fixed thereafter.")
|
|
36
38
|
sorted_by: Optional[List[TableSortKey]] = Field(default=None, description="Sort keys for this table, applied in order. Omit for no sort order. Declared when the table is created and fixed thereafter. A table with a sort order cannot be indexed: creating any index on it is refused, so leave this empty on a table you plan to search.")
|
|
37
|
-
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "name", "partition_by", "sorted_by"]
|
|
39
|
+
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "layout", "name", "partition_by", "sorted_by"]
|
|
38
40
|
|
|
39
41
|
model_config = ConfigDict(
|
|
40
42
|
populate_by_name=True,
|
|
@@ -107,6 +109,7 @@ class AddManagedTableDecl(BaseModel):
|
|
|
107
109
|
_obj = cls.model_validate({
|
|
108
110
|
"constant_per_key": obj.get("constant_per_key"),
|
|
109
111
|
"key": obj.get("key"),
|
|
112
|
+
"layout": obj.get("layout"),
|
|
110
113
|
"name": obj.get("name"),
|
|
111
114
|
"partition_by": [TablePartitionKey.from_dict(_item) for _item in obj["partition_by"]] if obj.get("partition_by") is not None else None,
|
|
112
115
|
"sorted_by": [TableSortKey.from_dict(_item) for _item in obj["sorted_by"]] if obj.get("sorted_by") is not None else None
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from hotdata.models.table_layout import TableLayout
|
|
23
24
|
from hotdata.models.table_partition_key import TablePartitionKey
|
|
24
25
|
from hotdata.models.table_sort_key import TableSortKey
|
|
25
26
|
from typing import Optional, Set
|
|
@@ -31,10 +32,11 @@ class AddManagedTableRequest(BaseModel):
|
|
|
31
32
|
""" # noqa: E501
|
|
32
33
|
constant_per_key: Optional[List[StrictStr]] = Field(default=None, description="Columns whose value is determined by this table's `key`: for every uploaded row, every stored row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation (`delete`, `update`, `upsert`) restrict its search for prior versions to the values the upload carries, which prunes far harder than the key alone when the key's own file statistics are weak. Omit (the default) for the unrestricted search. **Correctness-affecting, not a hint.** If the assertion is false, a mutation supersedes one version of a key and appends beside another, silently duplicating it. Declare it only where the invariant is established.")
|
|
33
34
|
key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
|
|
35
|
+
layout: Optional[TableLayout] = Field(default=None, description="Storage layout of the table: `analytical` (the default), or `point_lookup`, which writes small data pages so the table's rows can be fetched by id cheaply, which is what a vector index's answers do; analytical scans of it read more pages. Declared when the table is created and fixed thereafter.")
|
|
34
36
|
name: StrictStr
|
|
35
37
|
partition_by: Optional[List[TablePartitionKey]] = Field(default=None, description="Partition keys for this table, applied in order. Omit for no partitioning. Declared when the table is created and fixed thereafter.")
|
|
36
38
|
sorted_by: Optional[List[TableSortKey]] = Field(default=None, description="Sort keys for this table, applied in order. Omit for no sort order. Declared when the table is created and fixed thereafter. A table with a sort order cannot be indexed: creating any index on it is refused, so leave this empty on a table you plan to search.")
|
|
37
|
-
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "name", "partition_by", "sorted_by"]
|
|
39
|
+
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "layout", "name", "partition_by", "sorted_by"]
|
|
38
40
|
|
|
39
41
|
model_config = ConfigDict(
|
|
40
42
|
populate_by_name=True,
|
|
@@ -107,6 +109,7 @@ class AddManagedTableRequest(BaseModel):
|
|
|
107
109
|
_obj = cls.model_validate({
|
|
108
110
|
"constant_per_key": obj.get("constant_per_key"),
|
|
109
111
|
"key": obj.get("key"),
|
|
112
|
+
"layout": obj.get("layout"),
|
|
110
113
|
"name": obj.get("name"),
|
|
111
114
|
"partition_by": [TablePartitionKey.from_dict(_item) for _item in obj["partition_by"]] if obj.get("partition_by") is not None else None,
|
|
112
115
|
"sorted_by": [TableSortKey.from_dict(_item) for _item in obj["sorted_by"]] if obj.get("sorted_by") is not None else None
|
|
@@ -20,6 +20,7 @@ import json
|
|
|
20
20
|
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from hotdata.models.table_layout import TableLayout
|
|
23
24
|
from hotdata.models.table_partition_key import TablePartitionKey
|
|
24
25
|
from hotdata.models.table_sort_key import TableSortKey
|
|
25
26
|
from typing import Optional, Set
|
|
@@ -31,10 +32,11 @@ class DatabaseDefaultTableDecl(BaseModel):
|
|
|
31
32
|
""" # noqa: E501
|
|
32
33
|
constant_per_key: Optional[List[StrictStr]] = Field(default=None, description="Columns whose value is determined by this table's `key`: for every uploaded row, every stored row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation (`delete`, `update`, `upsert`) restrict its search for prior versions to the values the upload carries, which prunes far harder than the key alone when the key's own file statistics are weak. Omit (the default) for the unrestricted search. **Correctness-affecting, not a hint.** If the assertion is false, a mutation supersedes one version of a key and appends beside another, silently duplicating it. Declare it only where the invariant is established.")
|
|
33
34
|
key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
|
|
35
|
+
layout: Optional[TableLayout] = Field(default=None, description="Storage layout of the table: `analytical` (the default), or `point_lookup`, which writes small data pages so the table's rows can be fetched by id cheaply, which is what a vector index's answers do; analytical scans of it read more pages. Declared when the table is created and fixed thereafter.")
|
|
34
36
|
name: StrictStr
|
|
35
37
|
partition_by: Optional[List[TablePartitionKey]] = Field(default=None, description="Partition keys for this table, applied in order. Omit for no partitioning. Declared when the table is created and fixed thereafter.")
|
|
36
38
|
sorted_by: Optional[List[TableSortKey]] = Field(default=None, description="Sort keys for this table, applied in order. Omit for no sort order. Declared when the table is created and fixed thereafter. A table with a sort order cannot be indexed: creating any index on it is refused, so leave this empty on a table you plan to search.")
|
|
37
|
-
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "name", "partition_by", "sorted_by"]
|
|
39
|
+
__properties: ClassVar[List[str]] = ["constant_per_key", "key", "layout", "name", "partition_by", "sorted_by"]
|
|
38
40
|
|
|
39
41
|
model_config = ConfigDict(
|
|
40
42
|
populate_by_name=True,
|
|
@@ -107,6 +109,7 @@ class DatabaseDefaultTableDecl(BaseModel):
|
|
|
107
109
|
_obj = cls.model_validate({
|
|
108
110
|
"constant_per_key": obj.get("constant_per_key"),
|
|
109
111
|
"key": obj.get("key"),
|
|
112
|
+
"layout": obj.get("layout"),
|
|
110
113
|
"name": obj.get("name"),
|
|
111
114
|
"partition_by": [TablePartitionKey.from_dict(_item) for _item in obj["partition_by"]] if obj.get("partition_by") is not None else None,
|
|
112
115
|
"sorted_by": [TableSortKey.from_dict(_item) for _item in obj["sorted_by"]] if obj.get("sorted_by") is not None else None
|
|
@@ -38,6 +38,7 @@ class JobType(str, Enum):
|
|
|
38
38
|
RESULT_RETENTION = 'result_retention'
|
|
39
39
|
DUCKLAKE_COMPACTION = 'ducklake_compaction'
|
|
40
40
|
DUCKLAKE_TABLE_COMPACTION = 'ducklake_table_compaction'
|
|
41
|
+
IVF_REBALANCE_SWEEP = 'ivf_rebalance_sweep'
|
|
41
42
|
TABLE_CONSTANTS_UPDATE = 'table_constants_update'
|
|
42
43
|
DATABASE_FORK = 'database_fork'
|
|
43
44
|
|
|
@@ -33,7 +33,7 @@ class QueryRequest(BaseModel):
|
|
|
33
33
|
database_id: Optional[StrictStr] = Field(default=None, description="Database to scope the query to (its id). Alternative to the `X-Database-Id` header — exactly one source must be provided. If both this field and the header are set and they disagree, the request is rejected with a 400.")
|
|
34
34
|
default_catalog: Optional[StrictStr] = Field(default=None, description="Catalog that unqualified table references resolve against within the query's database scope. Must name a catalog visible in the database (`default`, an attached catalog alias, or a system catalog). Defaults to `default` when omitted.")
|
|
35
35
|
default_schema: Optional[StrictStr] = Field(default=None, description="Schema that unqualified table references resolve against within the query's database scope. Omit it to use the database's own default schema — the `default_schema` chosen when the database was created, or the single schema it declares, and only `main` when it has neither. The database's `default_schema` field (see `GET /v1/databases/{id}`) reports the value in force. Setting this field overrides that per query, so sending `main` on a database whose data lives in another schema turns a query that works without the field into a \"table not found\" error. Existence is not validated up front — an unknown schema surfaces as a \"table not found\" error at planning time. Fully-qualified references (`<catalog>.<schema>.<table>`) are unaffected.")
|
|
36
|
-
dialect: Optional[StrictStr] = Field(default=None, description="SQL dialect the `sql` field is written in. One of `hotsql` (the default), `duckdb`, `postgres`, or `snowflake`. When set to anything other than `hotsql`, the query is translated to HotSQL before it runs, so you can use idioms from that dialect (for example Snowflake `IFF(...)` or Postgres `MOD(a, b)`). Write statements are accepted on the same terms as in HotSQL
|
|
36
|
+
dialect: Optional[StrictStr] = Field(default=None, description="SQL dialect the `sql` field is written in. One of `hotsql` (the default), `duckdb`, `postgres`, or `snowflake`. When set to anything other than `hotsql`, the query is translated to HotSQL before it runs, so you can use idioms from that dialect (for example Snowflake `IFF(...)` or Postgres `MOD(a, b)`). Write statements are accepted on the same terms as in HotSQL. An unrecognized value is rejected with a 400.")
|
|
37
37
|
sql: StrictStr
|
|
38
38
|
__properties: ClassVar[List[str]] = ["async", "async_after_ms", "database_id", "default_catalog", "default_schema", "dialect", "sql"]
|
|
39
39
|
|
|
@@ -21,6 +21,7 @@ import json
|
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
23
|
from hotdata.models.column_info import ColumnInfo
|
|
24
|
+
from hotdata.models.table_layout import TableLayout
|
|
24
25
|
from hotdata.models.table_partition_key import TablePartitionKey
|
|
25
26
|
from hotdata.models.table_sort_key import TableSortKey
|
|
26
27
|
from typing import Optional, Set
|
|
@@ -34,12 +35,13 @@ class TableInfo(BaseModel):
|
|
|
34
35
|
connection: StrictStr
|
|
35
36
|
constant_per_key: List[StrictStr] = Field(description="Columns the table declares constant for a given key: for every row, any other row sharing its key holds the same value of these columns. Declaring this lets a keyed mutation narrow its search for prior versions to the values the upload carries. Empty when none is declared, which is the unrestricted search. Unlike `partition_by` and `sorted_by` this is NOT fixed at creation — it changes only which files a mutation opens, never how rows are written — so read it here rather than assuming a declaration took effect.")
|
|
36
37
|
last_sync: Optional[StrictStr] = None
|
|
38
|
+
layout: TableLayout = Field(description="The table's storage layout: `analytical`, or `point_lookup`, whose small data pages make fetching its rows by id cheap. Fixed at creation.")
|
|
37
39
|
partition_by: List[TablePartitionKey] = Field(description="The table's partition keys, in the order they were declared when the table was created. Empty when the table is not partitioned. A table's storage layout is fixed when the table is created and cannot be changed afterwards, so this is how to confirm a table really was created with the layout that was asked for. The field is always present: an empty array means \"no partitioning declared\", which is not the same as a response that omits the field entirely. Reported for tables in a Hotdata instant database, which are the only ones whose layout is declared here. A table discovered from an external connection always reports an empty array — its layout belongs to the upstream system, so an empty array there means \"not known from here\", not \"confirmed unpartitioned\".")
|
|
38
40
|
var_schema: StrictStr = Field(alias="schema")
|
|
39
41
|
sorted_by: List[TableSortKey] = Field(description="The table's sort keys, in the order they were declared when the table was created. Empty when no sort order was declared. Always present, and limited to tables in a Hotdata instant database, for the same reasons as `partition_by`.")
|
|
40
42
|
synced: StrictBool
|
|
41
43
|
table: StrictStr
|
|
42
|
-
__properties: ClassVar[List[str]] = ["columns", "connection", "constant_per_key", "last_sync", "partition_by", "schema", "sorted_by", "synced", "table"]
|
|
44
|
+
__properties: ClassVar[List[str]] = ["columns", "connection", "constant_per_key", "last_sync", "layout", "partition_by", "schema", "sorted_by", "synced", "table"]
|
|
43
45
|
|
|
44
46
|
model_config = ConfigDict(
|
|
45
47
|
populate_by_name=True,
|
|
@@ -127,6 +129,7 @@ class TableInfo(BaseModel):
|
|
|
127
129
|
"connection": obj.get("connection"),
|
|
128
130
|
"constant_per_key": obj.get("constant_per_key"),
|
|
129
131
|
"last_sync": obj.get("last_sync"),
|
|
132
|
+
"layout": obj.get("layout"),
|
|
130
133
|
"partition_by": [TablePartitionKey.from_dict(_item) for _item in obj["partition_by"]] if obj.get("partition_by") is not None else None,
|
|
131
134
|
"schema": obj.get("schema"),
|
|
132
135
|
"sorted_by": [TableSortKey.from_dict(_item) for _item in obj["sorted_by"]] if obj.get("sorted_by") is not None else None,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Hotdata API
|
|
5
|
+
|
|
6
|
+
Powerful data platform API for instant databases, queries, and analytics.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Contact: developers@hotdata.dev
|
|
10
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
11
|
+
|
|
12
|
+
Do not edit the class manually.
|
|
13
|
+
""" # noqa: E501
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
import json
|
|
18
|
+
from enum import Enum
|
|
19
|
+
from typing_extensions import Self
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TableLayout(str, Enum):
|
|
23
|
+
"""
|
|
24
|
+
Storage layout of a table.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
allowed enum values
|
|
29
|
+
"""
|
|
30
|
+
ANALYTICAL = 'analytical'
|
|
31
|
+
POINT_LOOKUP = 'point_lookup'
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def from_json(cls, json_str: str) -> Self:
|
|
35
|
+
"""Create an instance of TableLayout from a JSON string"""
|
|
36
|
+
return cls(json.loads(json_str))
|
|
37
|
+
|
|
38
|
+
|
|
@@ -136,6 +136,7 @@ hotdata/models/saved_query_summary.py
|
|
|
136
136
|
hotdata/models/saved_query_version_info.py
|
|
137
137
|
hotdata/models/submit_job_response.py
|
|
138
138
|
hotdata/models/table_info.py
|
|
139
|
+
hotdata/models/table_layout.py
|
|
139
140
|
hotdata/models/table_partition_key.py
|
|
140
141
|
hotdata/models/table_profile_response.py
|
|
141
142
|
hotdata/models/table_sort_key.py
|
|
@@ -262,6 +263,7 @@ test/test_saved_query_summary.py
|
|
|
262
263
|
test/test_saved_query_version_info.py
|
|
263
264
|
test/test_submit_job_response.py
|
|
264
265
|
test/test_table_info.py
|
|
266
|
+
test/test_table_layout.py
|
|
265
267
|
test/test_table_partition_key.py
|
|
266
268
|
test/test_table_profile_response.py
|
|
267
269
|
test/test_table_sort_key.py
|
|
@@ -41,6 +41,7 @@ class TestAddManagedSchemaRequest(unittest.TestCase):
|
|
|
41
41
|
hotdata.models.add_managed_table_decl.AddManagedTableDecl(
|
|
42
42
|
constant_per_key = [event_date],
|
|
43
43
|
key = [order_id],
|
|
44
|
+
layout = null,
|
|
44
45
|
name = 'orders',
|
|
45
46
|
partition_by = [
|
|
46
47
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -38,6 +38,7 @@ class TestAddManagedTableRequest(unittest.TestCase):
|
|
|
38
38
|
return AddManagedTableRequest(
|
|
39
39
|
constant_per_key = [event_date],
|
|
40
40
|
key = [order_id],
|
|
41
|
+
layout = 'analytical',
|
|
41
42
|
name = 'orders',
|
|
42
43
|
partition_by = [
|
|
43
44
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -49,6 +49,7 @@ class TestBulkCreateDatabasesRequest(unittest.TestCase):
|
|
|
49
49
|
hotdata.models.database_default_table_decl.DatabaseDefaultTableDecl(
|
|
50
50
|
constant_per_key = [event_date],
|
|
51
51
|
key = [order_id],
|
|
52
|
+
layout = null,
|
|
52
53
|
name = 'orders',
|
|
53
54
|
partition_by = [
|
|
54
55
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -48,6 +48,7 @@ class TestCreateDatabaseRequest(unittest.TestCase):
|
|
|
48
48
|
hotdata.models.database_default_table_decl.DatabaseDefaultTableDecl(
|
|
49
49
|
constant_per_key = [event_date],
|
|
50
50
|
key = [order_id],
|
|
51
|
+
layout = null,
|
|
51
52
|
name = 'orders',
|
|
52
53
|
partition_by = [
|
|
53
54
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -41,6 +41,7 @@ class TestDatabaseDefaultSchemaDecl(unittest.TestCase):
|
|
|
41
41
|
hotdata.models.database_default_table_decl.DatabaseDefaultTableDecl(
|
|
42
42
|
constant_per_key = [event_date],
|
|
43
43
|
key = [order_id],
|
|
44
|
+
layout = null,
|
|
44
45
|
name = 'orders',
|
|
45
46
|
partition_by = [
|
|
46
47
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -38,6 +38,7 @@ class TestDatabaseDefaultTableDecl(unittest.TestCase):
|
|
|
38
38
|
return DatabaseDefaultTableDecl(
|
|
39
39
|
constant_per_key = [event_date],
|
|
40
40
|
key = [order_id],
|
|
41
|
+
layout = 'analytical',
|
|
41
42
|
name = 'orders',
|
|
42
43
|
partition_by = [
|
|
43
44
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
@@ -53,6 +53,7 @@ class TestInformationSchemaResponse(unittest.TestCase):
|
|
|
53
53
|
''
|
|
54
54
|
],
|
|
55
55
|
last_sync = '',
|
|
56
|
+
layout = null,
|
|
56
57
|
partition_by = [
|
|
57
58
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
58
59
|
column = 'created_at',
|
|
@@ -87,6 +88,7 @@ class TestInformationSchemaResponse(unittest.TestCase):
|
|
|
87
88
|
''
|
|
88
89
|
],
|
|
89
90
|
last_sync = '',
|
|
91
|
+
layout = null,
|
|
90
92
|
partition_by = [
|
|
91
93
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
92
94
|
column = 'created_at',
|
|
@@ -47,6 +47,7 @@ class TestTableInfo(unittest.TestCase):
|
|
|
47
47
|
''
|
|
48
48
|
],
|
|
49
49
|
last_sync = '',
|
|
50
|
+
layout = 'analytical',
|
|
50
51
|
partition_by = [
|
|
51
52
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
52
53
|
column = 'created_at',
|
|
@@ -68,6 +69,7 @@ class TestTableInfo(unittest.TestCase):
|
|
|
68
69
|
constant_per_key = [
|
|
69
70
|
''
|
|
70
71
|
],
|
|
72
|
+
layout = 'analytical',
|
|
71
73
|
partition_by = [
|
|
72
74
|
hotdata.models.table_partition_key.TablePartitionKey(
|
|
73
75
|
column = 'created_at',
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Hotdata API
|
|
5
|
+
|
|
6
|
+
Powerful data platform API for instant databases, queries, and analytics.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
|
9
|
+
Contact: developers@hotdata.dev
|
|
10
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
11
|
+
|
|
12
|
+
Do not edit the class manually.
|
|
13
|
+
""" # noqa: E501
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
|
|
18
|
+
from hotdata.models.table_layout import TableLayout
|
|
19
|
+
|
|
20
|
+
class TestTableLayout(unittest.TestCase):
|
|
21
|
+
"""TableLayout unit test stubs"""
|
|
22
|
+
|
|
23
|
+
def setUp(self):
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
def tearDown(self):
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
def testTableLayout(self):
|
|
30
|
+
"""Test TableLayout"""
|
|
31
|
+
# inst = TableLayout()
|
|
32
|
+
|
|
33
|
+
if __name__ == '__main__':
|
|
34
|
+
unittest.main()
|
|
@@ -91,10 +91,13 @@ def test_every_request_body_model_forbids_extras() -> None:
|
|
|
91
91
|
src = index[cls].read_text()
|
|
92
92
|
if 'extra="forbid"' in src:
|
|
93
93
|
continue
|
|
94
|
-
# The oneOf/anyOf wrappers carry a different ConfigDict and have
|
|
95
|
-
#
|
|
94
|
+
# The oneOf/anyOf wrappers carry a different ConfigDict and enums have
|
|
95
|
+
# no fields at all, so neither has anything to forbid on; anything
|
|
96
|
+
# else must have been patched.
|
|
96
97
|
if re.search(r"^\s+(oneof|anyof)_schema_\d+_validator", src, re.M):
|
|
97
98
|
continue
|
|
99
|
+
if re.search(r"^class \w+\(str, Enum\):", src, re.M):
|
|
100
|
+
continue
|
|
98
101
|
missing.append(cls)
|
|
99
102
|
assert missing == []
|
|
100
103
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|