AWS Glue爬虫将Parquet文件名的'.'转为表名'_',如何配置?
AWS Glue爬虫文件名转表名时的字符替换问题解答
Glue爬虫默认会自动将文件名中的特殊字符(包括.)替换为_来生成表名,目前没有内置的爬虫配置项可以直接禁用这个行为。不过可以通过以下两种方式实现你要的表名格式:
1. 用Lambda触发器修改表名(自动处理)
你可以借助EventBridge+Lambda实现爬虫完成后的表名自动修正:
- 在EventBridge创建规则,监听Glue爬虫的
CrawlerStateChange事件,过滤条件设为爬虫状态为SUCCEEDED - 编写Lambda函数,调用Glue的
update_tableAPI,将生成的schema_tablename表名修改为schema.tablename- 示例Python代码片段:
import boto3 glue_client = boto3.client('glue') def lambda_handler(event, context): # 从事件中获取爬虫关联的数据库和生成的表名 database_name = event['detail']['DatabaseName'] original_table_name = event['detail']['TableName'] # 替换下划线为点(仅针对符合schema_tablename格式的表) if '_' in original_table_name: new_table_name = original_table_name.replace('_', '.', 1) # 只替换第一个下划线,避免表名内有多个下划线的情况 # 获取原表的结构信息 table = glue_client.get_table(DatabaseName=database_name, Name=original_table_name) table_input = table['Table'] table_input.pop('Name') # 移除原表名字段 # 更新表名 glue_client.update_table( DatabaseName=database_name, TableInput={**table_input, 'Name': new_table_name} ) # 删除原表(可选,根据需求决定) glue_client.delete_table(DatabaseName=database_name, Name=original_table_name)
- 示例Python代码片段:
- 给Lambda配置足够的Glue权限(
glue:GetTable、glue:UpdateTable、glue:DeleteTable等)
2. 手动/ETL方式创建表(适合已知结构的场景)
如果你的数据结构是固定的,不需要爬虫自动发现,可以跳过爬虫,直接创建表:
- 通过Glue控制台手动创建表:在对应数据库下新建表,指定表名为
schema.tablename,并配置Parquet文件的存储路径和结构 - 用Glue ETL Job或
create_tableAPI批量创建表,自定义表名参数,完全绕过爬虫的命名规则限制
需要注意的是,Glue数据目录的表名支持包含.字符,所以修改后的表名是合法的,不会影响后续的查询或ETL操作。
内容的提问来源于stack exchange,提问作者user1546784
相关产品推荐
相关产品推荐

