我有大约1000个有七列的文件。其中一些文件有几行有第八列(如果有数据)。
将此加载到BigQuery的最佳方法是什么?我是否必须找到并编辑所有这些文件 - 在所有文件中添加一个空的第八列 - 从所有文件中删除第八列?我不关心这一栏中的价值。
有没有办法在架构中指定8列,并在没有可用数据时为第8列添加空值。
如果可能有帮助,我正在使用BigQuery API加载数据。
答案 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多个文件。