如何使用 boto3 获取 AWS Glue Schema Registry 架构定义?
How to get AWS Glue Schema Registry schema definition using boto3?
我的目标是在 S3 中接收 csv 文件,将它们转换为 avro,并根据 AWS 中的适当模式验证它们。
我根据已有的 .avsc 文件在 AWS Glue Registry 中创建了一系列模式:
{
"namespace": "foo",
"type": "record",
"name": "bar.baz",
"fields": [
{
"name": "column1",
"type": ["string", "null"]
},
{
"name": "column2",
"type": ["string", "null"]
},
{
"name": "column3",
"type": ["string", "null"]
}
]
}
但是一旦我尝试从 Glue 中提取模式,API 似乎没有提供定义细节:
glue = boto3.client('glue')
glue.get_schema(
SchemaId={
'SchemaArn': schema['SchemaArn']
}
)
returns:
{
'Compatibility': 'BACKWARD',
'CreatedTime': '2021-08-11T21:09:15.312Z',
'DataFormat': 'AVRO',
'LatestSchemaVersion': 2,
'NextSchemaVersion': 3,
'RegistryArn': '[my-registry-arn]',
'RegistryName': '[my-registry-name]',
'ResponseMetadata': {
'HTTPHeaders': {
'connection': 'keep-alive',
'content-length': '854',
'content-type': 'application/x-amz-json-1.1',
},
'HTTPStatusCode': 200,
'RetryAttempts': 0,
},
'SchemaArn': '[my-schema-arn]',
'SchemaCheckpoint': 2,
'SchemaName': '[my-schema-name]',
'SchemaStatus': 'AVAILABLE',
'UpdatedTime': '2021-08-11T21:09:17.312Z',
}
有没有办法以编程方式检索架构的 Glue 架构注册表定义?还是我在这里尝试做的事情采用了错误的方法?
经过更多的挖掘,我发现了我一直忽略的名称有点令人困惑的 get_schema_version() 方法 returns SchemaDefinition
:
{
'SchemaVersionId': 'string',
'SchemaDefinition': 'string',
'DataFormat': 'AVRO'|'JSON',
'SchemaArn': 'string',
'VersionNumber': 123,
'Status': 'AVAILABLE'|'PENDING'|'FAILURE'|'DELETING',
'CreatedTime': 'string'
}
#如果您使用的是粘合模式注册表:
session = boto3.Session( region_name='us-east-1')
glue_client = session.client('glue')
#glue = boto3.client('glue')
response = glue_client.list_registries(
MaxResults=23
)
schema_message = glue_client.get_schema_version(
SchemaId={
'SchemaName': 'string',
'RegistryName': 'string'
},
SchemaVersionNumber={
'LatestVersion': True
}
)
print(schema_message['SchemaDefinition'])
我的目标是在 S3 中接收 csv 文件,将它们转换为 avro,并根据 AWS 中的适当模式验证它们。
我根据已有的 .avsc 文件在 AWS Glue Registry 中创建了一系列模式:
{
"namespace": "foo",
"type": "record",
"name": "bar.baz",
"fields": [
{
"name": "column1",
"type": ["string", "null"]
},
{
"name": "column2",
"type": ["string", "null"]
},
{
"name": "column3",
"type": ["string", "null"]
}
]
}
但是一旦我尝试从 Glue 中提取模式,API 似乎没有提供定义细节:
glue = boto3.client('glue')
glue.get_schema(
SchemaId={
'SchemaArn': schema['SchemaArn']
}
)
returns:
{
'Compatibility': 'BACKWARD',
'CreatedTime': '2021-08-11T21:09:15.312Z',
'DataFormat': 'AVRO',
'LatestSchemaVersion': 2,
'NextSchemaVersion': 3,
'RegistryArn': '[my-registry-arn]',
'RegistryName': '[my-registry-name]',
'ResponseMetadata': {
'HTTPHeaders': {
'connection': 'keep-alive',
'content-length': '854',
'content-type': 'application/x-amz-json-1.1',
},
'HTTPStatusCode': 200,
'RetryAttempts': 0,
},
'SchemaArn': '[my-schema-arn]',
'SchemaCheckpoint': 2,
'SchemaName': '[my-schema-name]',
'SchemaStatus': 'AVAILABLE',
'UpdatedTime': '2021-08-11T21:09:17.312Z',
}
有没有办法以编程方式检索架构的 Glue 架构注册表定义?还是我在这里尝试做的事情采用了错误的方法?
经过更多的挖掘,我发现了我一直忽略的名称有点令人困惑的 get_schema_version() 方法 returns SchemaDefinition
:
{
'SchemaVersionId': 'string',
'SchemaDefinition': 'string',
'DataFormat': 'AVRO'|'JSON',
'SchemaArn': 'string',
'VersionNumber': 123,
'Status': 'AVAILABLE'|'PENDING'|'FAILURE'|'DELETING',
'CreatedTime': 'string'
}
#如果您使用的是粘合模式注册表:
session = boto3.Session( region_name='us-east-1')
glue_client = session.client('glue')
#glue = boto3.client('glue')
response = glue_client.list_registries(
MaxResults=23
)
schema_message = glue_client.get_schema_version(
SchemaId={
'SchemaName': 'string',
'RegistryName': 'string'
},
SchemaVersionNumber={
'LatestVersion': True
}
)
print(schema_message['SchemaDefinition'])