【问题标题】:Missing row with Google BigQuery when using permanent external table pointing to GCS file使用指向 GCS 文件的永久外部表时,Google BigQuery 缺少行
【发布时间】:2018-07-24 07:17:07
【问题描述】:

我正在使用 BigQuery 并尝试使用它来查询 Google Cloud Storage 存储桶中的 CSV 文件。我遇到了一些奇怪的行为——仅当 CSV 中有 3 行,并且第一行在任何字段中都包含一个字符串时——在查询表时,第一行丢失了。

重现步骤:

创建myfile.csv:

testin,2,2
testing3,3,4

将文件复制到 GCS:

gsutil cp myfile.csv gs://bucket/

创建指向gs://bucket/myfile.csv的外部表:

bq mk --external_table_definition=Field1:STRING,Field2:STRING,Field3:INTEGER@CSV=gs://bucket/myfile.csv dataset.table

查询表以确保其正常工作:

bq query "SELECT * FROM dataset.table;"

应该输出以下内容:

Waiting on biquery_job_id_1234567 ... (0s) Current 
status: DONE
+----------+--------+--------+
|  Field1  | Field2 | Field3 |
+----------+--------+--------+
| testin   | 2      |      2 |
| testing3 | 3      |      4 |
+----------+--------+--------+

一切顺利,可以继续解决这个问题..

myfile.csv 更改为如下所示:

1,h,3
testin,2,2
testing3,3,4

覆盖gs://bucket/myfile.csv:

gsutil cp myfile.csv gs://bucket/

再次查询dataset.table

bq query "SELECT * FROM dataset.table;"

输出:

Waiting on bigquery_job_78901234 ... (0s) Current status: DONE
+----------+--------+--------+
|  Field1  | Field2 | Field3 |
+----------+--------+--------+
| testin   | 2      |      2 |
| testing3 | 3      |      4 |
+----------+--------+--------+

让我们确保 GCS 文件具有正确的数据:

gsutil cat gs://bucket/myfile.csv

输出:

1,h,3
testin,2,2
testing3,3,4

好的,有趣。

更改顶行的中间值,使myfile.csv 如下所示:

1,2,3
testin,2,2
testing3,3,4

覆盖 GCS 文件:

gsutil cp myfile.csv gs://bucket/

查询表:

bq query "SELECT * FROM dataset.table;"

输出:

Waiting on bigquery_job_4567890 ... (0s) Current status: DONE
+----------+--------+--------+
|  Field1  | Field2 | Field3 |
+----------+--------+--------+
| 1        | 2      |      3 |
| testin   | 2      |      2 |
| testing3 | 3      |      4 |
+----------+--------+--------+

如果第一行在前 2 个字段中包含一个字符串,有没有人知道在什么情况下可能会导致第一行丢失?

谢谢,

【问题讨论】:

  • 即使没有设置 skipLeadingRows 第一行也不应该被跳过,因为它与表模式匹配。您可以在公共 BigQuery 问题跟踪器 issuetracker.google.com/issues/… 中打开错误
  • @Daria,会的。谢谢。

标签: google-cloud-platform google-bigquery


【解决方案1】:

有一个名为csvOptions.skipLeadingRows的参数,用于指定CSV文件中“标题行”的数量。

如果未指定 skipLeadingRows,BigQuery 会尝试自动检测标题行数。手动将 skipLeadingRows 设置为 0 应该会禁用此行为。

【讨论】:

  • 解决了这个问题。谢谢。但正如@Daria 所提到的,这似乎是某种超出此修复的意外行为。请查看我在他们的issue tracker 上打开的问题。
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多