如何将CSV数据从Google云端硬盘/ Google表格正确导入到BigQuery

时间:2019-06-03 11:47:34

标签: csv google-drive-api google-bigquery

我正在尝试将放置在Google云端硬盘中的CSV文件导入BigQuery并失败。我收到错误消息Error while reading table, error message: CSV table encountered too many errors, giving up

我想知道是什么引起了错误。 CSV文件在A,B和D列中包含字符串,在C列中包含整数,在E和F列中浮动。定界符是制表符\t

虽然CSV文件包含的数据类似于图片1:

So looks the data in Excel

如果我查看Google云端硬盘中的文件预览,则会看到虚线,如图像2所示:但是,如果我直接从GDrive下载文件并用Notepad ++打开,则文件完全符合预期:数字带有逗号。作为小数点符号和制表符作为列定界符...

enter image description here

在创建BigQuery表时,我手动添加了列,并为其分配了字段类型。对于包含数字的列,我测试了integerfloatnumeric的任意组合-始终是相同的错误。

:我应该如何格式化CSV文件以使导入成为可能?

以下是该文件的示例:

Domain  Keywords    RP  Brand   SI  SiBerechnet
example.de  accura versicherung 1   accura  293,9   0,00244913
example.de  accura versicherung erfahrung   1   accura  63,9    0,00053249
example.de  accura versicherung für wohnmobile  1   accura  43,9    0,00036583
example.de  accura versicherung keine wohnmobile mehr   1   accura  53,9    0,00044916
example.de  accura versicherungsmakler  1   accura  83,9    0,00069916
example.de  accura versicherung test    1   accura  43,9    0,00036583
example.de  accura versicherung wohnmobil   1   accura  73,9    0,00061582
example.de  accura wohnmobilversicherung erfahrungen    1   accura  73,9    0,00061582
example.de  aufgaben innendienst versicherung   75  non brand   0,133333333 0,00000111
example.de  aufgaben versicherung innendienst   59  non brand   0,169491525 0,00000141
example.de  basler versicherung kfz telefonnummer   98  basler  0,102040816 0,00000085
example.de  basler versicherung kundenservice   96  basler  0,104166667 0,00000087
example.de  basler wohnmobilversicherung    8   basler  3,86    0,00003217
example.de  bergungskosten unfallversicherung   37  non brand   0,810810811 0,00000676
example.de  berufsunfähigkeitsversicherung bei bürojob  84  non brand   0,238095238 0,00000198
example.de  berufsunfähigkeitsversicherung bürojob  83  non brand   1,084337349 0,00000904
example.de  betriebshaftpflicht für hausmeisterservice  87  non brand   0,114942529 0,00000096
example.de  betriebshaftpflicht für hausverwalter   29  non brand   1,034482759 0,00000862
example.de  betriebshaftpflicht hausmeister 87  non brand   0,114942529 0,00000096
example.de  betriebshaftpflicht hausverwalter   26  non brand   0,384615385 0,00000321
example.de  betriebsunterbrechungsversicherung freiberufler 46  non brand   0,217391304 0,00000181
example.de  braucht eine krankenschwester eine diensthaftpflichtversicherung    15  non brand   2,706666667 0,00002256
example.de  campingfahrzeug versicherung    39  non brand   1,025641026 0,00000855
example.de  dienst haftpflicht  99  non brand   0,303030303 0,00000253
example.de  diensthaftpflicht öffentlicher dienst   55  non brand   0,545454545 0,00000455
example.de  diensthaftpflichtversicherung   57  non brand   22,80701754 0,00019006
example.de  dienst haftpflichtversicherung  84  non brand   0,238095238 0,00000198
example.de  diensthaftpflichtversicherung beamte    90  non brand   0,555555556 0,00000463
example.de  diensthaftpflichtversicherung für soldaten  28  non brand   0,357142857 0,00000298
example.de  diensthaftpflichtversicherung kosten    80  non brand   0,5 0,00000417
example.de  diensthaftpflichtversicherung öffentlicher dienst   51  non brand   0,980392157 0,00000817
example.de  diensthaftpflichtversicherung öffentlicher dienst angestellte   63  non brand   0,158730159 0,00000132
example.de  diensthaftpflichtversicherung polizei   69  non brand   0,724637681 0,00000604
example.de  diensthaftpflichtversicherung soldaten  26  non brand   0,769230769 0,00000641
example.de  einbauküche hausrat oder gebäude scheidung  31  non brand   0,64516129  0,00000538
example.de  einbauküche hausratversicherung oder gebäudeversicherung    12  non brand   2,643333333 0,00002203

2 个答案:

答案 0 :(得分:1)

经常发生的情况是,驱动器表上的语言设置是不同的,并且会出现“。”的错误。和“,”。

您可以在文件->电子表格设置中查看/更改

答案 1 :(得分:0)

我已将您的数据复制到Google表格中,然后使用标签作为字段分隔符将其导出,并且可以通过指定field delimiter来加载数据,但我没有遇到任何问题该表已创建(但是,数字used as a thousand separator always并不用逗号作为小数点分隔符)。因此,我将所有列都导入为字符串,然后像下面这样应用REGEX_REPLACE

SELECT CAST(REGEXP_REPLACE(siberechnet, ",", ".") as numeric) as new_col FROM `project.dataset.table`

正确使用十进制数字

希望它对您的用例有所帮助。