使用Google Bigquery的灵活架构

时间:2013-11-26 04:24:09

标签: google-bigquery

我有大约1000个有七列的文件。其中一些文件有几行有第八列(如果有数据)。

将此加载到BigQuery的最佳方法是什么?我是否必须找到并编辑所有这些文件 - 在所有文件中添加一个空的第八列 - 从所有文件中删除第八列?我不关心这一栏中的价值。

有没有办法在架构中指定8列,并在没有可用数据时为第8列添加空值。

如果可能有帮助,我正在使用BigQuery API加载数据。

4 个答案:

答案 0 :(得分:3)

您可以使用'allowJaggedRows'参数,该参数将行末尾的不存在值视为空值。因此,您的架构可以有8列,而没有该值的所有行都将为空。

此处记录了这些内容:https://developers.google.com/bigquery/docs/reference/v2/jobs#configuration.load.allowJaggedRows

我提交了一个doc错误,以便更容易找到。

答案 1 :(得分:1)

如果您的日志是JSON,您可以定义一个可空字段,如果它没有出现在记录中,它将保持为空。 我不确定它如何与CSV一起使用,但我认为你必须拥有所有字段(甚至是空的)。

答案 2 :(得分:0)

如果您不想担心必须更改CSV值(这将是我的建议),这里有一个可能的解决方案

如果具有八个参数的行数相当小并且您可以“牺牲”这些行,则可以传递具有合理数量的maxBadRecords参数。在这种情况下,所有“坏”行(即不符合模式的行)都将被忽略,并且不会被加载。

如果您使用bigquery获取统计信息,并且可以忽略这些行,则可以解决您的问题。

答案 3 :(得分:0)

找到了可行的“黑客”。 使用七列模式为每个文件执行作业,然后在具有八列模式的所有文件上运行另一个作业。其中一项工作将顺利完成。节省我单独编辑每个文件的时间并重新上载1000多个文件。