如何让BQ CLI仅输出查询数据,去除初始化提示文本?
如何去除bq query命令输出中的初始化配置提示,仅保存JSON查询结果
问题场景
执行以下gcloud CLI的BigQuery查询命令后,输出的data.json文件开头混入了BigQuery初始化配置提示文本,仅后续内容是目标JSON格式的查询数据:
bq query --use_legacy_sql=false --format json 'select * from `ga4-extract.analytics_123456789.events_20220722` limit 1;' > data.json
尝试过--batch=true、--quiet=true、--headless=true参数均无法去除该提示,需要仅将查询数据保存到文件中。
解决方案
这些初始化配置提示属于标准错误流(stderr)输出,而查询结果属于标准输出流(stdout)。通过将stderr重定向到系统空设备,即可只保留stdout的JSON结果到文件中,具体命令根据操作系统调整:
Linux/macOS
bq query --use_legacy_sql=false --format json 'select * from `ga4-extract.analytics_123456789.events_20220722` limit 1;' > data.json 2>/dev/null
Windows 命令提示符(CMD)
bq query --use_legacy_sql=false --format json "select * from `ga4-extract.analytics_123456789.events_20220722` limit 1;" > data.json 2>NUL
Windows PowerShell
bq query --use_legacy_sql=false --format json 'select * from `ga4-extract.analytics_123456789.events_20220722` limit 1;' > data.json 2>$null
原理说明
bq query命令的初始化提示信息会输出到stderr,而格式化后的JSON查询结果输出到stdout。原命令仅重定向了stdout到文件,stderr的内容仍会被写入文件(部分环境下默认合并流)。通过2>/dev/null(或对应系统的空设备路径)将stderr的内容丢弃,就能确保文件中仅保留目标JSON数据。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

