代码之家  ›  专栏  ›  技术社区  ›  Girish Bhat

如何以编程方式读取AWS Glue数据目录表架构

  •  5
  • Girish Bhat  · 技术社区  · 7 年前

    我有一套统一结构的每日CSV文件,我将上传到S3。有一个下游作业将CSV数据加载到红移数据库表中。CSV中的列数可能会增加,从那时起,新文件中会包含新列。发生这种情况时,我希望检测更改并将列自动添加到目标红移表中。

    我的计划是在源CSV文件上运行胶水爬虫。模式中的任何更改都会在Glue数据目录中生成新版本的表。然后,我希望使用Java以编程方式读取Glue数据目录中最新版本的表结构(列及其数据类型)。NET或其他语言,并将其与红移表的架构进行比较。如果发现新的列,我将生成一个DDL语句来更改红移表以添加列。

    有人能给我指出一些使用Java读取Glue数据目录表的例子吗。NET或其他语言?有没有更好的方法可以自动将新列添加到红移表中?

    1 回复  |  直到 7 年前
        1
  •  6
  •   hoaxz    7 年前

    如果要使用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();
    

    在这里,您可以查看AWS文档 TableVersion 以及 StorageDescriptor 物体。

    您也可以使用 boto3 library for Python .

    希望这有帮助。