【发布时间】: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