BigQuery中FORMAT()内调用PARSE_DATE报错:无效格式说明符字符“Y”
解决BigQuery FORMAT函数中PARSE_DATE百分号冲突的问题
首先,问题的核心是BigQuery的FORMAT()函数会把单个百分号%识别为格式占位符的起始标记,你在PARSE_DATE里用的%Y%m%d中的%Y会被FORMAT误判为格式说明符,这才导致了"Invalid format specifier character 'Y'"的错误。
正确的解决方法:用双重百分号%%转义
在FORMAT的字符串模板里,如果你需要输出字面意义的百分号,必须用两个百分号%%来代替单个%。这样FORMAT函数就会把%%Y解析为字面的%Y,而不是格式占位符。
修改后的完整查询语句如下:
FOR TABLE IN ( SELECT tables FROM project.dataset.table) DO EXECUTE IMMEDIATE FORMAT(""" SELECT PARSE_DATE('%%Y%%m%%d', event_date) event_timestamp, event_name, user_pseudo_id, user_first_touch_timestamp, device.category, device.mobile_brand_name, device.mobile_model_name, device.web_info.hostname, geo.country, geo.city, traffic_source.name, traffic_source.medium, traffic_source.source FROM %s""", TABLE.tables); END FOR;
为什么之前的转义尝试没生效?
你提到尝试过转义百分号和原始字符串,但可能用了错误的转义方式:
- BigQuery的FORMAT函数不支持用反斜杠
\转义百分号,它只认双重百分号%%作为转义规则; - 其他语言里的"原始字符串"语法(比如前缀
r)在BigQuery的字符串体系里不生效,BigQuery的字符串转义规则中,百分号的转义只能通过%%实现。
这样修改后,FORMAT生成的SQL语句里,PARSE_DATE的参数就会是正确的'%Y%m%d',不会再触发格式说明符的错误。
内容的提问来源于stack exchange,提问作者Sandy Lee
相关产品推荐
相关产品推荐

