【问题标题】:How to read AWS Glue Data Catalog table schemas programmatically如何以编程方式读取 AWS Glue 数据目录表架构
【发布时间】:2018-06-23 16:30:41
【问题描述】:

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

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

有人可以指出任何使用 Java、.NET 或其他语言读取 Glue 数据目录表的示例吗?有没有更好的办法来自动向 Redshift 表添加新列?

【问题讨论】:

    标签: amazon-redshift aws-glue


    【解决方案1】:

    如果要使用Java,请使用依赖项:

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-glue</artifactId>
      <version>{VERSION}</version>
    </dependency>
    

    这里有一个代码 sn-p 来获取你的表格版本和列列表:

    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 Doc。

    您也可以使用boto3 library for Python

    希望这会有所帮助。

    【讨论】:

    • 嗨,我可以使用 boto3 以编程方式更改 Glue 目录表的架构吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2013-03-21
    • 2022-08-20
    相关资源
    最近更新 更多