首页 > 解决方案 > 从单独的文件中指定 AWS Glue 爬网程序的列

问题描述

我正在使用 Glue 爬虫在 Athena 中为一组由外部提供程序生成的 CSV 文件创建一个表。这些文件没有标题,而是带有一个单独的单行 CSV 文件,用于指定标题。有超过 1000 列,因此手动编辑模式以从 Glue 的默认 col0、col1、col2 命名列是不得已的方法。有没有办法告诉 Glue/Athena 从单独的文件中选择列名而不是数据?

标签: aws-glueamazon-athena

解决方案


我能够通过该update_table方法使用 boto3 来做到这一点。大部分解决方案都在AWS Glue - 如何使用 BOTO3 更改 Glue 目录表中的列名?它给出了一个重命名单个列的示例。要根据外部文件重命名所有列,而不是单列方法,我使用了以下方法:

with open('column_headers.tsv') as cfile:
creader = csv.reader(cfile, delimiter='\t')
for row in creader:
    colnames = row
    
old_colnames = [oc['Name'] for oc in old_table['StorageDescriptor']['Columns']]
col_map = dict(zip(old_colnames, colnames))  

for col in new_table['StorageDescriptor']['Columns']:
    col['Name'] = col_map[col['Name']]
    
client.update_table(DatabaseName=db_name, TableInput=new_table)    

推荐阅读