CSV 值的 bigquery 架构

Posted

技术标签:

【中文标题】CSV 值的 bigquery 架构【英文标题】:bigquery schema for CSV values 【发布时间】:2014-05-06 20:52:28 【问题描述】:

我正在尝试使用 bq 命令行工具将数据加载到 bigquery 中。数据采用以下方案(TSV):

time_stamp:INTEGER
id:INTEGER
url:STRING (-- unused/ignore)
domain:STRING
keyword:STRING
normalized_key:STRING (-- comma separated list)
is_natural:BOOLEAN (as "t"/"f")
category_code:STRING
p_id:STRING

但我收到以下错误

File: 0 / Line:120642 / Field:5: Data between close double quote
(") and field separator: field starts with: <massive >
File: 0 / Line:127690 / Field:1: Value cannot be converted to
expected type.

我的理解是

文件:0 / 行:120642 / 字段:5:关闭双引号之间的数据 (") 和字段分隔符:字段以:--> 这是因为 Field:5 的值是逗号分隔列表

文件:0 / 行:127690 / 字段:1:值无法转换为 预期类型。 --> 实际字段值的类型与预期不同。

如何让 bigquery 将逗号分隔的列表读取为 Field:5 值并忽略字段值与预期类型不同的记录

【问题讨论】:

发现第二个错误:--max_bad_records=xx,但没有用。 用大数替换xx。这就是我所做的:) 在此之前,为了解决第一个错误,我使用 sed 删除了双引号。 现在我想删除第一列中以非整数开头的记录。 另一种选择:将所有内容导入为字符串,稍后在 BigQuery 中进行过滤和转换 【参考方案1】:

尝试将引号字符设置为 '\0' 或未出现在表格中的内容。 TSV 文件通常不引用字段(即您不会有看起来像 a\t"foo bar"\tbaz 的行)所以这应该没问题,除非您有应该引用的制表符(这在 TSV 中不太可能)。

【讨论】:

感谢您的建议。我通过从记录中删除引号并删除以非整数值开头的记录来解决它。

以上是关于CSV 值的 bigquery 架构的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 如何在不使用列名作为值的情况下导入 CSV?

需要帮助创建将 CSV 加载到 BigQuery 的架构

Google-BigQuery - CSV 文件的架构解析

BigQuery 自动检测架构导致加载 Google Drive CSV 失败

为 Bigquery API 格式化 CSV 架构

让 Google BigQuery 从 csv 字符串文件中推断架构