catalog-api/python/pyodps_catalog/models.py (507 lines of code) (raw):
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
from Tea.model import TeaModel
from typing import List, Dict
class PolicyTag(TeaModel):
def __init__(
self,
names: List[str] = None,
):
self.names = names
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.names is not None:
result['names'] = self.names
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('names') is not None:
self.names = m.get('names')
return self
class TableFieldSchema(TeaModel):
def __init__(
self,
field_name: str = None,
sql_type_definition: str = None,
type_category: str = None,
mode: str = None,
fields: List['TableFieldSchema'] = None,
description: str = None,
policy_tags: PolicyTag = None,
max_length: str = None,
precision: str = None,
scale: str = None,
default_value_expression: str = None,
):
# 列名(如果是顶层列),或者 struct 字段名。
self.field_name = field_name
# 在 SQL DDL 语句中填写的表示列类型的字符串定义。
self.sql_type_definition = sql_type_definition
# 字段类型。
self.type_category = type_category
# REQUIRED 或 NULLABLE。
self.mode = mode
# 如果是 STRUCT 类型,表示 STRUCT 的子字段。
self.fields = fields
# 列的评论。
self.description = description
# 可选。列绑定的 policy tag。
self.policy_tags = policy_tags
# 如果是 CHAR/VARCHAR 类型,表示字段的最大长度。
self.max_length = max_length
# 如果 DECIMAL 类型,表示精度。
self.precision = precision
# 如果 DECIMAL 类型,表示 scale。
self.scale = scale
# 可选。默认值的表达式字符串。
self.default_value_expression = default_value_expression
def validate(self):
if self.fields:
for k in self.fields:
if k:
k.validate()
if self.policy_tags:
self.policy_tags.validate()
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.field_name is not None:
result['fieldName'] = self.field_name
if self.sql_type_definition is not None:
result['sqlTypeDefinition'] = self.sql_type_definition
if self.type_category is not None:
result['typeCategory'] = self.type_category
if self.mode is not None:
result['mode'] = self.mode
result['fields'] = []
if self.fields is not None:
for k in self.fields:
result['fields'].append(k.to_map() if k else None)
if self.description is not None:
result['description'] = self.description
if self.policy_tags is not None:
result['policyTags'] = self.policy_tags.to_map()
if self.max_length is not None:
result['maxLength'] = self.max_length
if self.precision is not None:
result['precision'] = self.precision
if self.scale is not None:
result['scale'] = self.scale
if self.default_value_expression is not None:
result['defaultValueExpression'] = self.default_value_expression
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('fieldName') is not None:
self.field_name = m.get('fieldName')
if m.get('sqlTypeDefinition') is not None:
self.sql_type_definition = m.get('sqlTypeDefinition')
if m.get('typeCategory') is not None:
self.type_category = m.get('typeCategory')
if m.get('mode') is not None:
self.mode = m.get('mode')
self.fields = []
if m.get('fields') is not None:
for k in m.get('fields'):
temp_model = TableFieldSchema()
self.fields.append(temp_model.from_map(k))
if m.get('description') is not None:
self.description = m.get('description')
if m.get('policyTags') is not None:
temp_model = PolicyTag()
self.policy_tags = temp_model.from_map(m['policyTags'])
if m.get('maxLength') is not None:
self.max_length = m.get('maxLength')
if m.get('precision') is not None:
self.precision = m.get('precision')
if m.get('scale') is not None:
self.scale = m.get('scale')
if m.get('defaultValueExpression') is not None:
self.default_value_expression = m.get('defaultValueExpression')
return self
class Field(TeaModel):
def __init__(
self,
field_name: str = None,
):
# 列名(如果是顶层列),或者 struct 字段名。
self.field_name = field_name
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.field_name is not None:
result['fieldName'] = self.field_name
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('fieldName') is not None:
self.field_name = m.get('fieldName')
return self
class SortingField(TeaModel):
def __init__(
self,
field_name: str = None,
order: str = None,
):
# 列名(如果是顶层列),或者 struct 字段名。
self.field_name = field_name
# 排序顺序
self.order = order
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.field_name is not None:
result['fieldName'] = self.field_name
if self.order is not None:
result['order'] = self.order
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('fieldName') is not None:
self.field_name = m.get('fieldName')
if m.get('order') is not None:
self.order = m.get('order')
return self
class Clustering(TeaModel):
def __init__(
self,
type: str = None,
fields: List[str] = None,
num_buckets: str = None,
):
# 表的聚簇类型,目前支持 hash/range。
self.type = type
# 聚簇列定义。
self.fields = fields
# 聚簇桶的个数。只有 hash clustering 才有此属性。创建 hash clustering 表时,如不指定桶个数,默认为 16。
self.num_buckets = num_buckets
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.type is not None:
result['type'] = self.type
if self.fields is not None:
result['fields'] = self.fields
if self.num_buckets is not None:
result['numBuckets'] = self.num_buckets
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('type') is not None:
self.type = m.get('type')
if m.get('fields') is not None:
self.fields = m.get('fields')
if m.get('numBuckets') is not None:
self.num_buckets = m.get('numBuckets')
return self
class Fields(TeaModel):
def __init__(
self,
fields: List[str] = None,
):
# 主键列名列表。
self.fields = fields
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.fields is not None:
result['fields'] = self.fields
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('fields') is not None:
self.fields = m.get('fields')
return self
class TableConstraints(TeaModel):
def __init__(
self,
primary_key: Fields = None,
):
# 表的主键。系统不为主键自动去重。
self.primary_key = primary_key
def validate(self):
if self.primary_key:
self.primary_key.validate()
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.primary_key is not None:
result['primaryKey'] = self.primary_key.to_map()
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('primaryKey') is not None:
temp_model = Fields()
self.primary_key = temp_model.from_map(m['primaryKey'])
return self
class PartitionedColumn(TeaModel):
def __init__(
self,
field: str = None,
):
self.field = field
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.field is not None:
result['field'] = self.field
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('field') is not None:
self.field = m.get('field')
return self
class PartitionDefinition(TeaModel):
def __init__(
self,
partitioned_column: List[PartitionedColumn] = None,
):
self.partitioned_column = partitioned_column
def validate(self):
if self.partitioned_column:
for k in self.partitioned_column:
if k:
k.validate()
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
result['partitionedColumn'] = []
if self.partitioned_column is not None:
for k in self.partitioned_column:
result['partitionedColumn'].append(k.to_map() if k else None)
return result
def from_map(self, m: dict = None):
m = m or dict()
self.partitioned_column = []
if m.get('partitionedColumn') is not None:
for k in m.get('partitionedColumn'):
temp_model = PartitionedColumn()
self.partitioned_column.append(temp_model.from_map(k))
return self
class TableFormatDefinition(TeaModel):
def __init__(
self,
transactional: bool = None,
version: str = None,
):
self.transactional = transactional
self.version = version
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.transactional is not None:
result['transactional'] = self.transactional
if self.version is not None:
result['version'] = self.version
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('transactional') is not None:
self.transactional = m.get('transactional')
if m.get('version') is not None:
self.version = m.get('version')
return self
class ExpirationOptions(TeaModel):
def __init__(
self,
expiration_days: int = None,
partition_expiration_days: int = None,
):
self.expiration_days = expiration_days
self.partition_expiration_days = partition_expiration_days
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.expiration_days is not None:
result['expirationDays'] = self.expiration_days
if self.partition_expiration_days is not None:
result['partitionExpirationDays'] = self.partition_expiration_days
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('expirationDays') is not None:
self.expiration_days = m.get('expirationDays')
if m.get('partitionExpirationDays') is not None:
self.partition_expiration_days = m.get('partitionExpirationDays')
return self
class Table(TeaModel):
def __init__(
self,
etag: str = None,
name: str = None,
project_id: str = None,
schema_name: str = None,
table_name: str = None,
type: str = None,
description: str = None,
table_schema: TableFieldSchema = None,
clustering: Clustering = None,
table_constraints: TableConstraints = None,
partition_definition: PartitionDefinition = None,
table_format_definition: TableFormatDefinition = None,
create_time: str = None,
last_modified_time: str = None,
expiration_options: ExpirationOptions = None,
labels: Dict[str, str] = None,
):
# 用于 read-modify-write 一致性校验。
self.etag = etag
# 表的完整路径。e.g., projects/{projectId}/schemas/{schemaName}/tables/{tableName}
self.name = name
# 表所属的 project ID。
self.project_id = project_id
# 表所属的 schema 名。
self.schema_name = schema_name
# 表名。
self.table_name = table_name
# 表的类型。
self.type = type
# 表的描述。等价于 SQL DDL 中表的 comment。
self.description = description
# 表列的 schema 定义。
self.table_schema = table_schema
# 表的 cluster 属性定义,只有 cluster 表才有。
self.clustering = clustering
# 表的主键约束定义,只有 delta 表才有。
self.table_constraints = table_constraints
# 表的分区列定义,只有分区表才有。
self.partition_definition = partition_definition
# 可选。仅内表有此字段。默认为普通表格式。
self.table_format_definition = table_format_definition
# 表的创建时间(毫秒)。仅输出。
self.create_time = create_time
# 表的修改时间(毫秒)。仅输出。
self.last_modified_time = last_modified_time
# 可选。表的过期时间配置。
self.expiration_options = expiration_options
# 可选。表上的标签。
self.labels = labels
def validate(self):
self.validate_required(self.project_id, 'project_id')
self.validate_required(self.table_name, 'table_name')
if self.table_schema:
self.table_schema.validate()
if self.clustering:
self.clustering.validate()
if self.table_constraints:
self.table_constraints.validate()
if self.partition_definition:
self.partition_definition.validate()
if self.table_format_definition:
self.table_format_definition.validate()
if self.expiration_options:
self.expiration_options.validate()
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.etag is not None:
result['etag'] = self.etag
if self.name is not None:
result['name'] = self.name
if self.project_id is not None:
result['projectId'] = self.project_id
if self.schema_name is not None:
result['schemaName'] = self.schema_name
if self.table_name is not None:
result['tableName'] = self.table_name
if self.type is not None:
result['type'] = self.type
if self.description is not None:
result['description'] = self.description
if self.table_schema is not None:
result['tableSchema'] = self.table_schema.to_map()
if self.clustering is not None:
result['clustering'] = self.clustering.to_map()
if self.table_constraints is not None:
result['tableConstraints'] = self.table_constraints.to_map()
if self.partition_definition is not None:
result['partitionDefinition'] = self.partition_definition.to_map()
if self.table_format_definition is not None:
result['tableFormatDefinition'] = self.table_format_definition.to_map()
if self.create_time is not None:
result['createTime'] = self.create_time
if self.last_modified_time is not None:
result['lastModifiedTime'] = self.last_modified_time
if self.expiration_options is not None:
result['expirationOptions'] = self.expiration_options.to_map()
if self.labels is not None:
result['labels'] = self.labels
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('etag') is not None:
self.etag = m.get('etag')
if m.get('name') is not None:
self.name = m.get('name')
if m.get('projectId') is not None:
self.project_id = m.get('projectId')
if m.get('schemaName') is not None:
self.schema_name = m.get('schemaName')
if m.get('tableName') is not None:
self.table_name = m.get('tableName')
if m.get('type') is not None:
self.type = m.get('type')
if m.get('description') is not None:
self.description = m.get('description')
if m.get('tableSchema') is not None:
temp_model = TableFieldSchema()
self.table_schema = temp_model.from_map(m['tableSchema'])
if m.get('clustering') is not None:
temp_model = Clustering()
self.clustering = temp_model.from_map(m['clustering'])
if m.get('tableConstraints') is not None:
temp_model = TableConstraints()
self.table_constraints = temp_model.from_map(m['tableConstraints'])
if m.get('partitionDefinition') is not None:
temp_model = PartitionDefinition()
self.partition_definition = temp_model.from_map(m['partitionDefinition'])
if m.get('tableFormatDefinition') is not None:
temp_model = TableFormatDefinition()
self.table_format_definition = temp_model.from_map(m['tableFormatDefinition'])
if m.get('createTime') is not None:
self.create_time = m.get('createTime')
if m.get('lastModifiedTime') is not None:
self.last_modified_time = m.get('lastModifiedTime')
if m.get('expirationOptions') is not None:
temp_model = ExpirationOptions()
self.expiration_options = temp_model.from_map(m['expirationOptions'])
if m.get('labels') is not None:
self.labels = m.get('labels')
return self
class HttpResponse(TeaModel):
def __init__(
self,
headers: Dict[str, str] = None,
status_code: int = None,
body: str = None,
):
self.headers = headers
self.status_code = status_code
self.body = body
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.headers is not None:
result['headers'] = self.headers
if self.status_code is not None:
result['statusCode'] = self.status_code
if self.body is not None:
result['body'] = self.body
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('headers') is not None:
self.headers = m.get('headers')
if m.get('statusCode') is not None:
self.status_code = m.get('statusCode')
if m.get('body') is not None:
self.body = m.get('body')
return self