databricks-sdk 0.57.0__py3-none-any.whl → 0.58.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of databricks-sdk might be problematic. Click here for more details.
- databricks/sdk/__init__.py +25 -4
- databricks/sdk/service/aibuilder.py +0 -36
- databricks/sdk/service/apps.py +1 -3
- databricks/sdk/service/billing.py +53 -23
- databricks/sdk/service/catalog.py +1692 -150
- databricks/sdk/service/cleanrooms.py +3 -22
- databricks/sdk/service/compute.py +245 -322
- databricks/sdk/service/dashboards.py +129 -162
- databricks/sdk/service/database.py +612 -97
- databricks/sdk/service/iam.py +3 -3
- databricks/sdk/service/jobs.py +6 -129
- databricks/sdk/service/marketplace.py +3 -2
- databricks/sdk/service/ml.py +713 -262
- databricks/sdk/service/oauth2.py +0 -1
- databricks/sdk/service/pipelines.py +12 -29
- databricks/sdk/service/provisioning.py +7 -125
- databricks/sdk/service/qualitymonitorv2.py +0 -18
- databricks/sdk/service/serving.py +39 -13
- databricks/sdk/service/settings.py +11 -128
- databricks/sdk/service/sharing.py +3 -9
- databricks/sdk/service/sql.py +94 -74
- databricks/sdk/service/vectorsearch.py +0 -19
- databricks/sdk/service/workspace.py +2 -6
- databricks/sdk/version.py +1 -1
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/METADATA +1 -1
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/RECORD +30 -30
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/WHEEL +0 -0
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/LICENSE +0 -0
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/NOTICE +0 -0
- {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/top_level.txt +0 -0
|
@@ -598,7 +598,7 @@ class AwsSqsQueue:
|
|
|
598
598
|
|
|
599
599
|
queue_url: Optional[str] = None
|
|
600
600
|
"""The AQS queue url in the format https://sqs.{region}.amazonaws.com/{account id}/{queue name}
|
|
601
|
-
|
|
601
|
+
Required for provided_sqs."""
|
|
602
602
|
|
|
603
603
|
def as_dict(self) -> dict:
|
|
604
604
|
"""Serializes the AwsSqsQueue into a dictionary suitable for use as a JSON request body."""
|
|
@@ -803,15 +803,15 @@ class AzureQueueStorage:
|
|
|
803
803
|
|
|
804
804
|
queue_url: Optional[str] = None
|
|
805
805
|
"""The AQS queue url in the format https://{storage account}.queue.core.windows.net/{queue name}
|
|
806
|
-
|
|
806
|
+
Required for provided_aqs."""
|
|
807
807
|
|
|
808
808
|
resource_group: Optional[str] = None
|
|
809
809
|
"""The resource group for the queue, event grid subscription, and external location storage
|
|
810
|
-
account.
|
|
810
|
+
account. Only required for locations with a service principal storage credential"""
|
|
811
811
|
|
|
812
812
|
subscription_id: Optional[str] = None
|
|
813
|
-
"""
|
|
814
|
-
|
|
813
|
+
"""Optional subscription id for the queue, event grid subscription, and external location storage
|
|
814
|
+
account. Required for locations with a service principal storage credential"""
|
|
815
815
|
|
|
816
816
|
def as_dict(self) -> dict:
|
|
817
817
|
"""Serializes the AzureQueueStorage into a dictionary suitable for use as a JSON request body."""
|
|
@@ -948,7 +948,6 @@ class CatalogInfo:
|
|
|
948
948
|
through the BROWSE privilege when include_browse is enabled in the request."""
|
|
949
949
|
|
|
950
950
|
catalog_type: Optional[CatalogType] = None
|
|
951
|
-
"""The type of the catalog."""
|
|
952
951
|
|
|
953
952
|
comment: Optional[str] = None
|
|
954
953
|
"""User-provided free-form text description."""
|
|
@@ -994,10 +993,8 @@ class CatalogInfo:
|
|
|
994
993
|
A Delta Sharing catalog is a catalog that is based on a Delta share on a remote sharing server."""
|
|
995
994
|
|
|
996
995
|
provisioning_info: Optional[ProvisioningInfo] = None
|
|
997
|
-
"""Status of an asynchronously provisioned resource."""
|
|
998
996
|
|
|
999
997
|
securable_type: Optional[SecurableType] = None
|
|
1000
|
-
"""The type of Unity Catalog securable."""
|
|
1001
998
|
|
|
1002
999
|
share_name: Optional[str] = None
|
|
1003
1000
|
"""The name of the share under the share provider."""
|
|
@@ -1163,7 +1160,6 @@ class CatalogType(Enum):
|
|
|
1163
1160
|
MANAGED_CATALOG = "MANAGED_CATALOG"
|
|
1164
1161
|
MANAGED_ONLINE_CATALOG = "MANAGED_ONLINE_CATALOG"
|
|
1165
1162
|
SYSTEM_CATALOG = "SYSTEM_CATALOG"
|
|
1166
|
-
UNKNOWN_CATALOG_TYPE = "UNKNOWN_CATALOG_TYPE"
|
|
1167
1163
|
|
|
1168
1164
|
|
|
1169
1165
|
@dataclass
|
|
@@ -1359,6 +1355,36 @@ class ColumnMask:
|
|
|
1359
1355
|
return cls(function_name=d.get("function_name", None), using_column_names=d.get("using_column_names", None))
|
|
1360
1356
|
|
|
1361
1357
|
|
|
1358
|
+
@dataclass
|
|
1359
|
+
class ColumnRelationship:
|
|
1360
|
+
source: Optional[str] = None
|
|
1361
|
+
|
|
1362
|
+
target: Optional[str] = None
|
|
1363
|
+
|
|
1364
|
+
def as_dict(self) -> dict:
|
|
1365
|
+
"""Serializes the ColumnRelationship into a dictionary suitable for use as a JSON request body."""
|
|
1366
|
+
body = {}
|
|
1367
|
+
if self.source is not None:
|
|
1368
|
+
body["source"] = self.source
|
|
1369
|
+
if self.target is not None:
|
|
1370
|
+
body["target"] = self.target
|
|
1371
|
+
return body
|
|
1372
|
+
|
|
1373
|
+
def as_shallow_dict(self) -> dict:
|
|
1374
|
+
"""Serializes the ColumnRelationship into a shallow dictionary of its immediate attributes."""
|
|
1375
|
+
body = {}
|
|
1376
|
+
if self.source is not None:
|
|
1377
|
+
body["source"] = self.source
|
|
1378
|
+
if self.target is not None:
|
|
1379
|
+
body["target"] = self.target
|
|
1380
|
+
return body
|
|
1381
|
+
|
|
1382
|
+
@classmethod
|
|
1383
|
+
def from_dict(cls, d: Dict[str, Any]) -> ColumnRelationship:
|
|
1384
|
+
"""Deserializes the ColumnRelationship from a dictionary."""
|
|
1385
|
+
return cls(source=d.get("source", None), target=d.get("target", None))
|
|
1386
|
+
|
|
1387
|
+
|
|
1362
1388
|
class ColumnTypeName(Enum):
|
|
1363
1389
|
|
|
1364
1390
|
ARRAY = "ARRAY"
|
|
@@ -1387,6 +1413,33 @@ class ColumnTypeName(Enum):
|
|
|
1387
1413
|
VARIANT = "VARIANT"
|
|
1388
1414
|
|
|
1389
1415
|
|
|
1416
|
+
@dataclass
|
|
1417
|
+
class ConnectionDependency:
|
|
1418
|
+
"""A connection that is dependent on a SQL object."""
|
|
1419
|
+
|
|
1420
|
+
connection_name: Optional[str] = None
|
|
1421
|
+
"""Full name of the dependent connection, in the form of __connection_name__."""
|
|
1422
|
+
|
|
1423
|
+
def as_dict(self) -> dict:
|
|
1424
|
+
"""Serializes the ConnectionDependency into a dictionary suitable for use as a JSON request body."""
|
|
1425
|
+
body = {}
|
|
1426
|
+
if self.connection_name is not None:
|
|
1427
|
+
body["connection_name"] = self.connection_name
|
|
1428
|
+
return body
|
|
1429
|
+
|
|
1430
|
+
def as_shallow_dict(self) -> dict:
|
|
1431
|
+
"""Serializes the ConnectionDependency into a shallow dictionary of its immediate attributes."""
|
|
1432
|
+
body = {}
|
|
1433
|
+
if self.connection_name is not None:
|
|
1434
|
+
body["connection_name"] = self.connection_name
|
|
1435
|
+
return body
|
|
1436
|
+
|
|
1437
|
+
@classmethod
|
|
1438
|
+
def from_dict(cls, d: Dict[str, Any]) -> ConnectionDependency:
|
|
1439
|
+
"""Deserializes the ConnectionDependency from a dictionary."""
|
|
1440
|
+
return cls(connection_name=d.get("connection_name", None))
|
|
1441
|
+
|
|
1442
|
+
|
|
1390
1443
|
@dataclass
|
|
1391
1444
|
class ConnectionInfo:
|
|
1392
1445
|
comment: Optional[str] = None
|
|
@@ -1426,13 +1479,11 @@ class ConnectionInfo:
|
|
|
1426
1479
|
"""A map of key-value properties attached to the securable."""
|
|
1427
1480
|
|
|
1428
1481
|
provisioning_info: Optional[ProvisioningInfo] = None
|
|
1429
|
-
"""Status of an asynchronously provisioned resource."""
|
|
1430
1482
|
|
|
1431
1483
|
read_only: Optional[bool] = None
|
|
1432
1484
|
"""If the connection is read only."""
|
|
1433
1485
|
|
|
1434
1486
|
securable_type: Optional[SecurableType] = None
|
|
1435
|
-
"""The type of Unity Catalog securable."""
|
|
1436
1487
|
|
|
1437
1488
|
updated_at: Optional[int] = None
|
|
1438
1489
|
"""Time at which this connection was updated, in epoch milliseconds."""
|
|
@@ -1551,7 +1602,7 @@ class ConnectionInfo:
|
|
|
1551
1602
|
|
|
1552
1603
|
|
|
1553
1604
|
class ConnectionType(Enum):
|
|
1554
|
-
"""Next Id:
|
|
1605
|
+
"""Next Id: 36"""
|
|
1555
1606
|
|
|
1556
1607
|
BIGQUERY = "BIGQUERY"
|
|
1557
1608
|
DATABRICKS = "DATABRICKS"
|
|
@@ -1883,10 +1934,9 @@ class CreateExternalLocation:
|
|
|
1883
1934
|
"""User-provided free-form text description."""
|
|
1884
1935
|
|
|
1885
1936
|
enable_file_events: Optional[bool] = None
|
|
1886
|
-
"""
|
|
1937
|
+
"""Whether to enable file events on this external location."""
|
|
1887
1938
|
|
|
1888
1939
|
encryption_details: Optional[EncryptionDetails] = None
|
|
1889
|
-
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
1890
1940
|
|
|
1891
1941
|
fallback: Optional[bool] = None
|
|
1892
1942
|
"""Indicates whether fallback mode is enabled for this external location. When fallback mode is
|
|
@@ -1894,7 +1944,7 @@ class CreateExternalLocation:
|
|
|
1894
1944
|
sufficient."""
|
|
1895
1945
|
|
|
1896
1946
|
file_event_queue: Optional[FileEventQueue] = None
|
|
1897
|
-
"""
|
|
1947
|
+
"""File event queue settings."""
|
|
1898
1948
|
|
|
1899
1949
|
read_only: Optional[bool] = None
|
|
1900
1950
|
"""Indicates whether the external location is read-only."""
|
|
@@ -2492,6 +2542,65 @@ class CreateRegisteredModelRequest:
|
|
|
2492
2542
|
)
|
|
2493
2543
|
|
|
2494
2544
|
|
|
2545
|
+
@dataclass
|
|
2546
|
+
class CreateRequestExternalLineage:
|
|
2547
|
+
source: ExternalLineageObject
|
|
2548
|
+
"""Source object of the external lineage relationship."""
|
|
2549
|
+
|
|
2550
|
+
target: ExternalLineageObject
|
|
2551
|
+
"""Target object of the external lineage relationship."""
|
|
2552
|
+
|
|
2553
|
+
columns: Optional[List[ColumnRelationship]] = None
|
|
2554
|
+
"""List of column relationships between source and target objects."""
|
|
2555
|
+
|
|
2556
|
+
id: Optional[str] = None
|
|
2557
|
+
"""Unique identifier of the external lineage relationship."""
|
|
2558
|
+
|
|
2559
|
+
properties: Optional[Dict[str, str]] = None
|
|
2560
|
+
"""Key-value properties associated with the external lineage relationship."""
|
|
2561
|
+
|
|
2562
|
+
def as_dict(self) -> dict:
|
|
2563
|
+
"""Serializes the CreateRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
|
|
2564
|
+
body = {}
|
|
2565
|
+
if self.columns:
|
|
2566
|
+
body["columns"] = [v.as_dict() for v in self.columns]
|
|
2567
|
+
if self.id is not None:
|
|
2568
|
+
body["id"] = self.id
|
|
2569
|
+
if self.properties:
|
|
2570
|
+
body["properties"] = self.properties
|
|
2571
|
+
if self.source:
|
|
2572
|
+
body["source"] = self.source.as_dict()
|
|
2573
|
+
if self.target:
|
|
2574
|
+
body["target"] = self.target.as_dict()
|
|
2575
|
+
return body
|
|
2576
|
+
|
|
2577
|
+
def as_shallow_dict(self) -> dict:
|
|
2578
|
+
"""Serializes the CreateRequestExternalLineage into a shallow dictionary of its immediate attributes."""
|
|
2579
|
+
body = {}
|
|
2580
|
+
if self.columns:
|
|
2581
|
+
body["columns"] = self.columns
|
|
2582
|
+
if self.id is not None:
|
|
2583
|
+
body["id"] = self.id
|
|
2584
|
+
if self.properties:
|
|
2585
|
+
body["properties"] = self.properties
|
|
2586
|
+
if self.source:
|
|
2587
|
+
body["source"] = self.source
|
|
2588
|
+
if self.target:
|
|
2589
|
+
body["target"] = self.target
|
|
2590
|
+
return body
|
|
2591
|
+
|
|
2592
|
+
@classmethod
|
|
2593
|
+
def from_dict(cls, d: Dict[str, Any]) -> CreateRequestExternalLineage:
|
|
2594
|
+
"""Deserializes the CreateRequestExternalLineage from a dictionary."""
|
|
2595
|
+
return cls(
|
|
2596
|
+
columns=_repeated_dict(d, "columns", ColumnRelationship),
|
|
2597
|
+
id=d.get("id", None),
|
|
2598
|
+
properties=d.get("properties", None),
|
|
2599
|
+
source=_from_dict(d, "source", ExternalLineageObject),
|
|
2600
|
+
target=_from_dict(d, "target", ExternalLineageObject),
|
|
2601
|
+
)
|
|
2602
|
+
|
|
2603
|
+
|
|
2495
2604
|
@dataclass
|
|
2496
2605
|
class CreateResponse:
|
|
2497
2606
|
def as_dict(self) -> dict:
|
|
@@ -2670,8 +2779,6 @@ class CreateTableConstraint:
|
|
|
2670
2779
|
"""The full name of the table referenced by the constraint."""
|
|
2671
2780
|
|
|
2672
2781
|
constraint: TableConstraint
|
|
2673
|
-
"""A table constraint, as defined by *one* of the following fields being set:
|
|
2674
|
-
__primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__."""
|
|
2675
2782
|
|
|
2676
2783
|
def as_dict(self) -> dict:
|
|
2677
2784
|
"""Serializes the CreateTableConstraint into a dictionary suitable for use as a JSON request body."""
|
|
@@ -2709,11 +2816,6 @@ class CreateVolumeRequestContent:
|
|
|
2709
2816
|
"""The name of the volume"""
|
|
2710
2817
|
|
|
2711
2818
|
volume_type: VolumeType
|
|
2712
|
-
"""The type of the volume. An external volume is located in the specified external location. A
|
|
2713
|
-
managed volume is located in the default location which is specified by the parent schema, or
|
|
2714
|
-
the parent catalog, or the Metastore. [Learn more]
|
|
2715
|
-
|
|
2716
|
-
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
|
|
2717
2819
|
|
|
2718
2820
|
comment: Optional[str] = None
|
|
2719
2821
|
"""The comment attached to the volume"""
|
|
@@ -2768,6 +2870,33 @@ class CreateVolumeRequestContent:
|
|
|
2768
2870
|
)
|
|
2769
2871
|
|
|
2770
2872
|
|
|
2873
|
+
@dataclass
|
|
2874
|
+
class CredentialDependency:
|
|
2875
|
+
"""A credential that is dependent on a SQL object."""
|
|
2876
|
+
|
|
2877
|
+
credential_name: Optional[str] = None
|
|
2878
|
+
"""Full name of the dependent credential, in the form of __credential_name__."""
|
|
2879
|
+
|
|
2880
|
+
def as_dict(self) -> dict:
|
|
2881
|
+
"""Serializes the CredentialDependency into a dictionary suitable for use as a JSON request body."""
|
|
2882
|
+
body = {}
|
|
2883
|
+
if self.credential_name is not None:
|
|
2884
|
+
body["credential_name"] = self.credential_name
|
|
2885
|
+
return body
|
|
2886
|
+
|
|
2887
|
+
def as_shallow_dict(self) -> dict:
|
|
2888
|
+
"""Serializes the CredentialDependency into a shallow dictionary of its immediate attributes."""
|
|
2889
|
+
body = {}
|
|
2890
|
+
if self.credential_name is not None:
|
|
2891
|
+
body["credential_name"] = self.credential_name
|
|
2892
|
+
return body
|
|
2893
|
+
|
|
2894
|
+
@classmethod
|
|
2895
|
+
def from_dict(cls, d: Dict[str, Any]) -> CredentialDependency:
|
|
2896
|
+
"""Deserializes the CredentialDependency from a dictionary."""
|
|
2897
|
+
return cls(credential_name=d.get("credential_name", None))
|
|
2898
|
+
|
|
2899
|
+
|
|
2771
2900
|
@dataclass
|
|
2772
2901
|
class CredentialInfo:
|
|
2773
2902
|
aws_iam_role: Optional[AwsIamRole] = None
|
|
@@ -2941,8 +3070,9 @@ class CredentialPurpose(Enum):
|
|
|
2941
3070
|
|
|
2942
3071
|
|
|
2943
3072
|
class CredentialType(Enum):
|
|
2944
|
-
"""Next Id:
|
|
3073
|
+
"""Next Id: 13"""
|
|
2945
3074
|
|
|
3075
|
+
ANY_STATIC_CREDENTIAL = "ANY_STATIC_CREDENTIAL"
|
|
2946
3076
|
BEARER_TOKEN = "BEARER_TOKEN"
|
|
2947
3077
|
OAUTH_ACCESS_TOKEN = "OAUTH_ACCESS_TOKEN"
|
|
2948
3078
|
OAUTH_M2M = "OAUTH_M2M"
|
|
@@ -2996,21 +3126,28 @@ class DataSourceFormat(Enum):
|
|
|
2996
3126
|
BIGQUERY_FORMAT = "BIGQUERY_FORMAT"
|
|
2997
3127
|
CSV = "CSV"
|
|
2998
3128
|
DATABRICKS_FORMAT = "DATABRICKS_FORMAT"
|
|
3129
|
+
DATABRICKS_ROW_STORE_FORMAT = "DATABRICKS_ROW_STORE_FORMAT"
|
|
2999
3130
|
DELTA = "DELTA"
|
|
3000
3131
|
DELTASHARING = "DELTASHARING"
|
|
3001
|
-
|
|
3002
|
-
|
|
3132
|
+
DELTA_UNIFORM_HUDI = "DELTA_UNIFORM_HUDI"
|
|
3133
|
+
DELTA_UNIFORM_ICEBERG = "DELTA_UNIFORM_ICEBERG"
|
|
3134
|
+
HIVE = "HIVE"
|
|
3135
|
+
ICEBERG = "ICEBERG"
|
|
3003
3136
|
JSON = "JSON"
|
|
3137
|
+
MONGODB_FORMAT = "MONGODB_FORMAT"
|
|
3004
3138
|
MYSQL_FORMAT = "MYSQL_FORMAT"
|
|
3005
3139
|
NETSUITE_FORMAT = "NETSUITE_FORMAT"
|
|
3140
|
+
ORACLE_FORMAT = "ORACLE_FORMAT"
|
|
3006
3141
|
ORC = "ORC"
|
|
3007
3142
|
PARQUET = "PARQUET"
|
|
3008
3143
|
POSTGRESQL_FORMAT = "POSTGRESQL_FORMAT"
|
|
3009
3144
|
REDSHIFT_FORMAT = "REDSHIFT_FORMAT"
|
|
3145
|
+
SALESFORCE_DATA_CLOUD_FORMAT = "SALESFORCE_DATA_CLOUD_FORMAT"
|
|
3010
3146
|
SALESFORCE_FORMAT = "SALESFORCE_FORMAT"
|
|
3011
3147
|
SNOWFLAKE_FORMAT = "SNOWFLAKE_FORMAT"
|
|
3012
3148
|
SQLDW_FORMAT = "SQLDW_FORMAT"
|
|
3013
3149
|
SQLSERVER_FORMAT = "SQLSERVER_FORMAT"
|
|
3150
|
+
TERADATA_FORMAT = "TERADATA_FORMAT"
|
|
3014
3151
|
TEXT = "TEXT"
|
|
3015
3152
|
UNITY_CATALOG = "UNITY_CATALOG"
|
|
3016
3153
|
VECTOR_INDEX_FORMAT = "VECTOR_INDEX_FORMAT"
|
|
@@ -3152,6 +3289,49 @@ class DeleteCredentialResponse:
|
|
|
3152
3289
|
return cls()
|
|
3153
3290
|
|
|
3154
3291
|
|
|
3292
|
+
@dataclass
|
|
3293
|
+
class DeleteRequestExternalLineage:
|
|
3294
|
+
source: ExternalLineageObject
|
|
3295
|
+
"""Source object of the external lineage relationship."""
|
|
3296
|
+
|
|
3297
|
+
target: ExternalLineageObject
|
|
3298
|
+
"""Target object of the external lineage relationship."""
|
|
3299
|
+
|
|
3300
|
+
id: Optional[str] = None
|
|
3301
|
+
"""Unique identifier of the external lineage relationship."""
|
|
3302
|
+
|
|
3303
|
+
def as_dict(self) -> dict:
|
|
3304
|
+
"""Serializes the DeleteRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
|
|
3305
|
+
body = {}
|
|
3306
|
+
if self.id is not None:
|
|
3307
|
+
body["id"] = self.id
|
|
3308
|
+
if self.source:
|
|
3309
|
+
body["source"] = self.source.as_dict()
|
|
3310
|
+
if self.target:
|
|
3311
|
+
body["target"] = self.target.as_dict()
|
|
3312
|
+
return body
|
|
3313
|
+
|
|
3314
|
+
def as_shallow_dict(self) -> dict:
|
|
3315
|
+
"""Serializes the DeleteRequestExternalLineage into a shallow dictionary of its immediate attributes."""
|
|
3316
|
+
body = {}
|
|
3317
|
+
if self.id is not None:
|
|
3318
|
+
body["id"] = self.id
|
|
3319
|
+
if self.source:
|
|
3320
|
+
body["source"] = self.source
|
|
3321
|
+
if self.target:
|
|
3322
|
+
body["target"] = self.target
|
|
3323
|
+
return body
|
|
3324
|
+
|
|
3325
|
+
@classmethod
|
|
3326
|
+
def from_dict(cls, d: Dict[str, Any]) -> DeleteRequestExternalLineage:
|
|
3327
|
+
"""Deserializes the DeleteRequestExternalLineage from a dictionary."""
|
|
3328
|
+
return cls(
|
|
3329
|
+
id=d.get("id", None),
|
|
3330
|
+
source=_from_dict(d, "source", ExternalLineageObject),
|
|
3331
|
+
target=_from_dict(d, "target", ExternalLineageObject),
|
|
3332
|
+
)
|
|
3333
|
+
|
|
3334
|
+
|
|
3155
3335
|
@dataclass
|
|
3156
3336
|
class DeleteResponse:
|
|
3157
3337
|
def as_dict(self) -> dict:
|
|
@@ -3206,18 +3386,24 @@ class DeltaSharingScopeEnum(Enum):
|
|
|
3206
3386
|
|
|
3207
3387
|
@dataclass
|
|
3208
3388
|
class Dependency:
|
|
3209
|
-
"""A dependency of a SQL object.
|
|
3210
|
-
|
|
3389
|
+
"""A dependency of a SQL object. One of the following fields must be defined: __table__,
|
|
3390
|
+
__function__, __connection__, or __credential__."""
|
|
3391
|
+
|
|
3392
|
+
connection: Optional[ConnectionDependency] = None
|
|
3393
|
+
|
|
3394
|
+
credential: Optional[CredentialDependency] = None
|
|
3211
3395
|
|
|
3212
3396
|
function: Optional[FunctionDependency] = None
|
|
3213
|
-
"""A function that is dependent on a SQL object."""
|
|
3214
3397
|
|
|
3215
3398
|
table: Optional[TableDependency] = None
|
|
3216
|
-
"""A table that is dependent on a SQL object."""
|
|
3217
3399
|
|
|
3218
3400
|
def as_dict(self) -> dict:
|
|
3219
3401
|
"""Serializes the Dependency into a dictionary suitable for use as a JSON request body."""
|
|
3220
3402
|
body = {}
|
|
3403
|
+
if self.connection:
|
|
3404
|
+
body["connection"] = self.connection.as_dict()
|
|
3405
|
+
if self.credential:
|
|
3406
|
+
body["credential"] = self.credential.as_dict()
|
|
3221
3407
|
if self.function:
|
|
3222
3408
|
body["function"] = self.function.as_dict()
|
|
3223
3409
|
if self.table:
|
|
@@ -3227,6 +3413,10 @@ class Dependency:
|
|
|
3227
3413
|
def as_shallow_dict(self) -> dict:
|
|
3228
3414
|
"""Serializes the Dependency into a shallow dictionary of its immediate attributes."""
|
|
3229
3415
|
body = {}
|
|
3416
|
+
if self.connection:
|
|
3417
|
+
body["connection"] = self.connection
|
|
3418
|
+
if self.credential:
|
|
3419
|
+
body["credential"] = self.credential
|
|
3230
3420
|
if self.function:
|
|
3231
3421
|
body["function"] = self.function
|
|
3232
3422
|
if self.table:
|
|
@@ -3237,7 +3427,10 @@ class Dependency:
|
|
|
3237
3427
|
def from_dict(cls, d: Dict[str, Any]) -> Dependency:
|
|
3238
3428
|
"""Deserializes the Dependency from a dictionary."""
|
|
3239
3429
|
return cls(
|
|
3240
|
-
|
|
3430
|
+
connection=_from_dict(d, "connection", ConnectionDependency),
|
|
3431
|
+
credential=_from_dict(d, "credential", CredentialDependency),
|
|
3432
|
+
function=_from_dict(d, "function", FunctionDependency),
|
|
3433
|
+
table=_from_dict(d, "table", TableDependency),
|
|
3241
3434
|
)
|
|
3242
3435
|
|
|
3243
3436
|
|
|
@@ -3493,58 +3686,596 @@ class EnableRequest:
|
|
|
3493
3686
|
return body
|
|
3494
3687
|
|
|
3495
3688
|
@classmethod
|
|
3496
|
-
def from_dict(cls, d: Dict[str, Any]) -> EnableRequest:
|
|
3497
|
-
"""Deserializes the EnableRequest from a dictionary."""
|
|
3689
|
+
def from_dict(cls, d: Dict[str, Any]) -> EnableRequest:
|
|
3690
|
+
"""Deserializes the EnableRequest from a dictionary."""
|
|
3691
|
+
return cls(
|
|
3692
|
+
catalog_name=d.get("catalog_name", None),
|
|
3693
|
+
metastore_id=d.get("metastore_id", None),
|
|
3694
|
+
schema_name=d.get("schema_name", None),
|
|
3695
|
+
)
|
|
3696
|
+
|
|
3697
|
+
|
|
3698
|
+
@dataclass
|
|
3699
|
+
class EnableResponse:
|
|
3700
|
+
def as_dict(self) -> dict:
|
|
3701
|
+
"""Serializes the EnableResponse into a dictionary suitable for use as a JSON request body."""
|
|
3702
|
+
body = {}
|
|
3703
|
+
return body
|
|
3704
|
+
|
|
3705
|
+
def as_shallow_dict(self) -> dict:
|
|
3706
|
+
"""Serializes the EnableResponse into a shallow dictionary of its immediate attributes."""
|
|
3707
|
+
body = {}
|
|
3708
|
+
return body
|
|
3709
|
+
|
|
3710
|
+
@classmethod
|
|
3711
|
+
def from_dict(cls, d: Dict[str, Any]) -> EnableResponse:
|
|
3712
|
+
"""Deserializes the EnableResponse from a dictionary."""
|
|
3713
|
+
return cls()
|
|
3714
|
+
|
|
3715
|
+
|
|
3716
|
+
@dataclass
|
|
3717
|
+
class EncryptionDetails:
|
|
3718
|
+
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
3719
|
+
|
|
3720
|
+
sse_encryption_details: Optional[SseEncryptionDetails] = None
|
|
3721
|
+
"""Server-Side Encryption properties for clients communicating with AWS s3."""
|
|
3722
|
+
|
|
3723
|
+
def as_dict(self) -> dict:
|
|
3724
|
+
"""Serializes the EncryptionDetails into a dictionary suitable for use as a JSON request body."""
|
|
3725
|
+
body = {}
|
|
3726
|
+
if self.sse_encryption_details:
|
|
3727
|
+
body["sse_encryption_details"] = self.sse_encryption_details.as_dict()
|
|
3728
|
+
return body
|
|
3729
|
+
|
|
3730
|
+
def as_shallow_dict(self) -> dict:
|
|
3731
|
+
"""Serializes the EncryptionDetails into a shallow dictionary of its immediate attributes."""
|
|
3732
|
+
body = {}
|
|
3733
|
+
if self.sse_encryption_details:
|
|
3734
|
+
body["sse_encryption_details"] = self.sse_encryption_details
|
|
3735
|
+
return body
|
|
3736
|
+
|
|
3737
|
+
@classmethod
|
|
3738
|
+
def from_dict(cls, d: Dict[str, Any]) -> EncryptionDetails:
|
|
3739
|
+
"""Deserializes the EncryptionDetails from a dictionary."""
|
|
3740
|
+
return cls(sse_encryption_details=_from_dict(d, "sse_encryption_details", SseEncryptionDetails))
|
|
3741
|
+
|
|
3742
|
+
|
|
3743
|
+
@dataclass
|
|
3744
|
+
class ExternalLineageExternalMetadata:
|
|
3745
|
+
name: Optional[str] = None
|
|
3746
|
+
|
|
3747
|
+
def as_dict(self) -> dict:
|
|
3748
|
+
"""Serializes the ExternalLineageExternalMetadata into a dictionary suitable for use as a JSON request body."""
|
|
3749
|
+
body = {}
|
|
3750
|
+
if self.name is not None:
|
|
3751
|
+
body["name"] = self.name
|
|
3752
|
+
return body
|
|
3753
|
+
|
|
3754
|
+
def as_shallow_dict(self) -> dict:
|
|
3755
|
+
"""Serializes the ExternalLineageExternalMetadata into a shallow dictionary of its immediate attributes."""
|
|
3756
|
+
body = {}
|
|
3757
|
+
if self.name is not None:
|
|
3758
|
+
body["name"] = self.name
|
|
3759
|
+
return body
|
|
3760
|
+
|
|
3761
|
+
@classmethod
|
|
3762
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageExternalMetadata:
|
|
3763
|
+
"""Deserializes the ExternalLineageExternalMetadata from a dictionary."""
|
|
3764
|
+
return cls(name=d.get("name", None))
|
|
3765
|
+
|
|
3766
|
+
|
|
3767
|
+
@dataclass
|
|
3768
|
+
class ExternalLineageExternalMetadataInfo:
|
|
3769
|
+
"""Represents the external metadata object in the lineage event."""
|
|
3770
|
+
|
|
3771
|
+
entity_type: Optional[str] = None
|
|
3772
|
+
"""Type of entity represented by the external metadata object."""
|
|
3773
|
+
|
|
3774
|
+
event_time: Optional[str] = None
|
|
3775
|
+
"""Timestamp of the lineage event."""
|
|
3776
|
+
|
|
3777
|
+
name: Optional[str] = None
|
|
3778
|
+
"""Name of the external metadata object."""
|
|
3779
|
+
|
|
3780
|
+
system_type: Optional[SystemType] = None
|
|
3781
|
+
"""Type of external system."""
|
|
3782
|
+
|
|
3783
|
+
def as_dict(self) -> dict:
|
|
3784
|
+
"""Serializes the ExternalLineageExternalMetadataInfo into a dictionary suitable for use as a JSON request body."""
|
|
3785
|
+
body = {}
|
|
3786
|
+
if self.entity_type is not None:
|
|
3787
|
+
body["entity_type"] = self.entity_type
|
|
3788
|
+
if self.event_time is not None:
|
|
3789
|
+
body["event_time"] = self.event_time
|
|
3790
|
+
if self.name is not None:
|
|
3791
|
+
body["name"] = self.name
|
|
3792
|
+
if self.system_type is not None:
|
|
3793
|
+
body["system_type"] = self.system_type.value
|
|
3794
|
+
return body
|
|
3795
|
+
|
|
3796
|
+
def as_shallow_dict(self) -> dict:
|
|
3797
|
+
"""Serializes the ExternalLineageExternalMetadataInfo into a shallow dictionary of its immediate attributes."""
|
|
3798
|
+
body = {}
|
|
3799
|
+
if self.entity_type is not None:
|
|
3800
|
+
body["entity_type"] = self.entity_type
|
|
3801
|
+
if self.event_time is not None:
|
|
3802
|
+
body["event_time"] = self.event_time
|
|
3803
|
+
if self.name is not None:
|
|
3804
|
+
body["name"] = self.name
|
|
3805
|
+
if self.system_type is not None:
|
|
3806
|
+
body["system_type"] = self.system_type
|
|
3807
|
+
return body
|
|
3808
|
+
|
|
3809
|
+
@classmethod
|
|
3810
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageExternalMetadataInfo:
|
|
3811
|
+
"""Deserializes the ExternalLineageExternalMetadataInfo from a dictionary."""
|
|
3812
|
+
return cls(
|
|
3813
|
+
entity_type=d.get("entity_type", None),
|
|
3814
|
+
event_time=d.get("event_time", None),
|
|
3815
|
+
name=d.get("name", None),
|
|
3816
|
+
system_type=_enum(d, "system_type", SystemType),
|
|
3817
|
+
)
|
|
3818
|
+
|
|
3819
|
+
|
|
3820
|
+
@dataclass
|
|
3821
|
+
class ExternalLineageFileInfo:
|
|
3822
|
+
"""Represents the path information in the lineage event."""
|
|
3823
|
+
|
|
3824
|
+
event_time: Optional[str] = None
|
|
3825
|
+
"""Timestamp of the lineage event."""
|
|
3826
|
+
|
|
3827
|
+
path: Optional[str] = None
|
|
3828
|
+
"""URL of the path."""
|
|
3829
|
+
|
|
3830
|
+
securable_name: Optional[str] = None
|
|
3831
|
+
"""The full name of the securable on the path."""
|
|
3832
|
+
|
|
3833
|
+
securable_type: Optional[str] = None
|
|
3834
|
+
"""The securable type of the securable on the path."""
|
|
3835
|
+
|
|
3836
|
+
storage_location: Optional[str] = None
|
|
3837
|
+
"""The storage location associated with securable on the path."""
|
|
3838
|
+
|
|
3839
|
+
def as_dict(self) -> dict:
|
|
3840
|
+
"""Serializes the ExternalLineageFileInfo into a dictionary suitable for use as a JSON request body."""
|
|
3841
|
+
body = {}
|
|
3842
|
+
if self.event_time is not None:
|
|
3843
|
+
body["event_time"] = self.event_time
|
|
3844
|
+
if self.path is not None:
|
|
3845
|
+
body["path"] = self.path
|
|
3846
|
+
if self.securable_name is not None:
|
|
3847
|
+
body["securable_name"] = self.securable_name
|
|
3848
|
+
if self.securable_type is not None:
|
|
3849
|
+
body["securable_type"] = self.securable_type
|
|
3850
|
+
if self.storage_location is not None:
|
|
3851
|
+
body["storage_location"] = self.storage_location
|
|
3852
|
+
return body
|
|
3853
|
+
|
|
3854
|
+
def as_shallow_dict(self) -> dict:
|
|
3855
|
+
"""Serializes the ExternalLineageFileInfo into a shallow dictionary of its immediate attributes."""
|
|
3856
|
+
body = {}
|
|
3857
|
+
if self.event_time is not None:
|
|
3858
|
+
body["event_time"] = self.event_time
|
|
3859
|
+
if self.path is not None:
|
|
3860
|
+
body["path"] = self.path
|
|
3861
|
+
if self.securable_name is not None:
|
|
3862
|
+
body["securable_name"] = self.securable_name
|
|
3863
|
+
if self.securable_type is not None:
|
|
3864
|
+
body["securable_type"] = self.securable_type
|
|
3865
|
+
if self.storage_location is not None:
|
|
3866
|
+
body["storage_location"] = self.storage_location
|
|
3867
|
+
return body
|
|
3868
|
+
|
|
3869
|
+
@classmethod
|
|
3870
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageFileInfo:
|
|
3871
|
+
"""Deserializes the ExternalLineageFileInfo from a dictionary."""
|
|
3872
|
+
return cls(
|
|
3873
|
+
event_time=d.get("event_time", None),
|
|
3874
|
+
path=d.get("path", None),
|
|
3875
|
+
securable_name=d.get("securable_name", None),
|
|
3876
|
+
securable_type=d.get("securable_type", None),
|
|
3877
|
+
storage_location=d.get("storage_location", None),
|
|
3878
|
+
)
|
|
3879
|
+
|
|
3880
|
+
|
|
3881
|
+
@dataclass
|
|
3882
|
+
class ExternalLineageInfo:
|
|
3883
|
+
"""Lineage response containing lineage information of a data asset."""
|
|
3884
|
+
|
|
3885
|
+
external_lineage_info: Optional[ExternalLineageRelationshipInfo] = None
|
|
3886
|
+
"""Information about the edge metadata of the external lineage relationship."""
|
|
3887
|
+
|
|
3888
|
+
external_metadata_info: Optional[ExternalLineageExternalMetadataInfo] = None
|
|
3889
|
+
"""Information about external metadata involved in the lineage relationship."""
|
|
3890
|
+
|
|
3891
|
+
file_info: Optional[ExternalLineageFileInfo] = None
|
|
3892
|
+
"""Information about the file involved in the lineage relationship."""
|
|
3893
|
+
|
|
3894
|
+
model_info: Optional[ExternalLineageModelVersionInfo] = None
|
|
3895
|
+
"""Information about the model version involved in the lineage relationship."""
|
|
3896
|
+
|
|
3897
|
+
table_info: Optional[ExternalLineageTableInfo] = None
|
|
3898
|
+
"""Information about the table involved in the lineage relationship."""
|
|
3899
|
+
|
|
3900
|
+
def as_dict(self) -> dict:
|
|
3901
|
+
"""Serializes the ExternalLineageInfo into a dictionary suitable for use as a JSON request body."""
|
|
3902
|
+
body = {}
|
|
3903
|
+
if self.external_lineage_info:
|
|
3904
|
+
body["external_lineage_info"] = self.external_lineage_info.as_dict()
|
|
3905
|
+
if self.external_metadata_info:
|
|
3906
|
+
body["external_metadata_info"] = self.external_metadata_info.as_dict()
|
|
3907
|
+
if self.file_info:
|
|
3908
|
+
body["file_info"] = self.file_info.as_dict()
|
|
3909
|
+
if self.model_info:
|
|
3910
|
+
body["model_info"] = self.model_info.as_dict()
|
|
3911
|
+
if self.table_info:
|
|
3912
|
+
body["table_info"] = self.table_info.as_dict()
|
|
3913
|
+
return body
|
|
3914
|
+
|
|
3915
|
+
def as_shallow_dict(self) -> dict:
|
|
3916
|
+
"""Serializes the ExternalLineageInfo into a shallow dictionary of its immediate attributes."""
|
|
3917
|
+
body = {}
|
|
3918
|
+
if self.external_lineage_info:
|
|
3919
|
+
body["external_lineage_info"] = self.external_lineage_info
|
|
3920
|
+
if self.external_metadata_info:
|
|
3921
|
+
body["external_metadata_info"] = self.external_metadata_info
|
|
3922
|
+
if self.file_info:
|
|
3923
|
+
body["file_info"] = self.file_info
|
|
3924
|
+
if self.model_info:
|
|
3925
|
+
body["model_info"] = self.model_info
|
|
3926
|
+
if self.table_info:
|
|
3927
|
+
body["table_info"] = self.table_info
|
|
3928
|
+
return body
|
|
3929
|
+
|
|
3930
|
+
@classmethod
|
|
3931
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageInfo:
|
|
3932
|
+
"""Deserializes the ExternalLineageInfo from a dictionary."""
|
|
3933
|
+
return cls(
|
|
3934
|
+
external_lineage_info=_from_dict(d, "external_lineage_info", ExternalLineageRelationshipInfo),
|
|
3935
|
+
external_metadata_info=_from_dict(d, "external_metadata_info", ExternalLineageExternalMetadataInfo),
|
|
3936
|
+
file_info=_from_dict(d, "file_info", ExternalLineageFileInfo),
|
|
3937
|
+
model_info=_from_dict(d, "model_info", ExternalLineageModelVersionInfo),
|
|
3938
|
+
table_info=_from_dict(d, "table_info", ExternalLineageTableInfo),
|
|
3939
|
+
)
|
|
3940
|
+
|
|
3941
|
+
|
|
3942
|
+
@dataclass
|
|
3943
|
+
class ExternalLineageModelVersion:
|
|
3944
|
+
name: Optional[str] = None
|
|
3945
|
+
|
|
3946
|
+
version: Optional[str] = None
|
|
3947
|
+
|
|
3948
|
+
def as_dict(self) -> dict:
|
|
3949
|
+
"""Serializes the ExternalLineageModelVersion into a dictionary suitable for use as a JSON request body."""
|
|
3950
|
+
body = {}
|
|
3951
|
+
if self.name is not None:
|
|
3952
|
+
body["name"] = self.name
|
|
3953
|
+
if self.version is not None:
|
|
3954
|
+
body["version"] = self.version
|
|
3955
|
+
return body
|
|
3956
|
+
|
|
3957
|
+
def as_shallow_dict(self) -> dict:
|
|
3958
|
+
"""Serializes the ExternalLineageModelVersion into a shallow dictionary of its immediate attributes."""
|
|
3959
|
+
body = {}
|
|
3960
|
+
if self.name is not None:
|
|
3961
|
+
body["name"] = self.name
|
|
3962
|
+
if self.version is not None:
|
|
3963
|
+
body["version"] = self.version
|
|
3964
|
+
return body
|
|
3965
|
+
|
|
3966
|
+
@classmethod
|
|
3967
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageModelVersion:
|
|
3968
|
+
"""Deserializes the ExternalLineageModelVersion from a dictionary."""
|
|
3969
|
+
return cls(name=d.get("name", None), version=d.get("version", None))
|
|
3970
|
+
|
|
3971
|
+
|
|
3972
|
+
@dataclass
|
|
3973
|
+
class ExternalLineageModelVersionInfo:
|
|
3974
|
+
"""Represents the model version information in the lineage event."""
|
|
3975
|
+
|
|
3976
|
+
event_time: Optional[str] = None
|
|
3977
|
+
"""Timestamp of the lineage event."""
|
|
3978
|
+
|
|
3979
|
+
model_name: Optional[str] = None
|
|
3980
|
+
"""Name of the model."""
|
|
3981
|
+
|
|
3982
|
+
version: Optional[int] = None
|
|
3983
|
+
"""Version number of the model."""
|
|
3984
|
+
|
|
3985
|
+
def as_dict(self) -> dict:
|
|
3986
|
+
"""Serializes the ExternalLineageModelVersionInfo into a dictionary suitable for use as a JSON request body."""
|
|
3987
|
+
body = {}
|
|
3988
|
+
if self.event_time is not None:
|
|
3989
|
+
body["event_time"] = self.event_time
|
|
3990
|
+
if self.model_name is not None:
|
|
3991
|
+
body["model_name"] = self.model_name
|
|
3992
|
+
if self.version is not None:
|
|
3993
|
+
body["version"] = self.version
|
|
3994
|
+
return body
|
|
3995
|
+
|
|
3996
|
+
def as_shallow_dict(self) -> dict:
|
|
3997
|
+
"""Serializes the ExternalLineageModelVersionInfo into a shallow dictionary of its immediate attributes."""
|
|
3998
|
+
body = {}
|
|
3999
|
+
if self.event_time is not None:
|
|
4000
|
+
body["event_time"] = self.event_time
|
|
4001
|
+
if self.model_name is not None:
|
|
4002
|
+
body["model_name"] = self.model_name
|
|
4003
|
+
if self.version is not None:
|
|
4004
|
+
body["version"] = self.version
|
|
4005
|
+
return body
|
|
4006
|
+
|
|
4007
|
+
@classmethod
|
|
4008
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageModelVersionInfo:
|
|
4009
|
+
"""Deserializes the ExternalLineageModelVersionInfo from a dictionary."""
|
|
4010
|
+
return cls(
|
|
4011
|
+
event_time=d.get("event_time", None), model_name=d.get("model_name", None), version=d.get("version", None)
|
|
4012
|
+
)
|
|
4013
|
+
|
|
4014
|
+
|
|
4015
|
+
@dataclass
|
|
4016
|
+
class ExternalLineageObject:
|
|
4017
|
+
external_metadata: Optional[ExternalLineageExternalMetadata] = None
|
|
4018
|
+
|
|
4019
|
+
model_version: Optional[ExternalLineageModelVersion] = None
|
|
4020
|
+
|
|
4021
|
+
path: Optional[ExternalLineagePath] = None
|
|
4022
|
+
|
|
4023
|
+
table: Optional[ExternalLineageTable] = None
|
|
4024
|
+
|
|
4025
|
+
def as_dict(self) -> dict:
|
|
4026
|
+
"""Serializes the ExternalLineageObject into a dictionary suitable for use as a JSON request body."""
|
|
4027
|
+
body = {}
|
|
4028
|
+
if self.external_metadata:
|
|
4029
|
+
body["external_metadata"] = self.external_metadata.as_dict()
|
|
4030
|
+
if self.model_version:
|
|
4031
|
+
body["model_version"] = self.model_version.as_dict()
|
|
4032
|
+
if self.path:
|
|
4033
|
+
body["path"] = self.path.as_dict()
|
|
4034
|
+
if self.table:
|
|
4035
|
+
body["table"] = self.table.as_dict()
|
|
4036
|
+
return body
|
|
4037
|
+
|
|
4038
|
+
def as_shallow_dict(self) -> dict:
|
|
4039
|
+
"""Serializes the ExternalLineageObject into a shallow dictionary of its immediate attributes."""
|
|
4040
|
+
body = {}
|
|
4041
|
+
if self.external_metadata:
|
|
4042
|
+
body["external_metadata"] = self.external_metadata
|
|
4043
|
+
if self.model_version:
|
|
4044
|
+
body["model_version"] = self.model_version
|
|
4045
|
+
if self.path:
|
|
4046
|
+
body["path"] = self.path
|
|
4047
|
+
if self.table:
|
|
4048
|
+
body["table"] = self.table
|
|
4049
|
+
return body
|
|
4050
|
+
|
|
4051
|
+
@classmethod
|
|
4052
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageObject:
|
|
4053
|
+
"""Deserializes the ExternalLineageObject from a dictionary."""
|
|
4054
|
+
return cls(
|
|
4055
|
+
external_metadata=_from_dict(d, "external_metadata", ExternalLineageExternalMetadata),
|
|
4056
|
+
model_version=_from_dict(d, "model_version", ExternalLineageModelVersion),
|
|
4057
|
+
path=_from_dict(d, "path", ExternalLineagePath),
|
|
4058
|
+
table=_from_dict(d, "table", ExternalLineageTable),
|
|
4059
|
+
)
|
|
4060
|
+
|
|
4061
|
+
|
|
4062
|
+
@dataclass
|
|
4063
|
+
class ExternalLineagePath:
|
|
4064
|
+
url: Optional[str] = None
|
|
4065
|
+
|
|
4066
|
+
def as_dict(self) -> dict:
|
|
4067
|
+
"""Serializes the ExternalLineagePath into a dictionary suitable for use as a JSON request body."""
|
|
4068
|
+
body = {}
|
|
4069
|
+
if self.url is not None:
|
|
4070
|
+
body["url"] = self.url
|
|
4071
|
+
return body
|
|
4072
|
+
|
|
4073
|
+
def as_shallow_dict(self) -> dict:
|
|
4074
|
+
"""Serializes the ExternalLineagePath into a shallow dictionary of its immediate attributes."""
|
|
4075
|
+
body = {}
|
|
4076
|
+
if self.url is not None:
|
|
4077
|
+
body["url"] = self.url
|
|
4078
|
+
return body
|
|
4079
|
+
|
|
4080
|
+
@classmethod
|
|
4081
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineagePath:
|
|
4082
|
+
"""Deserializes the ExternalLineagePath from a dictionary."""
|
|
4083
|
+
return cls(url=d.get("url", None))
|
|
4084
|
+
|
|
4085
|
+
|
|
4086
|
+
@dataclass
|
|
4087
|
+
class ExternalLineageRelationship:
|
|
4088
|
+
source: ExternalLineageObject
|
|
4089
|
+
"""Source object of the external lineage relationship."""
|
|
4090
|
+
|
|
4091
|
+
target: ExternalLineageObject
|
|
4092
|
+
"""Target object of the external lineage relationship."""
|
|
4093
|
+
|
|
4094
|
+
columns: Optional[List[ColumnRelationship]] = None
|
|
4095
|
+
"""List of column relationships between source and target objects."""
|
|
4096
|
+
|
|
4097
|
+
id: Optional[str] = None
|
|
4098
|
+
"""Unique identifier of the external lineage relationship."""
|
|
4099
|
+
|
|
4100
|
+
properties: Optional[Dict[str, str]] = None
|
|
4101
|
+
"""Key-value properties associated with the external lineage relationship."""
|
|
4102
|
+
|
|
4103
|
+
def as_dict(self) -> dict:
|
|
4104
|
+
"""Serializes the ExternalLineageRelationship into a dictionary suitable for use as a JSON request body."""
|
|
4105
|
+
body = {}
|
|
4106
|
+
if self.columns:
|
|
4107
|
+
body["columns"] = [v.as_dict() for v in self.columns]
|
|
4108
|
+
if self.id is not None:
|
|
4109
|
+
body["id"] = self.id
|
|
4110
|
+
if self.properties:
|
|
4111
|
+
body["properties"] = self.properties
|
|
4112
|
+
if self.source:
|
|
4113
|
+
body["source"] = self.source.as_dict()
|
|
4114
|
+
if self.target:
|
|
4115
|
+
body["target"] = self.target.as_dict()
|
|
4116
|
+
return body
|
|
4117
|
+
|
|
4118
|
+
def as_shallow_dict(self) -> dict:
|
|
4119
|
+
"""Serializes the ExternalLineageRelationship into a shallow dictionary of its immediate attributes."""
|
|
4120
|
+
body = {}
|
|
4121
|
+
if self.columns:
|
|
4122
|
+
body["columns"] = self.columns
|
|
4123
|
+
if self.id is not None:
|
|
4124
|
+
body["id"] = self.id
|
|
4125
|
+
if self.properties:
|
|
4126
|
+
body["properties"] = self.properties
|
|
4127
|
+
if self.source:
|
|
4128
|
+
body["source"] = self.source
|
|
4129
|
+
if self.target:
|
|
4130
|
+
body["target"] = self.target
|
|
4131
|
+
return body
|
|
4132
|
+
|
|
4133
|
+
@classmethod
|
|
4134
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageRelationship:
|
|
4135
|
+
"""Deserializes the ExternalLineageRelationship from a dictionary."""
|
|
4136
|
+
return cls(
|
|
4137
|
+
columns=_repeated_dict(d, "columns", ColumnRelationship),
|
|
4138
|
+
id=d.get("id", None),
|
|
4139
|
+
properties=d.get("properties", None),
|
|
4140
|
+
source=_from_dict(d, "source", ExternalLineageObject),
|
|
4141
|
+
target=_from_dict(d, "target", ExternalLineageObject),
|
|
4142
|
+
)
|
|
4143
|
+
|
|
4144
|
+
|
|
4145
|
+
@dataclass
|
|
4146
|
+
class ExternalLineageRelationshipInfo:
|
|
4147
|
+
source: ExternalLineageObject
|
|
4148
|
+
"""Source object of the external lineage relationship."""
|
|
4149
|
+
|
|
4150
|
+
target: ExternalLineageObject
|
|
4151
|
+
"""Target object of the external lineage relationship."""
|
|
4152
|
+
|
|
4153
|
+
columns: Optional[List[ColumnRelationship]] = None
|
|
4154
|
+
"""List of column relationships between source and target objects."""
|
|
4155
|
+
|
|
4156
|
+
id: Optional[str] = None
|
|
4157
|
+
"""Unique identifier of the external lineage relationship."""
|
|
4158
|
+
|
|
4159
|
+
properties: Optional[Dict[str, str]] = None
|
|
4160
|
+
"""Key-value properties associated with the external lineage relationship."""
|
|
4161
|
+
|
|
4162
|
+
def as_dict(self) -> dict:
|
|
4163
|
+
"""Serializes the ExternalLineageRelationshipInfo into a dictionary suitable for use as a JSON request body."""
|
|
4164
|
+
body = {}
|
|
4165
|
+
if self.columns:
|
|
4166
|
+
body["columns"] = [v.as_dict() for v in self.columns]
|
|
4167
|
+
if self.id is not None:
|
|
4168
|
+
body["id"] = self.id
|
|
4169
|
+
if self.properties:
|
|
4170
|
+
body["properties"] = self.properties
|
|
4171
|
+
if self.source:
|
|
4172
|
+
body["source"] = self.source.as_dict()
|
|
4173
|
+
if self.target:
|
|
4174
|
+
body["target"] = self.target.as_dict()
|
|
4175
|
+
return body
|
|
4176
|
+
|
|
4177
|
+
def as_shallow_dict(self) -> dict:
|
|
4178
|
+
"""Serializes the ExternalLineageRelationshipInfo into a shallow dictionary of its immediate attributes."""
|
|
4179
|
+
body = {}
|
|
4180
|
+
if self.columns:
|
|
4181
|
+
body["columns"] = self.columns
|
|
4182
|
+
if self.id is not None:
|
|
4183
|
+
body["id"] = self.id
|
|
4184
|
+
if self.properties:
|
|
4185
|
+
body["properties"] = self.properties
|
|
4186
|
+
if self.source:
|
|
4187
|
+
body["source"] = self.source
|
|
4188
|
+
if self.target:
|
|
4189
|
+
body["target"] = self.target
|
|
4190
|
+
return body
|
|
4191
|
+
|
|
4192
|
+
@classmethod
|
|
4193
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageRelationshipInfo:
|
|
4194
|
+
"""Deserializes the ExternalLineageRelationshipInfo from a dictionary."""
|
|
3498
4195
|
return cls(
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
4196
|
+
columns=_repeated_dict(d, "columns", ColumnRelationship),
|
|
4197
|
+
id=d.get("id", None),
|
|
4198
|
+
properties=d.get("properties", None),
|
|
4199
|
+
source=_from_dict(d, "source", ExternalLineageObject),
|
|
4200
|
+
target=_from_dict(d, "target", ExternalLineageObject),
|
|
3502
4201
|
)
|
|
3503
4202
|
|
|
3504
4203
|
|
|
3505
4204
|
@dataclass
|
|
3506
|
-
class
|
|
4205
|
+
class ExternalLineageTable:
|
|
4206
|
+
name: Optional[str] = None
|
|
4207
|
+
|
|
3507
4208
|
def as_dict(self) -> dict:
|
|
3508
|
-
"""Serializes the
|
|
4209
|
+
"""Serializes the ExternalLineageTable into a dictionary suitable for use as a JSON request body."""
|
|
3509
4210
|
body = {}
|
|
4211
|
+
if self.name is not None:
|
|
4212
|
+
body["name"] = self.name
|
|
3510
4213
|
return body
|
|
3511
4214
|
|
|
3512
4215
|
def as_shallow_dict(self) -> dict:
|
|
3513
|
-
"""Serializes the
|
|
4216
|
+
"""Serializes the ExternalLineageTable into a shallow dictionary of its immediate attributes."""
|
|
3514
4217
|
body = {}
|
|
4218
|
+
if self.name is not None:
|
|
4219
|
+
body["name"] = self.name
|
|
3515
4220
|
return body
|
|
3516
4221
|
|
|
3517
4222
|
@classmethod
|
|
3518
|
-
def from_dict(cls, d: Dict[str, Any]) ->
|
|
3519
|
-
"""Deserializes the
|
|
3520
|
-
return cls()
|
|
4223
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageTable:
|
|
4224
|
+
"""Deserializes the ExternalLineageTable from a dictionary."""
|
|
4225
|
+
return cls(name=d.get("name", None))
|
|
3521
4226
|
|
|
3522
4227
|
|
|
3523
4228
|
@dataclass
|
|
3524
|
-
class
|
|
3525
|
-
"""
|
|
4229
|
+
class ExternalLineageTableInfo:
|
|
4230
|
+
"""Represents the table information in the lineage event."""
|
|
3526
4231
|
|
|
3527
|
-
|
|
3528
|
-
"""
|
|
4232
|
+
catalog_name: Optional[str] = None
|
|
4233
|
+
"""Name of Catalog."""
|
|
4234
|
+
|
|
4235
|
+
event_time: Optional[str] = None
|
|
4236
|
+
"""Timestamp of the lineage event."""
|
|
4237
|
+
|
|
4238
|
+
name: Optional[str] = None
|
|
4239
|
+
"""Name of Table."""
|
|
4240
|
+
|
|
4241
|
+
schema_name: Optional[str] = None
|
|
4242
|
+
"""Name of Schema."""
|
|
3529
4243
|
|
|
3530
4244
|
def as_dict(self) -> dict:
|
|
3531
|
-
"""Serializes the
|
|
4245
|
+
"""Serializes the ExternalLineageTableInfo into a dictionary suitable for use as a JSON request body."""
|
|
3532
4246
|
body = {}
|
|
3533
|
-
if self.
|
|
3534
|
-
body["
|
|
4247
|
+
if self.catalog_name is not None:
|
|
4248
|
+
body["catalog_name"] = self.catalog_name
|
|
4249
|
+
if self.event_time is not None:
|
|
4250
|
+
body["event_time"] = self.event_time
|
|
4251
|
+
if self.name is not None:
|
|
4252
|
+
body["name"] = self.name
|
|
4253
|
+
if self.schema_name is not None:
|
|
4254
|
+
body["schema_name"] = self.schema_name
|
|
3535
4255
|
return body
|
|
3536
4256
|
|
|
3537
4257
|
def as_shallow_dict(self) -> dict:
|
|
3538
|
-
"""Serializes the
|
|
4258
|
+
"""Serializes the ExternalLineageTableInfo into a shallow dictionary of its immediate attributes."""
|
|
3539
4259
|
body = {}
|
|
3540
|
-
if self.
|
|
3541
|
-
body["
|
|
4260
|
+
if self.catalog_name is not None:
|
|
4261
|
+
body["catalog_name"] = self.catalog_name
|
|
4262
|
+
if self.event_time is not None:
|
|
4263
|
+
body["event_time"] = self.event_time
|
|
4264
|
+
if self.name is not None:
|
|
4265
|
+
body["name"] = self.name
|
|
4266
|
+
if self.schema_name is not None:
|
|
4267
|
+
body["schema_name"] = self.schema_name
|
|
3542
4268
|
return body
|
|
3543
4269
|
|
|
3544
4270
|
@classmethod
|
|
3545
|
-
def from_dict(cls, d: Dict[str, Any]) ->
|
|
3546
|
-
"""Deserializes the
|
|
3547
|
-
return cls(
|
|
4271
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageTableInfo:
|
|
4272
|
+
"""Deserializes the ExternalLineageTableInfo from a dictionary."""
|
|
4273
|
+
return cls(
|
|
4274
|
+
catalog_name=d.get("catalog_name", None),
|
|
4275
|
+
event_time=d.get("event_time", None),
|
|
4276
|
+
name=d.get("name", None),
|
|
4277
|
+
schema_name=d.get("schema_name", None),
|
|
4278
|
+
)
|
|
3548
4279
|
|
|
3549
4280
|
|
|
3550
4281
|
@dataclass
|
|
@@ -3569,10 +4300,9 @@ class ExternalLocationInfo:
|
|
|
3569
4300
|
"""Name of the storage credential used with this location."""
|
|
3570
4301
|
|
|
3571
4302
|
enable_file_events: Optional[bool] = None
|
|
3572
|
-
"""
|
|
4303
|
+
"""Whether to enable file events on this external location."""
|
|
3573
4304
|
|
|
3574
4305
|
encryption_details: Optional[EncryptionDetails] = None
|
|
3575
|
-
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
3576
4306
|
|
|
3577
4307
|
fallback: Optional[bool] = None
|
|
3578
4308
|
"""Indicates whether fallback mode is enabled for this external location. When fallback mode is
|
|
@@ -3580,7 +4310,7 @@ class ExternalLocationInfo:
|
|
|
3580
4310
|
sufficient."""
|
|
3581
4311
|
|
|
3582
4312
|
file_event_queue: Optional[FileEventQueue] = None
|
|
3583
|
-
"""
|
|
4313
|
+
"""File event queue settings."""
|
|
3584
4314
|
|
|
3585
4315
|
isolation_mode: Optional[IsolationMode] = None
|
|
3586
4316
|
|
|
@@ -3712,6 +4442,137 @@ class ExternalLocationInfo:
|
|
|
3712
4442
|
)
|
|
3713
4443
|
|
|
3714
4444
|
|
|
4445
|
+
@dataclass
|
|
4446
|
+
class ExternalMetadata:
|
|
4447
|
+
name: str
|
|
4448
|
+
"""Name of the external metadata object."""
|
|
4449
|
+
|
|
4450
|
+
system_type: SystemType
|
|
4451
|
+
"""Type of external system."""
|
|
4452
|
+
|
|
4453
|
+
entity_type: str
|
|
4454
|
+
"""Type of entity within the external system."""
|
|
4455
|
+
|
|
4456
|
+
columns: Optional[List[str]] = None
|
|
4457
|
+
"""List of columns associated with the external metadata object."""
|
|
4458
|
+
|
|
4459
|
+
create_time: Optional[str] = None
|
|
4460
|
+
"""Time at which this external metadata object was created."""
|
|
4461
|
+
|
|
4462
|
+
created_by: Optional[str] = None
|
|
4463
|
+
"""Username of external metadata object creator."""
|
|
4464
|
+
|
|
4465
|
+
description: Optional[str] = None
|
|
4466
|
+
"""User-provided free-form text description."""
|
|
4467
|
+
|
|
4468
|
+
id: Optional[str] = None
|
|
4469
|
+
"""Unique identifier of the external metadata object."""
|
|
4470
|
+
|
|
4471
|
+
metastore_id: Optional[str] = None
|
|
4472
|
+
"""Unique identifier of parent metastore."""
|
|
4473
|
+
|
|
4474
|
+
owner: Optional[str] = None
|
|
4475
|
+
"""Owner of the external metadata object."""
|
|
4476
|
+
|
|
4477
|
+
properties: Optional[Dict[str, str]] = None
|
|
4478
|
+
"""A map of key-value properties attached to the external metadata object."""
|
|
4479
|
+
|
|
4480
|
+
update_time: Optional[str] = None
|
|
4481
|
+
"""Time at which this external metadata object was last modified."""
|
|
4482
|
+
|
|
4483
|
+
updated_by: Optional[str] = None
|
|
4484
|
+
"""Username of user who last modified external metadata object."""
|
|
4485
|
+
|
|
4486
|
+
url: Optional[str] = None
|
|
4487
|
+
"""URL associated with the external metadata object."""
|
|
4488
|
+
|
|
4489
|
+
def as_dict(self) -> dict:
|
|
4490
|
+
"""Serializes the ExternalMetadata into a dictionary suitable for use as a JSON request body."""
|
|
4491
|
+
body = {}
|
|
4492
|
+
if self.columns:
|
|
4493
|
+
body["columns"] = [v for v in self.columns]
|
|
4494
|
+
if self.create_time is not None:
|
|
4495
|
+
body["create_time"] = self.create_time
|
|
4496
|
+
if self.created_by is not None:
|
|
4497
|
+
body["created_by"] = self.created_by
|
|
4498
|
+
if self.description is not None:
|
|
4499
|
+
body["description"] = self.description
|
|
4500
|
+
if self.entity_type is not None:
|
|
4501
|
+
body["entity_type"] = self.entity_type
|
|
4502
|
+
if self.id is not None:
|
|
4503
|
+
body["id"] = self.id
|
|
4504
|
+
if self.metastore_id is not None:
|
|
4505
|
+
body["metastore_id"] = self.metastore_id
|
|
4506
|
+
if self.name is not None:
|
|
4507
|
+
body["name"] = self.name
|
|
4508
|
+
if self.owner is not None:
|
|
4509
|
+
body["owner"] = self.owner
|
|
4510
|
+
if self.properties:
|
|
4511
|
+
body["properties"] = self.properties
|
|
4512
|
+
if self.system_type is not None:
|
|
4513
|
+
body["system_type"] = self.system_type.value
|
|
4514
|
+
if self.update_time is not None:
|
|
4515
|
+
body["update_time"] = self.update_time
|
|
4516
|
+
if self.updated_by is not None:
|
|
4517
|
+
body["updated_by"] = self.updated_by
|
|
4518
|
+
if self.url is not None:
|
|
4519
|
+
body["url"] = self.url
|
|
4520
|
+
return body
|
|
4521
|
+
|
|
4522
|
+
def as_shallow_dict(self) -> dict:
|
|
4523
|
+
"""Serializes the ExternalMetadata into a shallow dictionary of its immediate attributes."""
|
|
4524
|
+
body = {}
|
|
4525
|
+
if self.columns:
|
|
4526
|
+
body["columns"] = self.columns
|
|
4527
|
+
if self.create_time is not None:
|
|
4528
|
+
body["create_time"] = self.create_time
|
|
4529
|
+
if self.created_by is not None:
|
|
4530
|
+
body["created_by"] = self.created_by
|
|
4531
|
+
if self.description is not None:
|
|
4532
|
+
body["description"] = self.description
|
|
4533
|
+
if self.entity_type is not None:
|
|
4534
|
+
body["entity_type"] = self.entity_type
|
|
4535
|
+
if self.id is not None:
|
|
4536
|
+
body["id"] = self.id
|
|
4537
|
+
if self.metastore_id is not None:
|
|
4538
|
+
body["metastore_id"] = self.metastore_id
|
|
4539
|
+
if self.name is not None:
|
|
4540
|
+
body["name"] = self.name
|
|
4541
|
+
if self.owner is not None:
|
|
4542
|
+
body["owner"] = self.owner
|
|
4543
|
+
if self.properties:
|
|
4544
|
+
body["properties"] = self.properties
|
|
4545
|
+
if self.system_type is not None:
|
|
4546
|
+
body["system_type"] = self.system_type
|
|
4547
|
+
if self.update_time is not None:
|
|
4548
|
+
body["update_time"] = self.update_time
|
|
4549
|
+
if self.updated_by is not None:
|
|
4550
|
+
body["updated_by"] = self.updated_by
|
|
4551
|
+
if self.url is not None:
|
|
4552
|
+
body["url"] = self.url
|
|
4553
|
+
return body
|
|
4554
|
+
|
|
4555
|
+
@classmethod
|
|
4556
|
+
def from_dict(cls, d: Dict[str, Any]) -> ExternalMetadata:
|
|
4557
|
+
"""Deserializes the ExternalMetadata from a dictionary."""
|
|
4558
|
+
return cls(
|
|
4559
|
+
columns=d.get("columns", None),
|
|
4560
|
+
create_time=d.get("create_time", None),
|
|
4561
|
+
created_by=d.get("created_by", None),
|
|
4562
|
+
description=d.get("description", None),
|
|
4563
|
+
entity_type=d.get("entity_type", None),
|
|
4564
|
+
id=d.get("id", None),
|
|
4565
|
+
metastore_id=d.get("metastore_id", None),
|
|
4566
|
+
name=d.get("name", None),
|
|
4567
|
+
owner=d.get("owner", None),
|
|
4568
|
+
properties=d.get("properties", None),
|
|
4569
|
+
system_type=_enum(d, "system_type", SystemType),
|
|
4570
|
+
update_time=d.get("update_time", None),
|
|
4571
|
+
updated_by=d.get("updated_by", None),
|
|
4572
|
+
url=d.get("url", None),
|
|
4573
|
+
)
|
|
4574
|
+
|
|
4575
|
+
|
|
3715
4576
|
@dataclass
|
|
3716
4577
|
class FailedStatus:
|
|
3717
4578
|
"""Detailed status of an online table. Shown if the online table is in the OFFLINE_FAILED or the
|
|
@@ -3828,6 +4689,9 @@ class ForeignKeyConstraint:
|
|
|
3828
4689
|
parent_columns: List[str]
|
|
3829
4690
|
"""Column names for this constraint."""
|
|
3830
4691
|
|
|
4692
|
+
rely: Optional[bool] = None
|
|
4693
|
+
"""True if the constraint is RELY, false or unset if NORELY."""
|
|
4694
|
+
|
|
3831
4695
|
def as_dict(self) -> dict:
|
|
3832
4696
|
"""Serializes the ForeignKeyConstraint into a dictionary suitable for use as a JSON request body."""
|
|
3833
4697
|
body = {}
|
|
@@ -3839,6 +4703,8 @@ class ForeignKeyConstraint:
|
|
|
3839
4703
|
body["parent_columns"] = [v for v in self.parent_columns]
|
|
3840
4704
|
if self.parent_table is not None:
|
|
3841
4705
|
body["parent_table"] = self.parent_table
|
|
4706
|
+
if self.rely is not None:
|
|
4707
|
+
body["rely"] = self.rely
|
|
3842
4708
|
return body
|
|
3843
4709
|
|
|
3844
4710
|
def as_shallow_dict(self) -> dict:
|
|
@@ -3852,6 +4718,8 @@ class ForeignKeyConstraint:
|
|
|
3852
4718
|
body["parent_columns"] = self.parent_columns
|
|
3853
4719
|
if self.parent_table is not None:
|
|
3854
4720
|
body["parent_table"] = self.parent_table
|
|
4721
|
+
if self.rely is not None:
|
|
4722
|
+
body["rely"] = self.rely
|
|
3855
4723
|
return body
|
|
3856
4724
|
|
|
3857
4725
|
@classmethod
|
|
@@ -3862,6 +4730,7 @@ class ForeignKeyConstraint:
|
|
|
3862
4730
|
name=d.get("name", None),
|
|
3863
4731
|
parent_columns=d.get("parent_columns", None),
|
|
3864
4732
|
parent_table=d.get("parent_table", None),
|
|
4733
|
+
rely=d.get("rely", None),
|
|
3865
4734
|
)
|
|
3866
4735
|
|
|
3867
4736
|
|
|
@@ -4205,10 +5074,8 @@ class FunctionParameterInfo:
|
|
|
4205
5074
|
"""Default value of the parameter."""
|
|
4206
5075
|
|
|
4207
5076
|
parameter_mode: Optional[FunctionParameterMode] = None
|
|
4208
|
-
"""The mode of the function parameter."""
|
|
4209
5077
|
|
|
4210
5078
|
parameter_type: Optional[FunctionParameterType] = None
|
|
4211
|
-
"""The type of function parameter."""
|
|
4212
5079
|
|
|
4213
5080
|
type_interval_type: Optional[str] = None
|
|
4214
5081
|
"""Format of IntervalType."""
|
|
@@ -4371,7 +5238,7 @@ class GcpPubsub:
|
|
|
4371
5238
|
|
|
4372
5239
|
subscription_name: Optional[str] = None
|
|
4373
5240
|
"""The Pub/Sub subscription name in the format projects/{project}/subscriptions/{subscription name}
|
|
4374
|
-
|
|
5241
|
+
Required for provided_pubsub."""
|
|
4375
5242
|
|
|
4376
5243
|
def as_dict(self) -> dict:
|
|
4377
5244
|
"""Serializes the GcpPubsub into a dictionary suitable for use as a JSON request body."""
|
|
@@ -4463,10 +5330,8 @@ class GenerateTemporaryServiceCredentialRequest:
|
|
|
4463
5330
|
"""The name of the service credential used to generate a temporary credential"""
|
|
4464
5331
|
|
|
4465
5332
|
azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None
|
|
4466
|
-
"""The Azure cloud options to customize the requested temporary credential"""
|
|
4467
5333
|
|
|
4468
5334
|
gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None
|
|
4469
|
-
"""The GCP cloud options to customize the requested temporary credential"""
|
|
4470
5335
|
|
|
4471
5336
|
def as_dict(self) -> dict:
|
|
4472
5337
|
"""Serializes the GenerateTemporaryServiceCredentialRequest into a dictionary suitable for use as a JSON request body."""
|
|
@@ -4537,29 +5402,18 @@ class GenerateTemporaryTableCredentialRequest:
|
|
|
4537
5402
|
@dataclass
|
|
4538
5403
|
class GenerateTemporaryTableCredentialResponse:
|
|
4539
5404
|
aws_temp_credentials: Optional[AwsCredentials] = None
|
|
4540
|
-
"""AWS temporary credentials for API authentication. Read more at
|
|
4541
|
-
https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
|
|
4542
5405
|
|
|
4543
5406
|
azure_aad: Optional[AzureActiveDirectoryToken] = None
|
|
4544
|
-
"""Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
|
|
4545
|
-
Identity. Read more at
|
|
4546
|
-
https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
|
|
4547
5407
|
|
|
4548
5408
|
azure_user_delegation_sas: Optional[AzureUserDelegationSas] = None
|
|
4549
|
-
"""Azure temporary credentials for API authentication. Read more at
|
|
4550
|
-
https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas"""
|
|
4551
5409
|
|
|
4552
5410
|
expiration_time: Optional[int] = None
|
|
4553
5411
|
"""Server time when the credential will expire, in epoch milliseconds. The API client is advised to
|
|
4554
5412
|
cache the credential given this expiration time."""
|
|
4555
5413
|
|
|
4556
5414
|
gcp_oauth_token: Optional[GcpOauthToken] = None
|
|
4557
|
-
"""GCP temporary credentials for API authentication. Read more at
|
|
4558
|
-
https://developers.google.com/identity/protocols/oauth2/service-account"""
|
|
4559
5415
|
|
|
4560
5416
|
r2_temp_credentials: Optional[R2Credentials] = None
|
|
4561
|
-
"""R2 temporary credentials for API authentication. Read more at
|
|
4562
|
-
https://developers.cloudflare.com/r2/api/s3/tokens/."""
|
|
4563
5417
|
|
|
4564
5418
|
url: Optional[str] = None
|
|
4565
5419
|
"""The URL of the storage path accessible by the temporary credential."""
|
|
@@ -4921,6 +5775,12 @@ class IsolationMode(Enum):
|
|
|
4921
5775
|
ISOLATION_MODE_OPEN = "ISOLATION_MODE_OPEN"
|
|
4922
5776
|
|
|
4923
5777
|
|
|
5778
|
+
class LineageDirection(Enum):
|
|
5779
|
+
|
|
5780
|
+
DOWNSTREAM = "DOWNSTREAM"
|
|
5781
|
+
UPSTREAM = "UPSTREAM"
|
|
5782
|
+
|
|
5783
|
+
|
|
4924
5784
|
@dataclass
|
|
4925
5785
|
class ListAccountMetastoreAssignmentsResponse:
|
|
4926
5786
|
"""The list of workspaces to which the given metastore is assigned."""
|
|
@@ -5074,6 +5934,39 @@ class ListCredentialsResponse:
|
|
|
5074
5934
|
)
|
|
5075
5935
|
|
|
5076
5936
|
|
|
5937
|
+
@dataclass
|
|
5938
|
+
class ListExternalLineageRelationshipsResponse:
|
|
5939
|
+
external_lineage_relationships: Optional[List[ExternalLineageInfo]] = None
|
|
5940
|
+
|
|
5941
|
+
next_page_token: Optional[str] = None
|
|
5942
|
+
|
|
5943
|
+
def as_dict(self) -> dict:
|
|
5944
|
+
"""Serializes the ListExternalLineageRelationshipsResponse into a dictionary suitable for use as a JSON request body."""
|
|
5945
|
+
body = {}
|
|
5946
|
+
if self.external_lineage_relationships:
|
|
5947
|
+
body["external_lineage_relationships"] = [v.as_dict() for v in self.external_lineage_relationships]
|
|
5948
|
+
if self.next_page_token is not None:
|
|
5949
|
+
body["next_page_token"] = self.next_page_token
|
|
5950
|
+
return body
|
|
5951
|
+
|
|
5952
|
+
def as_shallow_dict(self) -> dict:
|
|
5953
|
+
"""Serializes the ListExternalLineageRelationshipsResponse into a shallow dictionary of its immediate attributes."""
|
|
5954
|
+
body = {}
|
|
5955
|
+
if self.external_lineage_relationships:
|
|
5956
|
+
body["external_lineage_relationships"] = self.external_lineage_relationships
|
|
5957
|
+
if self.next_page_token is not None:
|
|
5958
|
+
body["next_page_token"] = self.next_page_token
|
|
5959
|
+
return body
|
|
5960
|
+
|
|
5961
|
+
@classmethod
|
|
5962
|
+
def from_dict(cls, d: Dict[str, Any]) -> ListExternalLineageRelationshipsResponse:
|
|
5963
|
+
"""Deserializes the ListExternalLineageRelationshipsResponse from a dictionary."""
|
|
5964
|
+
return cls(
|
|
5965
|
+
external_lineage_relationships=_repeated_dict(d, "external_lineage_relationships", ExternalLineageInfo),
|
|
5966
|
+
next_page_token=d.get("next_page_token", None),
|
|
5967
|
+
)
|
|
5968
|
+
|
|
5969
|
+
|
|
5077
5970
|
@dataclass
|
|
5078
5971
|
class ListExternalLocationsResponse:
|
|
5079
5972
|
external_locations: Optional[List[ExternalLocationInfo]] = None
|
|
@@ -5110,6 +6003,39 @@ class ListExternalLocationsResponse:
|
|
|
5110
6003
|
)
|
|
5111
6004
|
|
|
5112
6005
|
|
|
6006
|
+
@dataclass
|
|
6007
|
+
class ListExternalMetadataResponse:
|
|
6008
|
+
external_metadata: Optional[List[ExternalMetadata]] = None
|
|
6009
|
+
|
|
6010
|
+
next_page_token: Optional[str] = None
|
|
6011
|
+
|
|
6012
|
+
def as_dict(self) -> dict:
|
|
6013
|
+
"""Serializes the ListExternalMetadataResponse into a dictionary suitable for use as a JSON request body."""
|
|
6014
|
+
body = {}
|
|
6015
|
+
if self.external_metadata:
|
|
6016
|
+
body["external_metadata"] = [v.as_dict() for v in self.external_metadata]
|
|
6017
|
+
if self.next_page_token is not None:
|
|
6018
|
+
body["next_page_token"] = self.next_page_token
|
|
6019
|
+
return body
|
|
6020
|
+
|
|
6021
|
+
def as_shallow_dict(self) -> dict:
|
|
6022
|
+
"""Serializes the ListExternalMetadataResponse into a shallow dictionary of its immediate attributes."""
|
|
6023
|
+
body = {}
|
|
6024
|
+
if self.external_metadata:
|
|
6025
|
+
body["external_metadata"] = self.external_metadata
|
|
6026
|
+
if self.next_page_token is not None:
|
|
6027
|
+
body["next_page_token"] = self.next_page_token
|
|
6028
|
+
return body
|
|
6029
|
+
|
|
6030
|
+
@classmethod
|
|
6031
|
+
def from_dict(cls, d: Dict[str, Any]) -> ListExternalMetadataResponse:
|
|
6032
|
+
"""Deserializes the ListExternalMetadataResponse from a dictionary."""
|
|
6033
|
+
return cls(
|
|
6034
|
+
external_metadata=_repeated_dict(d, "external_metadata", ExternalMetadata),
|
|
6035
|
+
next_page_token=d.get("next_page_token", None),
|
|
6036
|
+
)
|
|
6037
|
+
|
|
6038
|
+
|
|
5113
6039
|
@dataclass
|
|
5114
6040
|
class ListFunctionsResponse:
|
|
5115
6041
|
functions: Optional[List[FunctionInfo]] = None
|
|
@@ -6098,7 +7024,6 @@ class MonitorInfo:
|
|
|
6098
7024
|
"""The full name of the table to monitor. Format: __catalog_name__.__schema_name__.__table_name__."""
|
|
6099
7025
|
|
|
6100
7026
|
status: MonitorInfoStatus
|
|
6101
|
-
"""The status of the monitor."""
|
|
6102
7027
|
|
|
6103
7028
|
monitor_version: str
|
|
6104
7029
|
"""The version of the monitor config (e.g. 1,2,3). If negative, the monitor may be corrupted."""
|
|
@@ -6784,26 +7709,18 @@ class OnlineTableStatus:
|
|
|
6784
7709
|
"""Status of an online table."""
|
|
6785
7710
|
|
|
6786
7711
|
continuous_update_status: Optional[ContinuousUpdateStatus] = None
|
|
6787
|
-
"""Detailed status of an online table. Shown if the online table is in the ONLINE_CONTINUOUS_UPDATE
|
|
6788
|
-
or the ONLINE_UPDATING_PIPELINE_RESOURCES state."""
|
|
6789
7712
|
|
|
6790
7713
|
detailed_state: Optional[OnlineTableState] = None
|
|
6791
7714
|
"""The state of the online table."""
|
|
6792
7715
|
|
|
6793
7716
|
failed_status: Optional[FailedStatus] = None
|
|
6794
|
-
"""Detailed status of an online table. Shown if the online table is in the OFFLINE_FAILED or the
|
|
6795
|
-
ONLINE_PIPELINE_FAILED state."""
|
|
6796
7717
|
|
|
6797
7718
|
message: Optional[str] = None
|
|
6798
7719
|
"""A text description of the current state of the online table."""
|
|
6799
7720
|
|
|
6800
7721
|
provisioning_status: Optional[ProvisioningStatus] = None
|
|
6801
|
-
"""Detailed status of an online table. Shown if the online table is in the
|
|
6802
|
-
PROVISIONING_PIPELINE_RESOURCES or the PROVISIONING_INITIAL_SNAPSHOT state."""
|
|
6803
7722
|
|
|
6804
7723
|
triggered_update_status: Optional[TriggeredUpdateStatus] = None
|
|
6805
|
-
"""Detailed status of an online table. Shown if the online table is in the ONLINE_TRIGGERED_UPDATE
|
|
6806
|
-
or the ONLINE_NO_PENDING_UPDATE state."""
|
|
6807
7724
|
|
|
6808
7725
|
def as_dict(self) -> dict:
|
|
6809
7726
|
"""Serializes the OnlineTableStatus into a dictionary suitable for use as a JSON request body."""
|
|
@@ -6840,18 +7757,181 @@ class OnlineTableStatus:
|
|
|
6840
7757
|
return body
|
|
6841
7758
|
|
|
6842
7759
|
@classmethod
|
|
6843
|
-
def from_dict(cls, d: Dict[str, Any]) -> OnlineTableStatus:
|
|
6844
|
-
"""Deserializes the OnlineTableStatus from a dictionary."""
|
|
7760
|
+
def from_dict(cls, d: Dict[str, Any]) -> OnlineTableStatus:
|
|
7761
|
+
"""Deserializes the OnlineTableStatus from a dictionary."""
|
|
7762
|
+
return cls(
|
|
7763
|
+
continuous_update_status=_from_dict(d, "continuous_update_status", ContinuousUpdateStatus),
|
|
7764
|
+
detailed_state=_enum(d, "detailed_state", OnlineTableState),
|
|
7765
|
+
failed_status=_from_dict(d, "failed_status", FailedStatus),
|
|
7766
|
+
message=d.get("message", None),
|
|
7767
|
+
provisioning_status=_from_dict(d, "provisioning_status", ProvisioningStatus),
|
|
7768
|
+
triggered_update_status=_from_dict(d, "triggered_update_status", TriggeredUpdateStatus),
|
|
7769
|
+
)
|
|
7770
|
+
|
|
7771
|
+
|
|
7772
|
+
@dataclass
|
|
7773
|
+
class OptionSpec:
|
|
7774
|
+
"""Spec of an allowed option on a securable kind and its attributes. This is mostly used by UI to
|
|
7775
|
+
provide user friendly hints and descriptions in order to facilitate the securable creation
|
|
7776
|
+
process."""
|
|
7777
|
+
|
|
7778
|
+
allowed_values: Optional[List[str]] = None
|
|
7779
|
+
"""For drop down / radio button selections, UI will want to know the possible input values, it can
|
|
7780
|
+
also be used by other option types to limit input selections."""
|
|
7781
|
+
|
|
7782
|
+
default_value: Optional[str] = None
|
|
7783
|
+
"""The default value of the option, for example, value '443' for 'port' option."""
|
|
7784
|
+
|
|
7785
|
+
description: Optional[str] = None
|
|
7786
|
+
"""A concise user facing description of what the input value of this option should look like."""
|
|
7787
|
+
|
|
7788
|
+
hint: Optional[str] = None
|
|
7789
|
+
"""The hint is used on the UI to suggest what the input value can possibly be like, for example:
|
|
7790
|
+
example.com for 'host' option. Unlike default value, it will not be applied automatically
|
|
7791
|
+
without user input."""
|
|
7792
|
+
|
|
7793
|
+
is_copiable: Optional[bool] = None
|
|
7794
|
+
"""Indicates whether an option should be displayed with copy button on the UI."""
|
|
7795
|
+
|
|
7796
|
+
is_creatable: Optional[bool] = None
|
|
7797
|
+
"""Indicates whether an option can be provided by users in the create/update path of an entity."""
|
|
7798
|
+
|
|
7799
|
+
is_hidden: Optional[bool] = None
|
|
7800
|
+
"""Is the option value not user settable and is thus not shown on the UI."""
|
|
7801
|
+
|
|
7802
|
+
is_loggable: Optional[bool] = None
|
|
7803
|
+
"""Specifies whether this option is safe to log, i.e. no sensitive information."""
|
|
7804
|
+
|
|
7805
|
+
is_required: Optional[bool] = None
|
|
7806
|
+
"""Is the option required."""
|
|
7807
|
+
|
|
7808
|
+
is_secret: Optional[bool] = None
|
|
7809
|
+
"""Is the option value considered secret and thus redacted on the UI."""
|
|
7810
|
+
|
|
7811
|
+
is_updatable: Optional[bool] = None
|
|
7812
|
+
"""Is the option updatable by users."""
|
|
7813
|
+
|
|
7814
|
+
name: Optional[str] = None
|
|
7815
|
+
"""The unique name of the option."""
|
|
7816
|
+
|
|
7817
|
+
oauth_stage: Optional[OptionSpecOauthStage] = None
|
|
7818
|
+
"""Specifies when the option value is displayed on the UI within the OAuth flow."""
|
|
7819
|
+
|
|
7820
|
+
type: Optional[OptionSpecOptionType] = None
|
|
7821
|
+
"""The type of the option."""
|
|
7822
|
+
|
|
7823
|
+
def as_dict(self) -> dict:
|
|
7824
|
+
"""Serializes the OptionSpec into a dictionary suitable for use as a JSON request body."""
|
|
7825
|
+
body = {}
|
|
7826
|
+
if self.allowed_values:
|
|
7827
|
+
body["allowed_values"] = [v for v in self.allowed_values]
|
|
7828
|
+
if self.default_value is not None:
|
|
7829
|
+
body["default_value"] = self.default_value
|
|
7830
|
+
if self.description is not None:
|
|
7831
|
+
body["description"] = self.description
|
|
7832
|
+
if self.hint is not None:
|
|
7833
|
+
body["hint"] = self.hint
|
|
7834
|
+
if self.is_copiable is not None:
|
|
7835
|
+
body["is_copiable"] = self.is_copiable
|
|
7836
|
+
if self.is_creatable is not None:
|
|
7837
|
+
body["is_creatable"] = self.is_creatable
|
|
7838
|
+
if self.is_hidden is not None:
|
|
7839
|
+
body["is_hidden"] = self.is_hidden
|
|
7840
|
+
if self.is_loggable is not None:
|
|
7841
|
+
body["is_loggable"] = self.is_loggable
|
|
7842
|
+
if self.is_required is not None:
|
|
7843
|
+
body["is_required"] = self.is_required
|
|
7844
|
+
if self.is_secret is not None:
|
|
7845
|
+
body["is_secret"] = self.is_secret
|
|
7846
|
+
if self.is_updatable is not None:
|
|
7847
|
+
body["is_updatable"] = self.is_updatable
|
|
7848
|
+
if self.name is not None:
|
|
7849
|
+
body["name"] = self.name
|
|
7850
|
+
if self.oauth_stage is not None:
|
|
7851
|
+
body["oauth_stage"] = self.oauth_stage.value
|
|
7852
|
+
if self.type is not None:
|
|
7853
|
+
body["type"] = self.type.value
|
|
7854
|
+
return body
|
|
7855
|
+
|
|
7856
|
+
def as_shallow_dict(self) -> dict:
|
|
7857
|
+
"""Serializes the OptionSpec into a shallow dictionary of its immediate attributes."""
|
|
7858
|
+
body = {}
|
|
7859
|
+
if self.allowed_values:
|
|
7860
|
+
body["allowed_values"] = self.allowed_values
|
|
7861
|
+
if self.default_value is not None:
|
|
7862
|
+
body["default_value"] = self.default_value
|
|
7863
|
+
if self.description is not None:
|
|
7864
|
+
body["description"] = self.description
|
|
7865
|
+
if self.hint is not None:
|
|
7866
|
+
body["hint"] = self.hint
|
|
7867
|
+
if self.is_copiable is not None:
|
|
7868
|
+
body["is_copiable"] = self.is_copiable
|
|
7869
|
+
if self.is_creatable is not None:
|
|
7870
|
+
body["is_creatable"] = self.is_creatable
|
|
7871
|
+
if self.is_hidden is not None:
|
|
7872
|
+
body["is_hidden"] = self.is_hidden
|
|
7873
|
+
if self.is_loggable is not None:
|
|
7874
|
+
body["is_loggable"] = self.is_loggable
|
|
7875
|
+
if self.is_required is not None:
|
|
7876
|
+
body["is_required"] = self.is_required
|
|
7877
|
+
if self.is_secret is not None:
|
|
7878
|
+
body["is_secret"] = self.is_secret
|
|
7879
|
+
if self.is_updatable is not None:
|
|
7880
|
+
body["is_updatable"] = self.is_updatable
|
|
7881
|
+
if self.name is not None:
|
|
7882
|
+
body["name"] = self.name
|
|
7883
|
+
if self.oauth_stage is not None:
|
|
7884
|
+
body["oauth_stage"] = self.oauth_stage
|
|
7885
|
+
if self.type is not None:
|
|
7886
|
+
body["type"] = self.type
|
|
7887
|
+
return body
|
|
7888
|
+
|
|
7889
|
+
@classmethod
|
|
7890
|
+
def from_dict(cls, d: Dict[str, Any]) -> OptionSpec:
|
|
7891
|
+
"""Deserializes the OptionSpec from a dictionary."""
|
|
6845
7892
|
return cls(
|
|
6846
|
-
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6851
|
-
|
|
7893
|
+
allowed_values=d.get("allowed_values", None),
|
|
7894
|
+
default_value=d.get("default_value", None),
|
|
7895
|
+
description=d.get("description", None),
|
|
7896
|
+
hint=d.get("hint", None),
|
|
7897
|
+
is_copiable=d.get("is_copiable", None),
|
|
7898
|
+
is_creatable=d.get("is_creatable", None),
|
|
7899
|
+
is_hidden=d.get("is_hidden", None),
|
|
7900
|
+
is_loggable=d.get("is_loggable", None),
|
|
7901
|
+
is_required=d.get("is_required", None),
|
|
7902
|
+
is_secret=d.get("is_secret", None),
|
|
7903
|
+
is_updatable=d.get("is_updatable", None),
|
|
7904
|
+
name=d.get("name", None),
|
|
7905
|
+
oauth_stage=_enum(d, "oauth_stage", OptionSpecOauthStage),
|
|
7906
|
+
type=_enum(d, "type", OptionSpecOptionType),
|
|
6852
7907
|
)
|
|
6853
7908
|
|
|
6854
7909
|
|
|
7910
|
+
class OptionSpecOauthStage(Enum):
|
|
7911
|
+
"""During the OAuth flow, specifies which stage the option should be displayed in the UI.
|
|
7912
|
+
OAUTH_STAGE_UNSPECIFIED is the default value for options unrelated to the OAuth flow.
|
|
7913
|
+
BEFORE_AUTHORIZATION_CODE corresponds to options necessary to initiate the OAuth process.
|
|
7914
|
+
BEFORE_ACCESS_TOKEN corresponds to options that are necessary to create a foreign connection,
|
|
7915
|
+
but that should be displayed after the authorization code has already been received."""
|
|
7916
|
+
|
|
7917
|
+
BEFORE_ACCESS_TOKEN = "BEFORE_ACCESS_TOKEN"
|
|
7918
|
+
BEFORE_AUTHORIZATION_CODE = "BEFORE_AUTHORIZATION_CODE"
|
|
7919
|
+
|
|
7920
|
+
|
|
7921
|
+
class OptionSpecOptionType(Enum):
|
|
7922
|
+
"""Type of the option, we purposely follow JavaScript types so that the UI can map the options to
|
|
7923
|
+
JS types. https://www.w3schools.com/js/js_datatypes.asp Enum is a special case that it's just
|
|
7924
|
+
string with selections."""
|
|
7925
|
+
|
|
7926
|
+
OPTION_BIGINT = "OPTION_BIGINT"
|
|
7927
|
+
OPTION_BOOLEAN = "OPTION_BOOLEAN"
|
|
7928
|
+
OPTION_ENUM = "OPTION_ENUM"
|
|
7929
|
+
OPTION_MULTILINE_STRING = "OPTION_MULTILINE_STRING"
|
|
7930
|
+
OPTION_NUMBER = "OPTION_NUMBER"
|
|
7931
|
+
OPTION_SERVICE_CREDENTIAL = "OPTION_SERVICE_CREDENTIAL"
|
|
7932
|
+
OPTION_STRING = "OPTION_STRING"
|
|
7933
|
+
|
|
7934
|
+
|
|
6855
7935
|
@dataclass
|
|
6856
7936
|
class PermissionsChange:
|
|
6857
7937
|
add: Optional[List[Privilege]] = None
|
|
@@ -6965,6 +8045,9 @@ class PrimaryKeyConstraint:
|
|
|
6965
8045
|
child_columns: List[str]
|
|
6966
8046
|
"""Column names for this constraint."""
|
|
6967
8047
|
|
|
8048
|
+
rely: Optional[bool] = None
|
|
8049
|
+
"""True if the constraint is RELY, false or unset if NORELY."""
|
|
8050
|
+
|
|
6968
8051
|
timeseries_columns: Optional[List[str]] = None
|
|
6969
8052
|
"""Column names that represent a timeseries."""
|
|
6970
8053
|
|
|
@@ -6975,6 +8058,8 @@ class PrimaryKeyConstraint:
|
|
|
6975
8058
|
body["child_columns"] = [v for v in self.child_columns]
|
|
6976
8059
|
if self.name is not None:
|
|
6977
8060
|
body["name"] = self.name
|
|
8061
|
+
if self.rely is not None:
|
|
8062
|
+
body["rely"] = self.rely
|
|
6978
8063
|
if self.timeseries_columns:
|
|
6979
8064
|
body["timeseries_columns"] = [v for v in self.timeseries_columns]
|
|
6980
8065
|
return body
|
|
@@ -6986,6 +8071,8 @@ class PrimaryKeyConstraint:
|
|
|
6986
8071
|
body["child_columns"] = self.child_columns
|
|
6987
8072
|
if self.name is not None:
|
|
6988
8073
|
body["name"] = self.name
|
|
8074
|
+
if self.rely is not None:
|
|
8075
|
+
body["rely"] = self.rely
|
|
6989
8076
|
if self.timeseries_columns:
|
|
6990
8077
|
body["timeseries_columns"] = self.timeseries_columns
|
|
6991
8078
|
return body
|
|
@@ -6996,6 +8083,7 @@ class PrimaryKeyConstraint:
|
|
|
6996
8083
|
return cls(
|
|
6997
8084
|
child_columns=d.get("child_columns", None),
|
|
6998
8085
|
name=d.get("name", None),
|
|
8086
|
+
rely=d.get("rely", None),
|
|
6999
8087
|
timeseries_columns=d.get("timeseries_columns", None),
|
|
7000
8088
|
)
|
|
7001
8089
|
|
|
@@ -7056,7 +8144,8 @@ class Privilege(Enum):
|
|
|
7056
8144
|
@dataclass
|
|
7057
8145
|
class PrivilegeAssignment:
|
|
7058
8146
|
principal: Optional[str] = None
|
|
7059
|
-
"""The principal (user email address or group name).
|
|
8147
|
+
"""The principal (user email address or group name). For deleted principals, `principal` is empty
|
|
8148
|
+
while `principal_id` is populated."""
|
|
7060
8149
|
|
|
7061
8150
|
privileges: Optional[List[Privilege]] = None
|
|
7062
8151
|
"""The privileges assigned to the principal."""
|
|
@@ -7662,6 +8751,138 @@ class SchemaInfo:
|
|
|
7662
8751
|
)
|
|
7663
8752
|
|
|
7664
8753
|
|
|
8754
|
+
class SecurableKind(Enum):
|
|
8755
|
+
"""Latest kind: TABLE_DELTA_ICEBERG_DELTASHARING = 252; Next id:253"""
|
|
8756
|
+
|
|
8757
|
+
TABLE_DB_STORAGE = "TABLE_DB_STORAGE"
|
|
8758
|
+
TABLE_DELTA = "TABLE_DELTA"
|
|
8759
|
+
TABLE_DELTASHARING = "TABLE_DELTASHARING"
|
|
8760
|
+
TABLE_DELTASHARING_MUTABLE = "TABLE_DELTASHARING_MUTABLE"
|
|
8761
|
+
TABLE_DELTA_EXTERNAL = "TABLE_DELTA_EXTERNAL"
|
|
8762
|
+
TABLE_DELTA_ICEBERG_DELTASHARING = "TABLE_DELTA_ICEBERG_DELTASHARING"
|
|
8763
|
+
TABLE_DELTA_ICEBERG_MANAGED = "TABLE_DELTA_ICEBERG_MANAGED"
|
|
8764
|
+
TABLE_DELTA_UNIFORM_HUDI_EXTERNAL = "TABLE_DELTA_UNIFORM_HUDI_EXTERNAL"
|
|
8765
|
+
TABLE_DELTA_UNIFORM_ICEBERG_EXTERNAL = "TABLE_DELTA_UNIFORM_ICEBERG_EXTERNAL"
|
|
8766
|
+
TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_EXTERNAL = (
|
|
8767
|
+
"TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_EXTERNAL"
|
|
8768
|
+
)
|
|
8769
|
+
TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_MANAGED = (
|
|
8770
|
+
"TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_MANAGED"
|
|
8771
|
+
)
|
|
8772
|
+
TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_SNOWFLAKE = "TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_SNOWFLAKE"
|
|
8773
|
+
TABLE_EXTERNAL = "TABLE_EXTERNAL"
|
|
8774
|
+
TABLE_FEATURE_STORE = "TABLE_FEATURE_STORE"
|
|
8775
|
+
TABLE_FEATURE_STORE_EXTERNAL = "TABLE_FEATURE_STORE_EXTERNAL"
|
|
8776
|
+
TABLE_FOREIGN_BIGQUERY = "TABLE_FOREIGN_BIGQUERY"
|
|
8777
|
+
TABLE_FOREIGN_DATABRICKS = "TABLE_FOREIGN_DATABRICKS"
|
|
8778
|
+
TABLE_FOREIGN_DELTASHARING = "TABLE_FOREIGN_DELTASHARING"
|
|
8779
|
+
TABLE_FOREIGN_HIVE_METASTORE = "TABLE_FOREIGN_HIVE_METASTORE"
|
|
8780
|
+
TABLE_FOREIGN_HIVE_METASTORE_DBFS_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_EXTERNAL"
|
|
8781
|
+
TABLE_FOREIGN_HIVE_METASTORE_DBFS_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_MANAGED"
|
|
8782
|
+
TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_EXTERNAL = (
|
|
8783
|
+
"TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_EXTERNAL"
|
|
8784
|
+
)
|
|
8785
|
+
TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_MANAGED"
|
|
8786
|
+
TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW"
|
|
8787
|
+
TABLE_FOREIGN_HIVE_METASTORE_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_EXTERNAL"
|
|
8788
|
+
TABLE_FOREIGN_HIVE_METASTORE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_MANAGED"
|
|
8789
|
+
TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_EXTERNAL"
|
|
8790
|
+
TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_MANAGED"
|
|
8791
|
+
TABLE_FOREIGN_HIVE_METASTORE_VIEW = "TABLE_FOREIGN_HIVE_METASTORE_VIEW"
|
|
8792
|
+
TABLE_FOREIGN_MONGODB = "TABLE_FOREIGN_MONGODB"
|
|
8793
|
+
TABLE_FOREIGN_MYSQL = "TABLE_FOREIGN_MYSQL"
|
|
8794
|
+
TABLE_FOREIGN_NETSUITE = "TABLE_FOREIGN_NETSUITE"
|
|
8795
|
+
TABLE_FOREIGN_ORACLE = "TABLE_FOREIGN_ORACLE"
|
|
8796
|
+
TABLE_FOREIGN_POSTGRESQL = "TABLE_FOREIGN_POSTGRESQL"
|
|
8797
|
+
TABLE_FOREIGN_REDSHIFT = "TABLE_FOREIGN_REDSHIFT"
|
|
8798
|
+
TABLE_FOREIGN_SALESFORCE = "TABLE_FOREIGN_SALESFORCE"
|
|
8799
|
+
TABLE_FOREIGN_SALESFORCE_DATA_CLOUD = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD"
|
|
8800
|
+
TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING"
|
|
8801
|
+
TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING_VIEW = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING_VIEW"
|
|
8802
|
+
TABLE_FOREIGN_SNOWFLAKE = "TABLE_FOREIGN_SNOWFLAKE"
|
|
8803
|
+
TABLE_FOREIGN_SQLDW = "TABLE_FOREIGN_SQLDW"
|
|
8804
|
+
TABLE_FOREIGN_SQLSERVER = "TABLE_FOREIGN_SQLSERVER"
|
|
8805
|
+
TABLE_FOREIGN_TERADATA = "TABLE_FOREIGN_TERADATA"
|
|
8806
|
+
TABLE_FOREIGN_WORKDAY_RAAS = "TABLE_FOREIGN_WORKDAY_RAAS"
|
|
8807
|
+
TABLE_ICEBERG_UNIFORM_MANAGED = "TABLE_ICEBERG_UNIFORM_MANAGED"
|
|
8808
|
+
TABLE_INTERNAL = "TABLE_INTERNAL"
|
|
8809
|
+
TABLE_MANAGED_POSTGRESQL = "TABLE_MANAGED_POSTGRESQL"
|
|
8810
|
+
TABLE_MATERIALIZED_VIEW = "TABLE_MATERIALIZED_VIEW"
|
|
8811
|
+
TABLE_MATERIALIZED_VIEW_DELTASHARING = "TABLE_MATERIALIZED_VIEW_DELTASHARING"
|
|
8812
|
+
TABLE_METRIC_VIEW = "TABLE_METRIC_VIEW"
|
|
8813
|
+
TABLE_ONLINE_VECTOR_INDEX_DIRECT = "TABLE_ONLINE_VECTOR_INDEX_DIRECT"
|
|
8814
|
+
TABLE_ONLINE_VECTOR_INDEX_REPLICA = "TABLE_ONLINE_VECTOR_INDEX_REPLICA"
|
|
8815
|
+
TABLE_ONLINE_VIEW = "TABLE_ONLINE_VIEW"
|
|
8816
|
+
TABLE_STANDARD = "TABLE_STANDARD"
|
|
8817
|
+
TABLE_STREAMING_LIVE_TABLE = "TABLE_STREAMING_LIVE_TABLE"
|
|
8818
|
+
TABLE_STREAMING_LIVE_TABLE_DELTASHARING = "TABLE_STREAMING_LIVE_TABLE_DELTASHARING"
|
|
8819
|
+
TABLE_SYSTEM = "TABLE_SYSTEM"
|
|
8820
|
+
TABLE_SYSTEM_DELTASHARING = "TABLE_SYSTEM_DELTASHARING"
|
|
8821
|
+
TABLE_VIEW = "TABLE_VIEW"
|
|
8822
|
+
TABLE_VIEW_DELTASHARING = "TABLE_VIEW_DELTASHARING"
|
|
8823
|
+
|
|
8824
|
+
|
|
8825
|
+
@dataclass
|
|
8826
|
+
class SecurableKindManifest:
|
|
8827
|
+
"""Manifest of a specific securable kind."""
|
|
8828
|
+
|
|
8829
|
+
assignable_privileges: Optional[List[str]] = None
|
|
8830
|
+
"""Privileges that can be assigned to the securable."""
|
|
8831
|
+
|
|
8832
|
+
capabilities: Optional[List[str]] = None
|
|
8833
|
+
"""A list of capabilities in the securable kind."""
|
|
8834
|
+
|
|
8835
|
+
options: Optional[List[OptionSpec]] = None
|
|
8836
|
+
"""Detailed specs of allowed options."""
|
|
8837
|
+
|
|
8838
|
+
securable_kind: Optional[SecurableKind] = None
|
|
8839
|
+
"""Securable kind to get manifest of."""
|
|
8840
|
+
|
|
8841
|
+
securable_type: Optional[SecurableType] = None
|
|
8842
|
+
"""Securable Type of the kind."""
|
|
8843
|
+
|
|
8844
|
+
def as_dict(self) -> dict:
|
|
8845
|
+
"""Serializes the SecurableKindManifest into a dictionary suitable for use as a JSON request body."""
|
|
8846
|
+
body = {}
|
|
8847
|
+
if self.assignable_privileges:
|
|
8848
|
+
body["assignable_privileges"] = [v for v in self.assignable_privileges]
|
|
8849
|
+
if self.capabilities:
|
|
8850
|
+
body["capabilities"] = [v for v in self.capabilities]
|
|
8851
|
+
if self.options:
|
|
8852
|
+
body["options"] = [v.as_dict() for v in self.options]
|
|
8853
|
+
if self.securable_kind is not None:
|
|
8854
|
+
body["securable_kind"] = self.securable_kind.value
|
|
8855
|
+
if self.securable_type is not None:
|
|
8856
|
+
body["securable_type"] = self.securable_type.value
|
|
8857
|
+
return body
|
|
8858
|
+
|
|
8859
|
+
def as_shallow_dict(self) -> dict:
|
|
8860
|
+
"""Serializes the SecurableKindManifest into a shallow dictionary of its immediate attributes."""
|
|
8861
|
+
body = {}
|
|
8862
|
+
if self.assignable_privileges:
|
|
8863
|
+
body["assignable_privileges"] = self.assignable_privileges
|
|
8864
|
+
if self.capabilities:
|
|
8865
|
+
body["capabilities"] = self.capabilities
|
|
8866
|
+
if self.options:
|
|
8867
|
+
body["options"] = self.options
|
|
8868
|
+
if self.securable_kind is not None:
|
|
8869
|
+
body["securable_kind"] = self.securable_kind
|
|
8870
|
+
if self.securable_type is not None:
|
|
8871
|
+
body["securable_type"] = self.securable_type
|
|
8872
|
+
return body
|
|
8873
|
+
|
|
8874
|
+
@classmethod
|
|
8875
|
+
def from_dict(cls, d: Dict[str, Any]) -> SecurableKindManifest:
|
|
8876
|
+
"""Deserializes the SecurableKindManifest from a dictionary."""
|
|
8877
|
+
return cls(
|
|
8878
|
+
assignable_privileges=d.get("assignable_privileges", None),
|
|
8879
|
+
capabilities=d.get("capabilities", None),
|
|
8880
|
+
options=_repeated_dict(d, "options", OptionSpec),
|
|
8881
|
+
securable_kind=_enum(d, "securable_kind", SecurableKind),
|
|
8882
|
+
securable_type=_enum(d, "securable_type", SecurableType),
|
|
8883
|
+
)
|
|
8884
|
+
|
|
8885
|
+
|
|
7665
8886
|
class SecurableType(Enum):
|
|
7666
8887
|
"""The type of Unity Catalog securable."""
|
|
7667
8888
|
|
|
@@ -7681,7 +8902,6 @@ class SecurableType(Enum):
|
|
|
7681
8902
|
STAGING_TABLE = "STAGING_TABLE"
|
|
7682
8903
|
STORAGE_CREDENTIAL = "STORAGE_CREDENTIAL"
|
|
7683
8904
|
TABLE = "TABLE"
|
|
7684
|
-
UNKNOWN_SECURABLE_TYPE = "UNKNOWN_SECURABLE_TYPE"
|
|
7685
8905
|
VOLUME = "VOLUME"
|
|
7686
8906
|
|
|
7687
8907
|
|
|
@@ -8031,6 +9251,31 @@ class SystemSchemaInfo:
|
|
|
8031
9251
|
return cls(schema=d.get("schema", None), state=d.get("state", None))
|
|
8032
9252
|
|
|
8033
9253
|
|
|
9254
|
+
class SystemType(Enum):
|
|
9255
|
+
|
|
9256
|
+
AMAZON_REDSHIFT = "AMAZON_REDSHIFT"
|
|
9257
|
+
AZURE_SYNAPSE = "AZURE_SYNAPSE"
|
|
9258
|
+
CONFLUENT = "CONFLUENT"
|
|
9259
|
+
GOOGLE_BIGQUERY = "GOOGLE_BIGQUERY"
|
|
9260
|
+
KAFKA = "KAFKA"
|
|
9261
|
+
LOOKER = "LOOKER"
|
|
9262
|
+
MICROSOFT_FABRIC = "MICROSOFT_FABRIC"
|
|
9263
|
+
MICROSOFT_SQL_SERVER = "MICROSOFT_SQL_SERVER"
|
|
9264
|
+
MONGODB = "MONGODB"
|
|
9265
|
+
MYSQL = "MYSQL"
|
|
9266
|
+
ORACLE = "ORACLE"
|
|
9267
|
+
OTHER = "OTHER"
|
|
9268
|
+
POSTGRESQL = "POSTGRESQL"
|
|
9269
|
+
POWER_BI = "POWER_BI"
|
|
9270
|
+
SALESFORCE = "SALESFORCE"
|
|
9271
|
+
SAP = "SAP"
|
|
9272
|
+
SERVICENOW = "SERVICENOW"
|
|
9273
|
+
SNOWFLAKE = "SNOWFLAKE"
|
|
9274
|
+
TABLEAU = "TABLEAU"
|
|
9275
|
+
TERADATA = "TERADATA"
|
|
9276
|
+
WORKDAY = "WORKDAY"
|
|
9277
|
+
|
|
9278
|
+
|
|
8034
9279
|
@dataclass
|
|
8035
9280
|
class TableConstraint:
|
|
8036
9281
|
"""A table constraint, as defined by *one* of the following fields being set:
|
|
@@ -8155,7 +9400,6 @@ class TableInfo:
|
|
|
8155
9400
|
"""Unique ID of the Data Access Configuration to use with the table data."""
|
|
8156
9401
|
|
|
8157
9402
|
data_source_format: Optional[DataSourceFormat] = None
|
|
8158
|
-
"""Data source format"""
|
|
8159
9403
|
|
|
8160
9404
|
deleted_at: Optional[int] = None
|
|
8161
9405
|
"""Time at which this table was deleted, in epoch milliseconds. Field is omitted if table is not
|
|
@@ -8169,7 +9413,6 @@ class TableInfo:
|
|
|
8169
9413
|
enable_predictive_optimization: Optional[EnablePredictiveOptimization] = None
|
|
8170
9414
|
|
|
8171
9415
|
encryption_details: Optional[EncryptionDetails] = None
|
|
8172
|
-
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
8173
9416
|
|
|
8174
9417
|
full_name: Optional[str] = None
|
|
8175
9418
|
"""Full name of table, in form of __catalog_name__.__schema_name__.__table_name__"""
|
|
@@ -8195,6 +9438,9 @@ class TableInfo:
|
|
|
8195
9438
|
schema_name: Optional[str] = None
|
|
8196
9439
|
"""Name of parent schema relative to its parent catalog."""
|
|
8197
9440
|
|
|
9441
|
+
securable_kind_manifest: Optional[SecurableKindManifest] = None
|
|
9442
|
+
"""SecurableKindManifest of table, including capabilities the table has."""
|
|
9443
|
+
|
|
8198
9444
|
sql_path: Optional[str] = None
|
|
8199
9445
|
"""List of schemes whose objects can be referenced without qualification."""
|
|
8200
9446
|
|
|
@@ -8202,7 +9448,7 @@ class TableInfo:
|
|
|
8202
9448
|
"""Name of the storage credential, when a storage credential is configured for use with this table."""
|
|
8203
9449
|
|
|
8204
9450
|
storage_location: Optional[str] = None
|
|
8205
|
-
"""Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)"""
|
|
9451
|
+
"""Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)."""
|
|
8206
9452
|
|
|
8207
9453
|
table_constraints: Optional[List[TableConstraint]] = None
|
|
8208
9454
|
"""List of table constraints. Note: this field is not set in the output of the __listTables__ API."""
|
|
@@ -8275,6 +9521,8 @@ class TableInfo:
|
|
|
8275
9521
|
body["row_filter"] = self.row_filter.as_dict()
|
|
8276
9522
|
if self.schema_name is not None:
|
|
8277
9523
|
body["schema_name"] = self.schema_name
|
|
9524
|
+
if self.securable_kind_manifest:
|
|
9525
|
+
body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
|
|
8278
9526
|
if self.sql_path is not None:
|
|
8279
9527
|
body["sql_path"] = self.sql_path
|
|
8280
9528
|
if self.storage_credential_name is not None:
|
|
@@ -8344,6 +9592,8 @@ class TableInfo:
|
|
|
8344
9592
|
body["row_filter"] = self.row_filter
|
|
8345
9593
|
if self.schema_name is not None:
|
|
8346
9594
|
body["schema_name"] = self.schema_name
|
|
9595
|
+
if self.securable_kind_manifest:
|
|
9596
|
+
body["securable_kind_manifest"] = self.securable_kind_manifest
|
|
8347
9597
|
if self.sql_path is not None:
|
|
8348
9598
|
body["sql_path"] = self.sql_path
|
|
8349
9599
|
if self.storage_credential_name is not None:
|
|
@@ -8396,6 +9646,7 @@ class TableInfo:
|
|
|
8396
9646
|
properties=d.get("properties", None),
|
|
8397
9647
|
row_filter=_from_dict(d, "row_filter", TableRowFilter),
|
|
8398
9648
|
schema_name=d.get("schema_name", None),
|
|
9649
|
+
securable_kind_manifest=_from_dict(d, "securable_kind_manifest", SecurableKindManifest),
|
|
8399
9650
|
sql_path=d.get("sql_path", None),
|
|
8400
9651
|
storage_credential_name=d.get("storage_credential_name", None),
|
|
8401
9652
|
storage_location=d.get("storage_location", None),
|
|
@@ -8453,6 +9704,9 @@ class TableSummary:
|
|
|
8453
9704
|
full_name: Optional[str] = None
|
|
8454
9705
|
"""The full name of the table."""
|
|
8455
9706
|
|
|
9707
|
+
securable_kind_manifest: Optional[SecurableKindManifest] = None
|
|
9708
|
+
"""SecurableKindManifest of table, including capabilities the table has."""
|
|
9709
|
+
|
|
8456
9710
|
table_type: Optional[TableType] = None
|
|
8457
9711
|
|
|
8458
9712
|
def as_dict(self) -> dict:
|
|
@@ -8460,6 +9714,8 @@ class TableSummary:
|
|
|
8460
9714
|
body = {}
|
|
8461
9715
|
if self.full_name is not None:
|
|
8462
9716
|
body["full_name"] = self.full_name
|
|
9717
|
+
if self.securable_kind_manifest:
|
|
9718
|
+
body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
|
|
8463
9719
|
if self.table_type is not None:
|
|
8464
9720
|
body["table_type"] = self.table_type.value
|
|
8465
9721
|
return body
|
|
@@ -8469,6 +9725,8 @@ class TableSummary:
|
|
|
8469
9725
|
body = {}
|
|
8470
9726
|
if self.full_name is not None:
|
|
8471
9727
|
body["full_name"] = self.full_name
|
|
9728
|
+
if self.securable_kind_manifest:
|
|
9729
|
+
body["securable_kind_manifest"] = self.securable_kind_manifest
|
|
8472
9730
|
if self.table_type is not None:
|
|
8473
9731
|
body["table_type"] = self.table_type
|
|
8474
9732
|
return body
|
|
@@ -8476,7 +9734,11 @@ class TableSummary:
|
|
|
8476
9734
|
@classmethod
|
|
8477
9735
|
def from_dict(cls, d: Dict[str, Any]) -> TableSummary:
|
|
8478
9736
|
"""Deserializes the TableSummary from a dictionary."""
|
|
8479
|
-
return cls(
|
|
9737
|
+
return cls(
|
|
9738
|
+
full_name=d.get("full_name", None),
|
|
9739
|
+
securable_kind_manifest=_from_dict(d, "securable_kind_manifest", SecurableKindManifest),
|
|
9740
|
+
table_type=_enum(d, "table_type", TableType),
|
|
9741
|
+
)
|
|
8480
9742
|
|
|
8481
9743
|
|
|
8482
9744
|
class TableType(Enum):
|
|
@@ -8487,6 +9749,7 @@ class TableType(Enum):
|
|
|
8487
9749
|
MANAGED = "MANAGED"
|
|
8488
9750
|
MANAGED_SHALLOW_CLONE = "MANAGED_SHALLOW_CLONE"
|
|
8489
9751
|
MATERIALIZED_VIEW = "MATERIALIZED_VIEW"
|
|
9752
|
+
METRIC_VIEW = "METRIC_VIEW"
|
|
8490
9753
|
STREAMING_TABLE = "STREAMING_TABLE"
|
|
8491
9754
|
VIEW = "VIEW"
|
|
8492
9755
|
|
|
@@ -8526,21 +9789,14 @@ class TagKeyValue:
|
|
|
8526
9789
|
@dataclass
|
|
8527
9790
|
class TemporaryCredentials:
|
|
8528
9791
|
aws_temp_credentials: Optional[AwsCredentials] = None
|
|
8529
|
-
"""AWS temporary credentials for API authentication. Read more at
|
|
8530
|
-
https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
|
|
8531
9792
|
|
|
8532
9793
|
azure_aad: Optional[AzureActiveDirectoryToken] = None
|
|
8533
|
-
"""Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
|
|
8534
|
-
Identity. Read more at
|
|
8535
|
-
https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
|
|
8536
9794
|
|
|
8537
9795
|
expiration_time: Optional[int] = None
|
|
8538
9796
|
"""Server time when the credential will expire, in epoch milliseconds. The API client is advised to
|
|
8539
9797
|
cache the credential given this expiration time."""
|
|
8540
9798
|
|
|
8541
9799
|
gcp_oauth_token: Optional[GcpOauthToken] = None
|
|
8542
|
-
"""GCP temporary credentials for API authentication. Read more at
|
|
8543
|
-
https://developers.google.com/identity/protocols/oauth2/service-account"""
|
|
8544
9800
|
|
|
8545
9801
|
def as_dict(self) -> dict:
|
|
8546
9802
|
"""Serializes the TemporaryCredentials into a dictionary suitable for use as a JSON request body."""
|
|
@@ -8948,10 +10204,9 @@ class UpdateExternalLocation:
|
|
|
8948
10204
|
"""Name of the storage credential used with this location."""
|
|
8949
10205
|
|
|
8950
10206
|
enable_file_events: Optional[bool] = None
|
|
8951
|
-
"""
|
|
10207
|
+
"""Whether to enable file events on this external location."""
|
|
8952
10208
|
|
|
8953
10209
|
encryption_details: Optional[EncryptionDetails] = None
|
|
8954
|
-
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
8955
10210
|
|
|
8956
10211
|
fallback: Optional[bool] = None
|
|
8957
10212
|
"""Indicates whether fallback mode is enabled for this external location. When fallback mode is
|
|
@@ -8959,7 +10214,7 @@ class UpdateExternalLocation:
|
|
|
8959
10214
|
sufficient."""
|
|
8960
10215
|
|
|
8961
10216
|
file_event_queue: Optional[FileEventQueue] = None
|
|
8962
|
-
"""
|
|
10217
|
+
"""File event queue settings."""
|
|
8963
10218
|
|
|
8964
10219
|
force: Optional[bool] = None
|
|
8965
10220
|
"""Force update even if changing url invalidates dependent external tables or mounts."""
|
|
@@ -9517,6 +10772,65 @@ class UpdateRegisteredModelRequest:
|
|
|
9517
10772
|
)
|
|
9518
10773
|
|
|
9519
10774
|
|
|
10775
|
+
@dataclass
|
|
10776
|
+
class UpdateRequestExternalLineage:
|
|
10777
|
+
source: ExternalLineageObject
|
|
10778
|
+
"""Source object of the external lineage relationship."""
|
|
10779
|
+
|
|
10780
|
+
target: ExternalLineageObject
|
|
10781
|
+
"""Target object of the external lineage relationship."""
|
|
10782
|
+
|
|
10783
|
+
columns: Optional[List[ColumnRelationship]] = None
|
|
10784
|
+
"""List of column relationships between source and target objects."""
|
|
10785
|
+
|
|
10786
|
+
id: Optional[str] = None
|
|
10787
|
+
"""Unique identifier of the external lineage relationship."""
|
|
10788
|
+
|
|
10789
|
+
properties: Optional[Dict[str, str]] = None
|
|
10790
|
+
"""Key-value properties associated with the external lineage relationship."""
|
|
10791
|
+
|
|
10792
|
+
def as_dict(self) -> dict:
|
|
10793
|
+
"""Serializes the UpdateRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
|
|
10794
|
+
body = {}
|
|
10795
|
+
if self.columns:
|
|
10796
|
+
body["columns"] = [v.as_dict() for v in self.columns]
|
|
10797
|
+
if self.id is not None:
|
|
10798
|
+
body["id"] = self.id
|
|
10799
|
+
if self.properties:
|
|
10800
|
+
body["properties"] = self.properties
|
|
10801
|
+
if self.source:
|
|
10802
|
+
body["source"] = self.source.as_dict()
|
|
10803
|
+
if self.target:
|
|
10804
|
+
body["target"] = self.target.as_dict()
|
|
10805
|
+
return body
|
|
10806
|
+
|
|
10807
|
+
def as_shallow_dict(self) -> dict:
|
|
10808
|
+
"""Serializes the UpdateRequestExternalLineage into a shallow dictionary of its immediate attributes."""
|
|
10809
|
+
body = {}
|
|
10810
|
+
if self.columns:
|
|
10811
|
+
body["columns"] = self.columns
|
|
10812
|
+
if self.id is not None:
|
|
10813
|
+
body["id"] = self.id
|
|
10814
|
+
if self.properties:
|
|
10815
|
+
body["properties"] = self.properties
|
|
10816
|
+
if self.source:
|
|
10817
|
+
body["source"] = self.source
|
|
10818
|
+
if self.target:
|
|
10819
|
+
body["target"] = self.target
|
|
10820
|
+
return body
|
|
10821
|
+
|
|
10822
|
+
@classmethod
|
|
10823
|
+
def from_dict(cls, d: Dict[str, Any]) -> UpdateRequestExternalLineage:
|
|
10824
|
+
"""Deserializes the UpdateRequestExternalLineage from a dictionary."""
|
|
10825
|
+
return cls(
|
|
10826
|
+
columns=_repeated_dict(d, "columns", ColumnRelationship),
|
|
10827
|
+
id=d.get("id", None),
|
|
10828
|
+
properties=d.get("properties", None),
|
|
10829
|
+
source=_from_dict(d, "source", ExternalLineageObject),
|
|
10830
|
+
target=_from_dict(d, "target", ExternalLineageObject),
|
|
10831
|
+
)
|
|
10832
|
+
|
|
10833
|
+
|
|
9520
10834
|
@dataclass
|
|
9521
10835
|
class UpdateResponse:
|
|
9522
10836
|
def as_dict(self) -> dict:
|
|
@@ -9730,12 +11044,11 @@ class UpdateStorageCredential:
|
|
|
9730
11044
|
|
|
9731
11045
|
@dataclass
|
|
9732
11046
|
class UpdateTableRequest:
|
|
9733
|
-
"""Update a table owner."""
|
|
9734
|
-
|
|
9735
11047
|
full_name: Optional[str] = None
|
|
9736
11048
|
"""Full name of the table."""
|
|
9737
11049
|
|
|
9738
11050
|
owner: Optional[str] = None
|
|
11051
|
+
"""Username of current owner of table."""
|
|
9739
11052
|
|
|
9740
11053
|
def as_dict(self) -> dict:
|
|
9741
11054
|
"""Serializes the UpdateTableRequest into a dictionary suitable for use as a JSON request body."""
|
|
@@ -9939,16 +11252,13 @@ class ValidateCredentialRequest:
|
|
|
9939
11252
|
"""Next ID: 17"""
|
|
9940
11253
|
|
|
9941
11254
|
aws_iam_role: Optional[AwsIamRole] = None
|
|
9942
|
-
"""The AWS IAM role configuration"""
|
|
9943
11255
|
|
|
9944
11256
|
azure_managed_identity: Optional[AzureManagedIdentity] = None
|
|
9945
|
-
"""The Azure managed identity configuration."""
|
|
9946
11257
|
|
|
9947
11258
|
credential_name: Optional[str] = None
|
|
9948
11259
|
"""Required. The name of an existing credential or long-lived cloud credential to validate."""
|
|
9949
11260
|
|
|
9950
11261
|
databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
|
|
9951
|
-
"""GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
|
|
9952
11262
|
|
|
9953
11263
|
external_location_name: Optional[str] = None
|
|
9954
11264
|
"""The name of an existing external location to validate. Only applicable for storage credentials
|
|
@@ -10270,7 +11580,6 @@ class VolumeInfo:
|
|
|
10270
11580
|
"""The identifier of the user who created the volume"""
|
|
10271
11581
|
|
|
10272
11582
|
encryption_details: Optional[EncryptionDetails] = None
|
|
10273
|
-
"""Encryption options that apply to clients connecting to cloud storage."""
|
|
10274
11583
|
|
|
10275
11584
|
full_name: Optional[str] = None
|
|
10276
11585
|
"""The three-level (fully qualified) name of the volume"""
|
|
@@ -10299,11 +11608,6 @@ class VolumeInfo:
|
|
|
10299
11608
|
"""The unique identifier of the volume"""
|
|
10300
11609
|
|
|
10301
11610
|
volume_type: Optional[VolumeType] = None
|
|
10302
|
-
"""The type of the volume. An external volume is located in the specified external location. A
|
|
10303
|
-
managed volume is located in the default location which is specified by the parent schema, or
|
|
10304
|
-
the parent catalog, or the Metastore. [Learn more]
|
|
10305
|
-
|
|
10306
|
-
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
|
|
10307
11611
|
|
|
10308
11612
|
def as_dict(self) -> dict:
|
|
10309
11613
|
"""Serializes the VolumeInfo into a dictionary suitable for use as a JSON request body."""
|
|
@@ -10655,6 +11959,7 @@ class AccountMetastoresAPI:
|
|
|
10655
11959
|
def list(self) -> Iterator[MetastoreInfo]:
|
|
10656
11960
|
"""Gets all Unity Catalog metastores associated with an account specified by ID.
|
|
10657
11961
|
|
|
11962
|
+
|
|
10658
11963
|
:returns: Iterator over :class:`MetastoreInfo`
|
|
10659
11964
|
"""
|
|
10660
11965
|
|
|
@@ -11403,9 +12708,7 @@ class CredentialsAPI:
|
|
|
11403
12708
|
:param credential_name: str
|
|
11404
12709
|
The name of the service credential used to generate a temporary credential
|
|
11405
12710
|
:param azure_options: :class:`GenerateTemporaryServiceCredentialAzureOptions` (optional)
|
|
11406
|
-
The Azure cloud options to customize the requested temporary credential
|
|
11407
12711
|
:param gcp_options: :class:`GenerateTemporaryServiceCredentialGcpOptions` (optional)
|
|
11408
|
-
The GCP cloud options to customize the requested temporary credential
|
|
11409
12712
|
|
|
11410
12713
|
:returns: :class:`TemporaryCredentials`
|
|
11411
12714
|
"""
|
|
@@ -11595,13 +12898,10 @@ class CredentialsAPI:
|
|
|
11595
12898
|
metastore and the credential (e.g., **CREATE_EXTERNAL_LOCATION** when purpose is **STORAGE**).
|
|
11596
12899
|
|
|
11597
12900
|
:param aws_iam_role: :class:`AwsIamRole` (optional)
|
|
11598
|
-
The AWS IAM role configuration
|
|
11599
12901
|
:param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
|
|
11600
|
-
The Azure managed identity configuration.
|
|
11601
12902
|
:param credential_name: str (optional)
|
|
11602
12903
|
Required. The name of an existing credential or long-lived cloud credential to validate.
|
|
11603
12904
|
:param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
|
|
11604
|
-
GCP long-lived credential. Databricks-created Google Cloud Storage service account.
|
|
11605
12905
|
:param external_location_name: str (optional)
|
|
11606
12906
|
The name of an existing external location to validate. Only applicable for storage credentials
|
|
11607
12907
|
(purpose is **STORAGE**.)
|
|
@@ -11641,6 +12941,132 @@ class CredentialsAPI:
|
|
|
11641
12941
|
return ValidateCredentialResponse.from_dict(res)
|
|
11642
12942
|
|
|
11643
12943
|
|
|
12944
|
+
class ExternalLineageAPI:
|
|
12945
|
+
"""External Lineage APIs enable defining and managing lineage relationships between Databricks objects and
|
|
12946
|
+
external systems. These APIs allow users to capture data flows connecting Databricks tables, models, and
|
|
12947
|
+
file paths with external metadata objects.
|
|
12948
|
+
|
|
12949
|
+
With these APIs, users can create, update, delete, and list lineage relationships with support for
|
|
12950
|
+
column-level mappings and custom properties."""
|
|
12951
|
+
|
|
12952
|
+
def __init__(self, api_client):
|
|
12953
|
+
self._api = api_client
|
|
12954
|
+
|
|
12955
|
+
def create_external_lineage_relationship(
|
|
12956
|
+
self, external_lineage_relationship: CreateRequestExternalLineage
|
|
12957
|
+
) -> ExternalLineageRelationship:
|
|
12958
|
+
"""Creates an external lineage relationship between a Databricks or external metadata object and another
|
|
12959
|
+
external metadata object.
|
|
12960
|
+
|
|
12961
|
+
:param external_lineage_relationship: :class:`CreateRequestExternalLineage`
|
|
12962
|
+
|
|
12963
|
+
:returns: :class:`ExternalLineageRelationship`
|
|
12964
|
+
"""
|
|
12965
|
+
body = external_lineage_relationship.as_dict()
|
|
12966
|
+
headers = {
|
|
12967
|
+
"Accept": "application/json",
|
|
12968
|
+
"Content-Type": "application/json",
|
|
12969
|
+
}
|
|
12970
|
+
|
|
12971
|
+
res = self._api.do("POST", "/api/2.0/lineage-tracking/external-lineage", body=body, headers=headers)
|
|
12972
|
+
return ExternalLineageRelationship.from_dict(res)
|
|
12973
|
+
|
|
12974
|
+
def delete_external_lineage_relationship(self, external_lineage_relationship: DeleteRequestExternalLineage):
|
|
12975
|
+
"""Deletes an external lineage relationship between a Databricks or external metadata object and another
|
|
12976
|
+
external metadata object.
|
|
12977
|
+
|
|
12978
|
+
:param external_lineage_relationship: :class:`DeleteRequestExternalLineage`
|
|
12979
|
+
|
|
12980
|
+
|
|
12981
|
+
"""
|
|
12982
|
+
|
|
12983
|
+
query = {}
|
|
12984
|
+
if external_lineage_relationship is not None:
|
|
12985
|
+
query["external_lineage_relationship"] = external_lineage_relationship.as_dict()
|
|
12986
|
+
headers = {
|
|
12987
|
+
"Accept": "application/json",
|
|
12988
|
+
}
|
|
12989
|
+
|
|
12990
|
+
self._api.do("DELETE", "/api/2.0/lineage-tracking/external-lineage", query=query, headers=headers)
|
|
12991
|
+
|
|
12992
|
+
def list_external_lineage_relationships(
|
|
12993
|
+
self,
|
|
12994
|
+
object_info: ExternalLineageObject,
|
|
12995
|
+
lineage_direction: LineageDirection,
|
|
12996
|
+
*,
|
|
12997
|
+
page_size: Optional[int] = None,
|
|
12998
|
+
page_token: Optional[str] = None,
|
|
12999
|
+
) -> Iterator[ExternalLineageInfo]:
|
|
13000
|
+
"""Lists external lineage relationships of a Databricks object or external metadata given a supplied
|
|
13001
|
+
direction.
|
|
13002
|
+
|
|
13003
|
+
:param object_info: :class:`ExternalLineageObject`
|
|
13004
|
+
The object to query external lineage relationship on.
|
|
13005
|
+
:param lineage_direction: :class:`LineageDirection`
|
|
13006
|
+
The lineage direction to filter on.
|
|
13007
|
+
:param page_size: int (optional)
|
|
13008
|
+
:param page_token: str (optional)
|
|
13009
|
+
|
|
13010
|
+
:returns: Iterator over :class:`ExternalLineageInfo`
|
|
13011
|
+
"""
|
|
13012
|
+
|
|
13013
|
+
query = {}
|
|
13014
|
+
if lineage_direction is not None:
|
|
13015
|
+
query["lineage_direction"] = lineage_direction.value
|
|
13016
|
+
if object_info is not None:
|
|
13017
|
+
query["object_info"] = object_info.as_dict()
|
|
13018
|
+
if page_size is not None:
|
|
13019
|
+
query["page_size"] = page_size
|
|
13020
|
+
if page_token is not None:
|
|
13021
|
+
query["page_token"] = page_token
|
|
13022
|
+
headers = {
|
|
13023
|
+
"Accept": "application/json",
|
|
13024
|
+
}
|
|
13025
|
+
|
|
13026
|
+
while True:
|
|
13027
|
+
json = self._api.do("GET", "/api/2.0/lineage-tracking/external-lineage", query=query, headers=headers)
|
|
13028
|
+
if "external_lineage_relationships" in json:
|
|
13029
|
+
for v in json["external_lineage_relationships"]:
|
|
13030
|
+
yield ExternalLineageInfo.from_dict(v)
|
|
13031
|
+
if "next_page_token" not in json or not json["next_page_token"]:
|
|
13032
|
+
return
|
|
13033
|
+
query["page_token"] = json["next_page_token"]
|
|
13034
|
+
|
|
13035
|
+
def update_external_lineage_relationship(
|
|
13036
|
+
self, external_lineage_relationship: UpdateRequestExternalLineage, update_mask: str
|
|
13037
|
+
) -> ExternalLineageRelationship:
|
|
13038
|
+
"""Updates an external lineage relationship between a Databricks or external metadata object and another
|
|
13039
|
+
external metadata object.
|
|
13040
|
+
|
|
13041
|
+
:param external_lineage_relationship: :class:`UpdateRequestExternalLineage`
|
|
13042
|
+
:param update_mask: str
|
|
13043
|
+
The field mask must be a single string, with multiple fields separated by commas (no spaces). The
|
|
13044
|
+
field path is relative to the resource object, using a dot (`.`) to navigate sub-fields (e.g.,
|
|
13045
|
+
`author.given_name`). Specification of elements in sequence or map fields is not allowed, as only
|
|
13046
|
+
the entire collection field can be specified. Field names must exactly match the resource field
|
|
13047
|
+
names.
|
|
13048
|
+
|
|
13049
|
+
A field mask of `*` indicates full replacement. It’s recommended to always explicitly list the
|
|
13050
|
+
fields being updated and avoid using `*` wildcards, as it can lead to unintended results if the API
|
|
13051
|
+
changes in the future.
|
|
13052
|
+
|
|
13053
|
+
:returns: :class:`ExternalLineageRelationship`
|
|
13054
|
+
"""
|
|
13055
|
+
body = external_lineage_relationship.as_dict()
|
|
13056
|
+
query = {}
|
|
13057
|
+
if update_mask is not None:
|
|
13058
|
+
query["update_mask"] = update_mask
|
|
13059
|
+
headers = {
|
|
13060
|
+
"Accept": "application/json",
|
|
13061
|
+
"Content-Type": "application/json",
|
|
13062
|
+
}
|
|
13063
|
+
|
|
13064
|
+
res = self._api.do(
|
|
13065
|
+
"PATCH", "/api/2.0/lineage-tracking/external-lineage", query=query, body=body, headers=headers
|
|
13066
|
+
)
|
|
13067
|
+
return ExternalLineageRelationship.from_dict(res)
|
|
13068
|
+
|
|
13069
|
+
|
|
11644
13070
|
class ExternalLocationsAPI:
|
|
11645
13071
|
"""An external location is an object that combines a cloud storage path with a storage credential that
|
|
11646
13072
|
authorizes access to the cloud storage path. Each external location is subject to Unity Catalog
|
|
@@ -11683,15 +13109,14 @@ class ExternalLocationsAPI:
|
|
|
11683
13109
|
:param comment: str (optional)
|
|
11684
13110
|
User-provided free-form text description.
|
|
11685
13111
|
:param enable_file_events: bool (optional)
|
|
11686
|
-
|
|
13112
|
+
Whether to enable file events on this external location.
|
|
11687
13113
|
:param encryption_details: :class:`EncryptionDetails` (optional)
|
|
11688
|
-
Encryption options that apply to clients connecting to cloud storage.
|
|
11689
13114
|
:param fallback: bool (optional)
|
|
11690
13115
|
Indicates whether fallback mode is enabled for this external location. When fallback mode is
|
|
11691
13116
|
enabled, the access to the location falls back to cluster credentials if UC credentials are not
|
|
11692
13117
|
sufficient.
|
|
11693
13118
|
:param file_event_queue: :class:`FileEventQueue` (optional)
|
|
11694
|
-
|
|
13119
|
+
File event queue settings.
|
|
11695
13120
|
:param read_only: bool (optional)
|
|
11696
13121
|
Indicates whether the external location is read-only.
|
|
11697
13122
|
:param skip_validation: bool (optional)
|
|
@@ -11846,15 +13271,14 @@ class ExternalLocationsAPI:
|
|
|
11846
13271
|
:param credential_name: str (optional)
|
|
11847
13272
|
Name of the storage credential used with this location.
|
|
11848
13273
|
:param enable_file_events: bool (optional)
|
|
11849
|
-
|
|
13274
|
+
Whether to enable file events on this external location.
|
|
11850
13275
|
:param encryption_details: :class:`EncryptionDetails` (optional)
|
|
11851
|
-
Encryption options that apply to clients connecting to cloud storage.
|
|
11852
13276
|
:param fallback: bool (optional)
|
|
11853
13277
|
Indicates whether fallback mode is enabled for this external location. When fallback mode is
|
|
11854
13278
|
enabled, the access to the location falls back to cluster credentials if UC credentials are not
|
|
11855
13279
|
sufficient.
|
|
11856
13280
|
:param file_event_queue: :class:`FileEventQueue` (optional)
|
|
11857
|
-
|
|
13281
|
+
File event queue settings.
|
|
11858
13282
|
:param force: bool (optional)
|
|
11859
13283
|
Force update even if changing url invalidates dependent external tables or mounts.
|
|
11860
13284
|
:param isolation_mode: :class:`IsolationMode` (optional)
|
|
@@ -11907,6 +13331,137 @@ class ExternalLocationsAPI:
|
|
|
11907
13331
|
return ExternalLocationInfo.from_dict(res)
|
|
11908
13332
|
|
|
11909
13333
|
|
|
13334
|
+
class ExternalMetadataAPI:
|
|
13335
|
+
"""External Metadata objects enable customers to register and manage metadata about external systems within
|
|
13336
|
+
Unity Catalog.
|
|
13337
|
+
|
|
13338
|
+
These APIs provide a standardized way to create, update, retrieve, list, and delete external metadata
|
|
13339
|
+
objects. Fine-grained authorization ensures that only users with appropriate permissions can view and
|
|
13340
|
+
manage external metadata objects."""
|
|
13341
|
+
|
|
13342
|
+
def __init__(self, api_client):
|
|
13343
|
+
self._api = api_client
|
|
13344
|
+
|
|
13345
|
+
def create_external_metadata(self, external_metadata: ExternalMetadata) -> ExternalMetadata:
|
|
13346
|
+
"""Creates a new external metadata object in the parent metastore if the caller is a metastore admin or
|
|
13347
|
+
has the **CREATE_EXTERNAL_METADATA** privilege. Grants **BROWSE** to all account users upon creation
|
|
13348
|
+
by default.
|
|
13349
|
+
|
|
13350
|
+
:param external_metadata: :class:`ExternalMetadata`
|
|
13351
|
+
|
|
13352
|
+
:returns: :class:`ExternalMetadata`
|
|
13353
|
+
"""
|
|
13354
|
+
body = external_metadata.as_dict()
|
|
13355
|
+
headers = {
|
|
13356
|
+
"Accept": "application/json",
|
|
13357
|
+
"Content-Type": "application/json",
|
|
13358
|
+
}
|
|
13359
|
+
|
|
13360
|
+
res = self._api.do("POST", "/api/2.0/lineage-tracking/external-metadata", body=body, headers=headers)
|
|
13361
|
+
return ExternalMetadata.from_dict(res)
|
|
13362
|
+
|
|
13363
|
+
def delete_external_metadata(self, name: str):
|
|
13364
|
+
"""Deletes the external metadata object that matches the supplied name. The caller must be a metastore
|
|
13365
|
+
admin, the owner of the external metadata object, or a user that has the **MANAGE** privilege.
|
|
13366
|
+
|
|
13367
|
+
:param name: str
|
|
13368
|
+
|
|
13369
|
+
|
|
13370
|
+
"""
|
|
13371
|
+
|
|
13372
|
+
headers = {
|
|
13373
|
+
"Accept": "application/json",
|
|
13374
|
+
}
|
|
13375
|
+
|
|
13376
|
+
self._api.do("DELETE", f"/api/2.0/lineage-tracking/external-metadata/{name}", headers=headers)
|
|
13377
|
+
|
|
13378
|
+
def get_external_metadata(self, name: str) -> ExternalMetadata:
|
|
13379
|
+
"""Gets the specified external metadata object in a metastore. The caller must be a metastore admin, the
|
|
13380
|
+
owner of the external metadata object, or a user that has the **BROWSE** privilege.
|
|
13381
|
+
|
|
13382
|
+
:param name: str
|
|
13383
|
+
|
|
13384
|
+
:returns: :class:`ExternalMetadata`
|
|
13385
|
+
"""
|
|
13386
|
+
|
|
13387
|
+
headers = {
|
|
13388
|
+
"Accept": "application/json",
|
|
13389
|
+
}
|
|
13390
|
+
|
|
13391
|
+
res = self._api.do("GET", f"/api/2.0/lineage-tracking/external-metadata/{name}", headers=headers)
|
|
13392
|
+
return ExternalMetadata.from_dict(res)
|
|
13393
|
+
|
|
13394
|
+
def list_external_metadata(
|
|
13395
|
+
self, *, page_size: Optional[int] = None, page_token: Optional[str] = None
|
|
13396
|
+
) -> Iterator[ExternalMetadata]:
|
|
13397
|
+
"""Gets an array of external metadata objects in the metastore. If the caller is the metastore admin, all
|
|
13398
|
+
external metadata objects will be retrieved. Otherwise, only external metadata objects that the caller
|
|
13399
|
+
has **BROWSE** on will be retrieved. There is no guarantee of a specific ordering of the elements in
|
|
13400
|
+
the array.
|
|
13401
|
+
|
|
13402
|
+
:param page_size: int (optional)
|
|
13403
|
+
:param page_token: str (optional)
|
|
13404
|
+
|
|
13405
|
+
:returns: Iterator over :class:`ExternalMetadata`
|
|
13406
|
+
"""
|
|
13407
|
+
|
|
13408
|
+
query = {}
|
|
13409
|
+
if page_size is not None:
|
|
13410
|
+
query["page_size"] = page_size
|
|
13411
|
+
if page_token is not None:
|
|
13412
|
+
query["page_token"] = page_token
|
|
13413
|
+
headers = {
|
|
13414
|
+
"Accept": "application/json",
|
|
13415
|
+
}
|
|
13416
|
+
|
|
13417
|
+
while True:
|
|
13418
|
+
json = self._api.do("GET", "/api/2.0/lineage-tracking/external-metadata", query=query, headers=headers)
|
|
13419
|
+
if "external_metadata" in json:
|
|
13420
|
+
for v in json["external_metadata"]:
|
|
13421
|
+
yield ExternalMetadata.from_dict(v)
|
|
13422
|
+
if "next_page_token" not in json or not json["next_page_token"]:
|
|
13423
|
+
return
|
|
13424
|
+
query["page_token"] = json["next_page_token"]
|
|
13425
|
+
|
|
13426
|
+
def update_external_metadata(
|
|
13427
|
+
self, name: str, external_metadata: ExternalMetadata, update_mask: str
|
|
13428
|
+
) -> ExternalMetadata:
|
|
13429
|
+
"""Updates the external metadata object that matches the supplied name. The caller can only update either
|
|
13430
|
+
the owner or other metadata fields in one request. The caller must be a metastore admin, the owner of
|
|
13431
|
+
the external metadata object, or a user that has the **MODIFY** privilege. If the caller is updating
|
|
13432
|
+
the owner, they must also have the **MANAGE** privilege.
|
|
13433
|
+
|
|
13434
|
+
:param name: str
|
|
13435
|
+
Name of the external metadata object.
|
|
13436
|
+
:param external_metadata: :class:`ExternalMetadata`
|
|
13437
|
+
:param update_mask: str
|
|
13438
|
+
The field mask must be a single string, with multiple fields separated by commas (no spaces). The
|
|
13439
|
+
field path is relative to the resource object, using a dot (`.`) to navigate sub-fields (e.g.,
|
|
13440
|
+
`author.given_name`). Specification of elements in sequence or map fields is not allowed, as only
|
|
13441
|
+
the entire collection field can be specified. Field names must exactly match the resource field
|
|
13442
|
+
names.
|
|
13443
|
+
|
|
13444
|
+
A field mask of `*` indicates full replacement. It’s recommended to always explicitly list the
|
|
13445
|
+
fields being updated and avoid using `*` wildcards, as it can lead to unintended results if the API
|
|
13446
|
+
changes in the future.
|
|
13447
|
+
|
|
13448
|
+
:returns: :class:`ExternalMetadata`
|
|
13449
|
+
"""
|
|
13450
|
+
body = external_metadata.as_dict()
|
|
13451
|
+
query = {}
|
|
13452
|
+
if update_mask is not None:
|
|
13453
|
+
query["update_mask"] = update_mask
|
|
13454
|
+
headers = {
|
|
13455
|
+
"Accept": "application/json",
|
|
13456
|
+
"Content-Type": "application/json",
|
|
13457
|
+
}
|
|
13458
|
+
|
|
13459
|
+
res = self._api.do(
|
|
13460
|
+
"PATCH", f"/api/2.0/lineage-tracking/external-metadata/{name}", query=query, body=body, headers=headers
|
|
13461
|
+
)
|
|
13462
|
+
return ExternalMetadata.from_dict(res)
|
|
13463
|
+
|
|
13464
|
+
|
|
11910
13465
|
class FunctionsAPI:
|
|
11911
13466
|
"""Functions implement User-Defined Functions (UDFs) in Unity Catalog.
|
|
11912
13467
|
|
|
@@ -12302,6 +13857,7 @@ class MetastoresAPI:
|
|
|
12302
13857
|
def current(self) -> MetastoreAssignment:
|
|
12303
13858
|
"""Gets the metastore assignment for the workspace being accessed.
|
|
12304
13859
|
|
|
13860
|
+
|
|
12305
13861
|
:returns: :class:`MetastoreAssignment`
|
|
12306
13862
|
"""
|
|
12307
13863
|
|
|
@@ -12389,6 +13945,7 @@ class MetastoresAPI:
|
|
|
12389
13945
|
"""Gets information about a metastore. This summary includes the storage credential, the cloud vendor,
|
|
12390
13946
|
the cloud region, and the global metastore ID.
|
|
12391
13947
|
|
|
13948
|
+
|
|
12392
13949
|
:returns: :class:`GetMetastoreSummaryResponse`
|
|
12393
13950
|
"""
|
|
12394
13951
|
|
|
@@ -12743,7 +14300,7 @@ class OnlineTablesAPI:
|
|
|
12743
14300
|
"""Create a new Online Table.
|
|
12744
14301
|
|
|
12745
14302
|
:param table: :class:`OnlineTable`
|
|
12746
|
-
|
|
14303
|
+
Specification of the online table to be created.
|
|
12747
14304
|
|
|
12748
14305
|
:returns:
|
|
12749
14306
|
Long-running operation waiter for :class:`OnlineTable`.
|
|
@@ -14183,8 +15740,6 @@ class TableConstraintsAPI:
|
|
|
14183
15740
|
:param full_name_arg: str
|
|
14184
15741
|
The full name of the table referenced by the constraint.
|
|
14185
15742
|
:param constraint: :class:`TableConstraint`
|
|
14186
|
-
A table constraint, as defined by *one* of the following fields being set:
|
|
14187
|
-
__primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__.
|
|
14188
15743
|
|
|
14189
15744
|
:returns: :class:`TableConstraint`
|
|
14190
15745
|
"""
|
|
@@ -14304,11 +15859,11 @@ class TablesAPI:
|
|
|
14304
15859
|
Full name of the table.
|
|
14305
15860
|
:param include_browse: bool (optional)
|
|
14306
15861
|
Whether to include tables in the response for which the principal can only access selective metadata
|
|
14307
|
-
for
|
|
15862
|
+
for.
|
|
14308
15863
|
:param include_delta_metadata: bool (optional)
|
|
14309
15864
|
Whether delta metadata should be included in the response.
|
|
14310
15865
|
:param include_manifest_capabilities: bool (optional)
|
|
14311
|
-
Whether to include a manifest containing capabilities the
|
|
15866
|
+
Whether to include a manifest containing table capabilities in the response.
|
|
14312
15867
|
|
|
14313
15868
|
:returns: :class:`TableInfo`
|
|
14314
15869
|
"""
|
|
@@ -14333,7 +15888,6 @@ class TablesAPI:
|
|
|
14333
15888
|
schema_name: str,
|
|
14334
15889
|
*,
|
|
14335
15890
|
include_browse: Optional[bool] = None,
|
|
14336
|
-
include_delta_metadata: Optional[bool] = None,
|
|
14337
15891
|
include_manifest_capabilities: Optional[bool] = None,
|
|
14338
15892
|
max_results: Optional[int] = None,
|
|
14339
15893
|
omit_columns: Optional[bool] = None,
|
|
@@ -14353,11 +15907,9 @@ class TablesAPI:
|
|
|
14353
15907
|
Parent schema of tables.
|
|
14354
15908
|
:param include_browse: bool (optional)
|
|
14355
15909
|
Whether to include tables in the response for which the principal can only access selective metadata
|
|
14356
|
-
for
|
|
14357
|
-
:param include_delta_metadata: bool (optional)
|
|
14358
|
-
Whether delta metadata should be included in the response.
|
|
15910
|
+
for.
|
|
14359
15911
|
:param include_manifest_capabilities: bool (optional)
|
|
14360
|
-
Whether to include a manifest containing capabilities the
|
|
15912
|
+
Whether to include a manifest containing table capabilities in the response.
|
|
14361
15913
|
:param max_results: int (optional)
|
|
14362
15914
|
Maximum number of tables to return. If not set, all the tables are returned (not recommended). -
|
|
14363
15915
|
when set to a value greater than 0, the page length is the minimum of this value and a server
|
|
@@ -14381,8 +15933,6 @@ class TablesAPI:
|
|
|
14381
15933
|
query["catalog_name"] = catalog_name
|
|
14382
15934
|
if include_browse is not None:
|
|
14383
15935
|
query["include_browse"] = include_browse
|
|
14384
|
-
if include_delta_metadata is not None:
|
|
14385
|
-
query["include_delta_metadata"] = include_delta_metadata
|
|
14386
15936
|
if include_manifest_capabilities is not None:
|
|
14387
15937
|
query["include_manifest_capabilities"] = include_manifest_capabilities
|
|
14388
15938
|
if max_results is not None:
|
|
@@ -14401,8 +15951,6 @@ class TablesAPI:
|
|
|
14401
15951
|
"Accept": "application/json",
|
|
14402
15952
|
}
|
|
14403
15953
|
|
|
14404
|
-
if "max_results" not in query:
|
|
14405
|
-
query["max_results"] = 0
|
|
14406
15954
|
while True:
|
|
14407
15955
|
json = self._api.do("GET", "/api/2.1/unity-catalog/tables", query=query, headers=headers)
|
|
14408
15956
|
if "tables" in json:
|
|
@@ -14436,7 +15984,7 @@ class TablesAPI:
|
|
|
14436
15984
|
:param catalog_name: str
|
|
14437
15985
|
Name of parent catalog for tables of interest.
|
|
14438
15986
|
:param include_manifest_capabilities: bool (optional)
|
|
14439
|
-
Whether to include a manifest containing capabilities the
|
|
15987
|
+
Whether to include a manifest containing table capabilities in the response.
|
|
14440
15988
|
:param max_results: int (optional)
|
|
14441
15989
|
Maximum number of summaries for tables to return. If not set, the page length is set to a server
|
|
14442
15990
|
configured value (10000, as of 1/5/2024). - when set to a value greater than 0, the page length is
|
|
@@ -14470,8 +16018,6 @@ class TablesAPI:
|
|
|
14470
16018
|
"Accept": "application/json",
|
|
14471
16019
|
}
|
|
14472
16020
|
|
|
14473
|
-
if "max_results" not in query:
|
|
14474
|
-
query["max_results"] = 0
|
|
14475
16021
|
while True:
|
|
14476
16022
|
json = self._api.do("GET", "/api/2.1/unity-catalog/table-summaries", query=query, headers=headers)
|
|
14477
16023
|
if "tables" in json:
|
|
@@ -14490,6 +16036,7 @@ class TablesAPI:
|
|
|
14490
16036
|
:param full_name: str
|
|
14491
16037
|
Full name of the table.
|
|
14492
16038
|
:param owner: str (optional)
|
|
16039
|
+
Username of current owner of table.
|
|
14493
16040
|
|
|
14494
16041
|
|
|
14495
16042
|
"""
|
|
@@ -14595,11 +16142,6 @@ class VolumesAPI:
|
|
|
14595
16142
|
:param name: str
|
|
14596
16143
|
The name of the volume
|
|
14597
16144
|
:param volume_type: :class:`VolumeType`
|
|
14598
|
-
The type of the volume. An external volume is located in the specified external location. A managed
|
|
14599
|
-
volume is located in the default location which is specified by the parent schema, or the parent
|
|
14600
|
-
catalog, or the Metastore. [Learn more]
|
|
14601
|
-
|
|
14602
|
-
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external
|
|
14603
16145
|
:param comment: str (optional)
|
|
14604
16146
|
The comment attached to the volume
|
|
14605
16147
|
:param storage_location: str (optional)
|