我有一组统一结构的每日CSV文件,我将上传到S3。有一个下游作业将CSV数据加载到Redshift数据库表中。 CSV中的列数可能会增加,从那时起,新文件将包含新列。发生这种情况时,我想检测更改并自动将列添加到目标Redshift表。
我的计划是在源CSV文件上运行Glue Crawler。架构的任何更改都会在Glue Data Catalog中生成新版本的表。然后,我想以编程方式使用Java,.NET或其他语言读取Glue Data Catalog中表的最新版本的表结构(列及其数据类型),并将其与Redshift表的模式进行比较。如果找到新列,我将生成一个DDL语句来更改Redshift表以添加列。
有人能指出我使用Java,.NET或其他语言阅读Glue Data Catalog表的任何示例吗?有没有更好的想法自动添加新列到Redshift表?
答案 0 :(得分:3)
如果要使用Java,请使用依赖项:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-glue</artifactId>
<version>{VERSION}</version>
</dependency>
这是一个代码片段,用于获取表格版本和列表列表:
AWSGlue client = AWSGlueClientBuilder.defaultClient();
GetTableVersionsRequest tableVersionsRequest = new GetTableVersionsRequest()
.withDatabaseName("glue_catalog_database_name")
.withCatalogId("table_name_generated_by_crawler");
GetTableVersionsResult results = client.getTableVersions(tableVersionsRequest);
// Here you have all the table versions, at this point you can check for new ones
List<TableVersion> versions = results.getTableVersions();
// Here's how to get to the table columns
List<Column> tableColumns = versions.get(0).getTable().getStorageDescriptor().getColumns();
您可以在此处查看TableVersion和StorageDescriptor对象的AWS文档。
您也可以使用boto3 library for Python。
希望这有帮助。