BQ查询返回40k条记录,写入文件仅100条的原因排查
BigQuery查询导出仅100条记录的原因及解决办法
问题描述
我在Shell脚本中实现了BigQuery查询,脚本内容如下:
bq query --quiet -- format=csv --use legacy_sql = false \ "\nSelect table_id from \project_name.table_name\ Where table_id not like 'object_name'\n" | sed '1d' > bq_table_list.txt
执行这条SELECT查询实际能返回40000条记录,但写入文件bq_table_list.txt的仅有100条。查询语句本身:
Select table_id from project_name.table_name Where table_id not like 'object_name' -- 40k records
核心原因
参数格式错误:脚本中两处参数写法不符合
bq命令规范,导致命令未正确解析参数,触发默认返回限制:-- format=csv:--与format之间多余空格,正确应为--format=csv--use legacy_sql = false:参数名应为--use_legacy_sql(下划线分隔),且等号与参数值间不能有空格,正确应为--use_legacy_sql=false
bq query默认行数限制:即使参数修正,bq query默认针对交互式场景设置了返回行数上限(默认100条),未指定的话只会返回前100条结果。
解决办法
方法1:修正参数并指定最大返回行数
直接在bq query中添加--maximum_rows参数,设置足够容纳全量数据的数值:
bq query --quiet --format=csv --use_legacy_sql=false --maximum_rows=100000 \ "Select table_id from project_name.table_name Where table_id not like 'object_name'" | sed '1d' > bq_table_list.txt
方法2:改用bq extract(适合大量数据导出)
bq extract是BigQuery官方推荐的大量数据导出工具,效率更高,步骤如下:
# 1. 将查询结果保存到临时表 bq query --quiet --use_legacy_sql=false --destination_table=project_name.temp_table \ "Select table_id from project_name.table_name Where table_id not like 'object_name'" # 2. 导出临时表数据到本地文件 bq extract --format=csv project_name.temp_table bq_table_list.txt # 3. 可选:清理临时表 bq rm -f project_name.temp_table
内容的提问来源于stack exchange,提问作者Rahul Nakod
相关产品推荐
相关产品推荐

