[英]How to import CSV data from Google Drive/Google Sheets into BigQuery correctly
我正在嘗試將放置在 Google Drive 中的 CSV 文件導入 BigQuery 並失敗。 Error while reading table, error message: CSV table encountered too many errors, giving up
錯誤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 表時,我手動添加列並為其分配字段類型。 對於包含數字的列,我測試了integer
、 float
和numeric
任意組合 - 總是相同的錯誤。
問:我應該如何格式化 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
經常發生的情況是驅動器表上的語言設置不同,並且會出現“。” 和 ”,”。
您可以在文件 -> 電子表格設置中查看/更改此設置
我已將您的數據復制到 Google 表格中,然后我將它與選項卡一起導出為字段分隔符,並且我能夠通過指定字段分隔符來加載數據,並且在創建表時我沒有遇到任何問題(但是數字沒有將逗號作為十進制分隔符,因為它總是用作千位分隔符)。 因此,我將所有列作為字符串導入,然后應用了如下所示的REGEX_REPLACE :
SELECT CAST(REGEXP_REPLACE(siberechnet, ",", ".") as numeric) as new_col FROM `project.dataset.table`
正確使用十進制數
希望它對您的用例有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.