Windows下执行bq load命令指定管道分隔符时遇错误
解决Windows下bq load无法识别管道符(|)分隔符的问题
我之前也踩过Windows CMD特殊字符传递的坑,你的问题根源很明确:管道符|是Windows CMD的内置特殊运算符,直接写-F"|"会被CMD优先解析成管道命令,而不是作为bq load的参数传递给程序——说白了bq根本没收到正确的分隔符设置,后续处理自然会出问题。
给你两个靠谱的解决方案:
方案1:在CMD中用^转义管道符
Windows CMD里用^作为特殊字符的转义符,把管道符转义后再传递给bq命令:
C:\Windows>bq load -F"^|" "cmdwh_bq_prod.testtabPIPE" "c:\temp\testPIPE.txt" PlatformVersion:int64,AnalyticsSessionID:int64,OutletGroup:string
这里的^|会被CMD解析成纯|,正确传递给bq的-F参数,让它识别管道符作为分隔符。
方案2:改用PowerShell执行命令
PowerShell对特殊字符的处理逻辑和CMD不同,你可以直接用单引号包裹分隔符,避免转义麻烦:
bq load -F'|' "cmdwh_bq_prod.testtabPIPE" "c:\temp\testPIPE.txt" PlatformVersion:int64,AnalyticsSessionID:int64,OutletGroup:string
或者用PowerShell的转义符`(反引号)处理:
bq load -F"`|" "cmdwh_bq_prod.testtabPIPE" "c:\temp\testPIPE.txt" PlatformVersion:int64,AnalyticsSessionID:int64,OutletGroup:string
至于为什么用空格分隔符没问题?因为空格在CMD里只是参数分隔符,不属于需要转义的特殊运算符,所以直接写-F" "能被正确识别。
按照上面的方案修改命令后,bq就能正确解析你的管道分隔符文件,后续处理异常也会消失啦。
内容的提问来源于stack exchange,提问作者Ratnesh Sharma
相关产品推荐
相关产品推荐

