From 9d7ee2e7823c4d45e80155f7c485859139ec36c4 Mon Sep 17 00:00:00 2001 From: "databricks-ci-ghec-2[bot]" <184307802+databricks-ci-ghec-2[bot]@users.noreply.github.com> Date: Thu, 26 Feb 2026 09:47:25 +0000 Subject: [PATCH] Update SDK to 1455a7a0955cf9d56364646fe54cdc1b143a2829 --- .codegen/_openapi_sha | 2 +- NEXT_CHANGELOG.md | 4 ++++ databricks/sdk/service/apps.py | 16 -------------- databricks/sdk/service/catalog.py | 2 +- databricks/sdk/service/ml.py | 30 ++++++++++++++++++++++++++ databricks/sdk/service/pipelines.py | 25 ++++++++++++++++++++- docs/dbdataclasses/catalog.rst | 2 +- docs/workspace/pipelines/pipelines.rst | 6 +++++- 8 files changed, 66 insertions(+), 21 deletions(-) mode change 100644 => 100755 NEXT_CHANGELOG.md diff --git a/.codegen/_openapi_sha b/.codegen/_openapi_sha index 5d157b67c..74a1330dc 100755 --- a/.codegen/_openapi_sha +++ b/.codegen/_openapi_sha @@ -1 +1 @@ -2ac9d66a86b8772814266c0794730e62719ab299 \ No newline at end of file +1455a7a0955cf9d56364646fe54cdc1b143a2829 \ No newline at end of file diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md old mode 100644 new mode 100755 index c05c2848b..03bce3331 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -13,3 +13,7 @@ ### Internal Changes ### API Changes +* Add `dataframe_schema`, `filter_condition` and `transformation_sql` fields for `databricks.sdk.service.ml.DeltaTableSource`. +* Add `environment_version` field for `databricks.sdk.service.pipelines.PipelinesEnvironment`. +* Add `reset_checkpoint_selection` field for `databricks.sdk.service.pipelines.StartUpdate`. +* [Breaking] Remove `oauth2_app_client_id` and `oauth2_app_integration_id` fields for `databricks.sdk.service.apps.Space`. \ No newline at end of file diff --git a/databricks/sdk/service/apps.py b/databricks/sdk/service/apps.py index efd256744..86406f775 100755 --- a/databricks/sdk/service/apps.py +++ b/databricks/sdk/service/apps.py @@ -2335,12 +2335,6 @@ class Space: id: Optional[str] = None """The unique identifier of the app space.""" - oauth2_app_client_id: Optional[str] = None - """The OAuth2 app client ID for the app space.""" - - oauth2_app_integration_id: Optional[str] = None - """The OAuth2 app integration ID for the app space.""" - resources: Optional[List[AppResource]] = None """Resources for the app space. Resources configured at the space level are available to all apps in the space.""" @@ -2386,10 +2380,6 @@ def as_dict(self) -> dict: body["id"] = self.id if self.name is not None: body["name"] = self.name - if self.oauth2_app_client_id is not None: - body["oauth2_app_client_id"] = self.oauth2_app_client_id - if self.oauth2_app_integration_id is not None: - body["oauth2_app_integration_id"] = self.oauth2_app_integration_id if self.resources: body["resources"] = [v.as_dict() for v in self.resources] if self.service_principal_client_id is not None: @@ -2427,10 +2417,6 @@ def as_shallow_dict(self) -> dict: body["id"] = self.id if self.name is not None: body["name"] = self.name - if self.oauth2_app_client_id is not None: - body["oauth2_app_client_id"] = self.oauth2_app_client_id - if self.oauth2_app_integration_id is not None: - body["oauth2_app_integration_id"] = self.oauth2_app_integration_id if self.resources: body["resources"] = self.resources if self.service_principal_client_id is not None: @@ -2462,8 +2448,6 @@ def from_dict(cls, d: Dict[str, Any]) -> Space: effective_user_api_scopes=d.get("effective_user_api_scopes", None), id=d.get("id", None), name=d.get("name", None), - oauth2_app_client_id=d.get("oauth2_app_client_id", None), - oauth2_app_integration_id=d.get("oauth2_app_integration_id", None), resources=_repeated_dict(d, "resources", AppResource), service_principal_client_id=d.get("service_principal_client_id", None), service_principal_id=d.get("service_principal_id", None), diff --git a/databricks/sdk/service/catalog.py b/databricks/sdk/service/catalog.py index 3974e7d68..de5e01aa9 100755 --- a/databricks/sdk/service/catalog.py +++ b/databricks/sdk/service/catalog.py @@ -8871,7 +8871,7 @@ def from_dict(cls, d: Dict[str, Any]) -> Securable: class SecurableKind(Enum): - """Latest kind: CONNECTION_JDBC_OAUTH_M2M = 298; Next id: 299""" + """Latest kind: EXTERNAL_LOCATION_ONELAKE_MANAGED = 299; Next id: 300""" TABLE_DB_STORAGE = "TABLE_DB_STORAGE" TABLE_DELTA = "TABLE_DELTA" diff --git a/databricks/sdk/service/ml.py b/databricks/sdk/service/ml.py index 97635d98c..07edd4930 100755 --- a/databricks/sdk/service/ml.py +++ b/databricks/sdk/service/ml.py @@ -1078,35 +1078,65 @@ class DeltaTableSource: timeseries_column: str """The timeseries column of the Delta table.""" + dataframe_schema: Optional[str] = None + """Schema of the resulting dataframe after transformations, in Spark StructType JSON format (from + df.schema.json()). Required if transformation_sql is specified. Example: + {"type":"struct","fields":[{"name":"col_a","type":"integer","nullable":true,"metadata":{}},{"name":"col_c","type":"integer","nullable":true,"metadata":{}}]}""" + + filter_condition: Optional[str] = None + """Single WHERE clause to filter delta table before applying transformations. Will be row-wise + evaluated, so should only include conditionals and projections.""" + + transformation_sql: Optional[str] = None + """A single SQL SELECT expression applied after filter_condition. Should contains all the columns + needed (eg. "SELECT *, col_a + col_b AS col_c FROM x.y.z WHERE col_a > 0" would have + `transformation_sql` "*, col_a + col_b AS col_c") If transformation_sql is not provided, all + columns of the delta table are present in the DataSource dataframe.""" + def as_dict(self) -> dict: """Serializes the DeltaTableSource into a dictionary suitable for use as a JSON request body.""" body = {} + if self.dataframe_schema is not None: + body["dataframe_schema"] = self.dataframe_schema if self.entity_columns: body["entity_columns"] = [v for v in self.entity_columns] + if self.filter_condition is not None: + body["filter_condition"] = self.filter_condition if self.full_name is not None: body["full_name"] = self.full_name if self.timeseries_column is not None: body["timeseries_column"] = self.timeseries_column + if self.transformation_sql is not None: + body["transformation_sql"] = self.transformation_sql return body def as_shallow_dict(self) -> dict: """Serializes the DeltaTableSource into a shallow dictionary of its immediate attributes.""" body = {} + if self.dataframe_schema is not None: + body["dataframe_schema"] = self.dataframe_schema if self.entity_columns: body["entity_columns"] = self.entity_columns + if self.filter_condition is not None: + body["filter_condition"] = self.filter_condition if self.full_name is not None: body["full_name"] = self.full_name if self.timeseries_column is not None: body["timeseries_column"] = self.timeseries_column + if self.transformation_sql is not None: + body["transformation_sql"] = self.transformation_sql return body @classmethod def from_dict(cls, d: Dict[str, Any]) -> DeltaTableSource: """Deserializes the DeltaTableSource from a dictionary.""" return cls( + dataframe_schema=d.get("dataframe_schema", None), entity_columns=d.get("entity_columns", None), + filter_condition=d.get("filter_condition", None), full_name=d.get("full_name", None), timeseries_column=d.get("timeseries_column", None), + transformation_sql=d.get("transformation_sql", None), ) diff --git a/databricks/sdk/service/pipelines.py b/databricks/sdk/service/pipelines.py index dd1241787..744dcdd4a 100755 --- a/databricks/sdk/service/pipelines.py +++ b/databricks/sdk/service/pipelines.py @@ -2522,11 +2522,25 @@ class PipelinesEnvironment: , , (WSFS or Volumes in Databricks), """ + environment_version: Optional[str] = None + """The environment version of the serverless Python environment used to execute customer Python + code. Each environment version includes a specific Python version and a curated set of + pre-installed libraries with defined versions, providing a stable and reproducible execution + environment. + + Databricks supports a three-year lifecycle for each environment version. For available versions + and their included packages, see + https://docs.databricks.com/aws/en/release-notes/serverless/environment-version/ + + The value should be a string representing the environment version number, for example: `"4"`.""" + def as_dict(self) -> dict: """Serializes the PipelinesEnvironment into a dictionary suitable for use as a JSON request body.""" body = {} if self.dependencies: body["dependencies"] = [v for v in self.dependencies] + if self.environment_version is not None: + body["environment_version"] = self.environment_version return body def as_shallow_dict(self) -> dict: @@ -2534,12 +2548,14 @@ def as_shallow_dict(self) -> dict: body = {} if self.dependencies: body["dependencies"] = self.dependencies + if self.environment_version is not None: + body["environment_version"] = self.environment_version return body @classmethod def from_dict(cls, d: Dict[str, Any]) -> PipelinesEnvironment: """Deserializes the PipelinesEnvironment from a dictionary.""" - return cls(dependencies=d.get("dependencies", None)) + return cls(dependencies=d.get("dependencies", None), environment_version=d.get("environment_version", None)) @dataclass @@ -4381,6 +4397,7 @@ def start_update( parameters: Optional[Dict[str, str]] = None, refresh_selection: Optional[List[str]] = None, replace_where_overrides: Optional[List[ReplaceWhereOverride]] = None, + reset_checkpoint_selection: Optional[List[str]] = None, rewind_spec: Optional[RewindSpec] = None, validate_only: Optional[bool] = None, ) -> StartUpdateResponse: @@ -4404,6 +4421,10 @@ def start_update( :param replace_where_overrides: List[:class:`ReplaceWhereOverride`] (optional) A list of predicate overrides for replace_where flows in this update. Only replace_where flows may be specified. Flows not listed use their original predicate. + :param reset_checkpoint_selection: List[str] (optional) + A list of flows for which this update should reset the streaming checkpoint. This selection will not + clear the data in the flow's target table. Flows in this list may also appear in refresh_selection + and full_refresh_selection. :param rewind_spec: :class:`RewindSpec` (optional) The information about the requested rewind operation. If specified this is a rewind mode update. :param validate_only: bool (optional) @@ -4426,6 +4447,8 @@ def start_update( body["refresh_selection"] = [v for v in refresh_selection] if replace_where_overrides is not None: body["replace_where_overrides"] = [v.as_dict() for v in replace_where_overrides] + if reset_checkpoint_selection is not None: + body["reset_checkpoint_selection"] = [v for v in reset_checkpoint_selection] if rewind_spec is not None: body["rewind_spec"] = rewind_spec.as_dict() if validate_only is not None: diff --git a/docs/dbdataclasses/catalog.rst b/docs/dbdataclasses/catalog.rst index d93ec9b6b..705e89751 100755 --- a/docs/dbdataclasses/catalog.rst +++ b/docs/dbdataclasses/catalog.rst @@ -1520,7 +1520,7 @@ These dataclasses are used in the SDK to represent API requests and responses fo .. py:class:: SecurableKind - Latest kind: CONNECTION_JDBC_OAUTH_M2M = 298; Next id: 299 + Latest kind: EXTERNAL_LOCATION_ONELAKE_MANAGED = 299; Next id: 300 .. py:attribute:: TABLE_DB_STORAGE :value: "TABLE_DB_STORAGE" diff --git a/docs/workspace/pipelines/pipelines.rst b/docs/workspace/pipelines/pipelines.rst index 072e72805..dda32ca30 100755 --- a/docs/workspace/pipelines/pipelines.rst +++ b/docs/workspace/pipelines/pipelines.rst @@ -430,7 +430,7 @@ :returns: :class:`PipelinePermissions` - .. py:method:: start_update(pipeline_id: str [, cause: Optional[StartUpdateCause], full_refresh: Optional[bool], full_refresh_selection: Optional[List[str]], parameters: Optional[Dict[str, str]], refresh_selection: Optional[List[str]], replace_where_overrides: Optional[List[ReplaceWhereOverride]], rewind_spec: Optional[RewindSpec], validate_only: Optional[bool]]) -> StartUpdateResponse + .. py:method:: start_update(pipeline_id: str [, cause: Optional[StartUpdateCause], full_refresh: Optional[bool], full_refresh_selection: Optional[List[str]], parameters: Optional[Dict[str, str]], refresh_selection: Optional[List[str]], replace_where_overrides: Optional[List[ReplaceWhereOverride]], reset_checkpoint_selection: Optional[List[str]], rewind_spec: Optional[RewindSpec], validate_only: Optional[bool]]) -> StartUpdateResponse Starts a new update for the pipeline. If there is already an active update for the pipeline, the request will fail and the active update will remain running. @@ -452,6 +452,10 @@ :param replace_where_overrides: List[:class:`ReplaceWhereOverride`] (optional) A list of predicate overrides for replace_where flows in this update. Only replace_where flows may be specified. Flows not listed use their original predicate. + :param reset_checkpoint_selection: List[str] (optional) + A list of flows for which this update should reset the streaming checkpoint. This selection will not + clear the data in the flow's target table. Flows in this list may also appear in refresh_selection + and full_refresh_selection. :param rewind_spec: :class:`RewindSpec` (optional) The information about the requested rewind operation. If specified this is a rewind mode update. :param validate_only: bool (optional)