如何以编程方式读取AWS Glue Data Catalog表模式

时间:2018-01-15 02:38:08

标签: amazon-redshift aws-glue

我有一组统一结构的每日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表?

1 个答案:

答案 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();

您可以在此处查看TableVersionStorageDescriptor对象的AWS文档。

您也可以使用boto3 library for Python

希望这有帮助。