如何去除unixODBC连接BigQuery导出CSV的终端样式边框
unixODBC连接BigQuery导出纯净CSV的配置方案
问题背景
- 基于unixODBC + Simba BigQuery ODBC驱动搭建了可用的BigQuery连接,终端通过
isql交互查询时,结果默认返回+---短横线组成的ASCII表格边框,交互示例如下:
root@e0824e3bec23:/# isql -v BigQuery +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select 1 as blah; +---------------------+ | blah | +---------------------+ | 1 | +---------------------+ SQLRowCount returns -1 1 rows fetched
- 尝试通过
-b批处理参数重定向导出CSV时,ASCII边框、连接提示、执行状态信息依然会被写入导出文件,导出操作示例:
root@e0824e3bec23:/# echo "select 1 as bla;" > query.sql root@e0824e3bec23:/# isql -v -b BigQuery < query.sql > results.csv root@e0824e3bec23:/# cat results.csv +---------------------+ | bla | +---------------------+ | 1 | +---------------------+ SQLRowCount returns -1 1 rows fetched
- 带冗余格式的文件无法被LibreOffice等工具正常解析为标准CSV,查阅unixODBC参数、Simba驱动配置均未找到直接关闭格式输出的选项,当前ODBC连接配置如下:
[BigQuery] KeyFilePath=/service.json Driver=/opt/simba/driver/lib/libgooglebigqueryodbc_sb64.so OAuthMechanism=0 Catalog=somecatalog AllowLargeResults=0 LargeResultsDataSetId=_bqodbc_temp_tables LargeResultsTempTableExpirationTime=3600000
可行解决方案
方案1:管道过滤isql输出(无需额外安装组件)
isql本身没有提供关闭ASCII表格排版、屏蔽状态输出的配置项,可直接通过管道命令过滤冗余内容并转换为标准CSV格式,导出命令如下:
isql -b BigQuery < query.sql | grep -v '^[+-]' | grep -v '^SQL' | grep -v 'rows fetched$' | sed 's/^| //;s/ *| */,/g;s/ |$//' > results.csv
命令逻辑:
- 去掉
-vverbose参数,避免输出多余的连接、调试提示 grep -v '^[+-]':过滤所有以+或-开头的表格边框行grep -v '^SQL':过滤SQL执行状态返回行grep -v 'rows fetched$':过滤末尾的行数统计行sed指令:移除每行首尾的|分隔符,将字段间的|替换为逗号,直接输出标准CSV格式
以上述测试SQL为例,最终导出的文件内容为纯结构化数据:
bla 1
方案2:使用unixODBC自带的odbcsv工具原生导出
unixODBC安装包默认附带odbcsv工具,原生支持结构化CSV导出,不会输出任何ASCII表格、状态提示类冗余内容,导出命令如下:
odbcsv -c "DSN=BigQuery" query.sql > results.csv
该命令会直接输出标准逗号分隔的CSV文件,无需额外过滤,稳定性更高。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

