BigQuery 从 bq 命令行工具加载数据 - 如何跳过标题行

Posted

技术标签:

【中文标题】BigQuery 从 bq 命令行工具加载数据 - 如何跳过标题行【英文标题】:BigQuery loading data from bq command line tool - how to skip header rows 【发布时间】:2017-09-28 21:48:16 【问题描述】:

我有一个带有标题行的 CSV 数据文件,用于填充 BigQuery 表:

$ cat dummy.csv
Field1,Field2,Field3,Field4
10.5,20.5,30.5,40.5
10.6,20.6,30.6,40.6
10.7,20.7,30.7,40.7

使用 Web UI 时,有一个文本框,我可以在其中指定要跳过的标题行数。但是,如果我使用 bq 命令行工具将数据上传到 BigQuery,我没有执行此操作的选项,并且总是收到以下错误:

$ bq load my-project:my-dataset.dummydata dummy.csv Field1:float,Field2:float,Field3:float,Field4:float
Upload complete.
Waiting on bqjob_r7eccfe35f_0000015e3e8c_1 ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job 'my-project:bqjob_r7eccfe35f_0000015e3e8c_1': CSV table encountered too many errors, giving up. Rows: 1;
errors: 1.
Failure details:
- file-00000000: Could not parse 'Field1' as double for field Field1
(position 0) starting at location 0

bq command line tool quickstart documentation 也没有提到任何跳过标题的选项。

一个简单/明显的解决方案是编辑 dummy.csv 以删除标题行,但如果指向 Google Cloud Storage 上的 CSV 文件而不是本地文件 dummy.csv,这不是一个选项。

这可以通过网络界面和Python API 来实现,因此也应该可以通过bq 工具来实现。

【问题讨论】:

【参考方案1】:

检查bq help load 显示--skip_leading_rows 选项:

--skip_leading_rows : The number of rows at the beginning of the source file to skip.
    (an integer)

还在bq command line tool documentation 中找到了此选项(与上面链接的快速入门文档相同)。

--skip_leading_rows=1 添加到bq load 命令就像一个魅力。

这里是成功的命令:

$ bq load --skip_leading_rows=1 my-project:my-dataset.dummydata dummy.csv Field1:float,Field2:float,Field3:float,Field4:float
Upload complete.
Waiting on bqjob_r43eb07bad58_0000015ecea_1 ... (0s) Current status: DONE

【讨论】:

以上是关于BigQuery 从 bq 命令行工具加载数据 - 如何跳过标题行的主要内容,如果未能解决你的问题,请参考以下文章

如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?

使用命令行将数据从 BigQuery 加载到 Google 表格中

用于扩展或增强 bq 命令行的 Google BigQuery bq 命令行 SDK

使用 bq 将数据加载到 BigQuery 的自定义日期格式?

如何在 BQ 命令行中设置 Bigquery 需要分区过滤器

使用命令行工具将数据从 Datastore 加载到 BigQuery 时,是啥决定了包含子字段?