引号和字段分隔符之间的数据

时间:2012-09-14 04:59:16

标签: google-bigquery

在下面给出的示例中,未上传最后一行。我收到一个错误:

Data between close double quote (") and field separator: 

这看起来像一个错误,因为管道符号之间的所有数据都应该被视为一个字段。

架构:一:字符串,两位:字符串,三位:字符串,四位:字符串

上传文件:

This | is | test only | to check quotes
second | line | "with quotes" | no text
third line | with | "start quote" and | a word after quotes

处理上面的第一行和第二行。但不是第三个。


更新

有些人可以解释为什么以下工作除了第三行

This | is | test only | to check quotes
second | line | "with quotes" | no text
third line | with | "start quote" and | a word after quotes
forth line | enclosed | {"GPRS","MCC_DETECTED":false,"MNC_DETECTED":false} | how does this work?
fifth line | with | {"start quote"} and | a word after quotes

对此可以有一些奇特的解释。从最终用户的角度来看,这是荒谬的。

6 个答案:

答案 0 :(得分:9)

来自CSV RFC4180 page“如果使用双引号括起字段,则必须通过在其前面加上另一个双引号来转义出现在字段内的双引号。”

你可能想这样做:

This | is | test only | to check quotes
second | line | "with quotes" | no text
third line | with | " ""start quote"" and " | a word after quotes

有关我们的CSV输入格式here的更多信息。

答案 1 :(得分:4)

--引用效果很好。

bq load 
--source_format CSV --quote "" 
--field_delimiter \t 
--max_bad_records 10 
-E UTF-8   
destination table
Source files 

答案 2 :(得分:1)

上传数据时也可以使用其他标志。我使用带有以下标志的bq工具

bq load -F , --source_format CSV --skip_leading_rows 1 --max_bad_records 1 --format csv -E UTF-8 yourdatset gs://datalocation.

答案 3 :(得分:1)

尝试以下方法:

  • 将MySQL备份文件加载到Cloud SQL实例中。
  • 直接从MySQL中读取BigQuery中的数据。

更长的方法:

答案 4 :(得分:0)

答案 5 :(得分:0)

每次尝试使用bq shell加载。

我必须加载1100列。在尝试使用所有错误选项的控制台时,它引发了很多错误。忽略控制台中的错误意味着丢失记录。

因此尝试使用shell并成功加载所有记录。

尝试以下操作:

bq load --source_format CSV --quote "" --field_delimiter \t --allow_jagged_rows --ignore_unknown_values --allow_quoted_newlines --max_bad_records 10 -E UTF-8 {dataset_name}.{table_name} gs://{google_cloud_storage_location}/* {col_1}:{data_type1},{col_2}:{data_type2}, ....

参考文献:

https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv#bigquery_load_table_gcs_csv-cli

https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv#csv-options