使用Boto3的get_partitions接口时,Expression参数无法匹配下划线_
Boto3 get_partitions 下划线匹配问题解决方案
- 处理Python与服务端的双重转义:下划线在LIKE表达式中是匹配单个任意字符的通配符,同时Python字符串会自动转义反斜杠,因此需要在表达式中写入双反斜杠,确保服务端收到单个反斜杠来转义下划线。示例代码:
response = client.get_partitions( Expression="partition_name LIKE '%\\\\_20231202%-%'", # 其他必要参数... )
Python会将\\\\解析为\\,服务端接收到后会把\\_识别为字面量下划线。
- 用ESCAPE子句自定义转义符:通过ESCAPE关键字声明一个特殊字符作为转义标识,将下划线转义为字面量。示例:
response = client.get_partitions( Expression="partition_name LIKE '%|_20231202%-%' ESCAPE '|'", # 其他必要参数... )
这里|作为转义符,|_会被解析为实际的下划线字符。
尝试替代匹配逻辑:
- 如果分区名格式固定,直接使用精确匹配:
Expression="partition_name = '_20231202-xxx'"(替换xxx为实际后缀内容) - 若Glue支持RLIKE正则匹配,用正则表达式精准匹配:
Expression="partition_name RLIKE '^_20231202.*-'"
- 如果分区名格式固定,直接使用精确匹配:
验证分区名实际格式:确认目标分区的名称是否确实包含
_20231202,排查是否存在多下划线、大小写差异或隐藏字符等情况。尝试参数化表达式(若支持):部分Boto3版本支持参数化查询,可避免手动转义的繁琐:
response = client.get_partitions( Expression="partition_name LIKE :pattern", ExpressionParameters={":pattern": "%_20231202%-%"}, # 其他必要参数... )
注意:需确认当前使用的Boto3版本及Glue服务是否支持ExpressionParameters参数。
内容的提问来源于stack exchange,提问作者shivam pandita
相关产品推荐
相关产品推荐

