Amazon Athena如何管理列的重命名



大家好!

我正在开发一个解决方案,打算使用AmazonAthena在S3上运行Parquet文件中的SQL查询。这些文件将从PostgreSQL数据库(RDS(中生成。我将运行一个查询,并使用Python的Pyarrow将数据导出到S3。

我的问题是:由于Athena是读取模式,所以在数据库中添加或删除列不会是问题。。。但当我在数据库中重命名一列时会发生什么?

第1天:COLUMNS['col_a','col_b','col_c']

第2天:COLUMNS['col_a','col_beta','col_c']

关于雅典娜,

SELECT col_beta FROM table;

将只返回第2天的数据,对吗?有没有办法让Athena知道这些模式的演变,或者我必须运行一个脚本来迭代S3上的所有文件,重命名列,并将Athena上的表模式从"col_a"更新为"col_beta"?

AWS Glue Data Catalog能以任何方式帮助解决这个问题吗?

我很乐意讨论更多关于这个的事情!

我建议在这里阅读更多关于使用Athena处理模式更新的信息。一般来说,Athena支持多种读取Parquet文件的方式(以及其他列式数据格式,如ORC(。默认情况下,使用Parquet,列将按名称读取,但您也可以将其更改为按索引读取。在处理模式更改时,每种方法都有自己的优点/缺点。根据您的示例,如果您确信新列仅附加到末尾,则可能需要考虑按索引读取。

Glue爬网程序可以帮助您保持架构的更新(和版本(,但它不一定能帮助您(从逻辑上(解决架构更改。当然,这需要额外的成本。

另一种方法可以是使用作为随时间推移的所有模式的超集的模式(使用按名称排列的列(,并在其顶部定义一个视图以解决更改";"手动";。

您可以为AWS Glue爬网程序设置基于"按需"或"基于时间"的粒度,因此每次S3上的数据更新时,都会生成一个新的架构(您可以编辑属性的数据类型上的架构(。这样,您的列将保持更新,并且您可以查询新字段。

由于AWS Athena在";列的顺序";并以相同的顺序返回它们。它不使用列名将数据映射到列,这就是为什么您可以在不破坏Athena查询的情况下重命名CSV或TSV中的列。

最新更新