【问题标题】:How to import CSV data from Google Drive/Google Sheets into BigQuery correctly如何将 CSV 数据从 Google Drive/Google Sheets 正确导入 BigQuery
【发布时间】:2019-06-03 11:47:34
【问题描述】:

我正在尝试将放置在 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 上的数据:

如果我查看 Google Drive 中的文件预览,我会看到损坏的数字,如图 2 所示:但是,如果我直接从 GDrive 下载文件并使用 Notepad++ 打开它,文件完全符合预期:带逗号的数字作为小数点符号和制表符作为列分隔符...

在创建 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

【问题讨论】:

  • 您能否分享原始数据文件的 sn-p(例如 5 行)并混淆/编辑任何敏感字段?很难以不同的方式处理屏幕截图和不同的软件格式/munges。
  • 您能否查看 BigQuery 作业历史记录以了解更详细的错误?这通常会更详细地说明遇到错误的位置以及您可能正在处理的故障类型。
  • @GrahamPolley 我用文件样本编辑了我的帖子
  • 我可能找到了正确导入文件的锻炼方法 - 我将逗号替换为小数点限制器。但这不是很方便 - 也许有人知道,如何使用逗号导入此类数据作为十进制限制器?

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


【解决方案1】:

经常发生的情况是驱动表上的语言设置不同,并且在“。”周围乱扔。和“,”。

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

【讨论】:

  • 将语言设置从德语更改为美国帮助我正确导入了带有小数点数字的 csv。谢谢!
【解决方案2】:

我已将您的数据复制到 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`

正确使用小数

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2017-09-24
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多