【问题标题】:Flexible schema with Google Bigquery使用 Google Bigquery 的灵活架构
【发布时间】:2013-12-11 02:06:04
【问题描述】:

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

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

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

如果有帮助的话,我正在使用 BigQuery API 来加载数据。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以使用“allowJaggedRows”参数,该参数会将行尾不存在的值视为空值。因此,您的架构可能有 8 列,并且所有没有该值的行都将为空。

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

    我已经提交了一个文档错误,以便更容易找到。

    【讨论】:

    • 像魅力一样工作!谢谢
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果带有 8 个参数的行数相当少,并且您可以“牺牲”这些行,那么您可以传递一个合理数量的 maxBadRecords 参数。在这种情况下,所有“坏”行(即不符合架构的行)都将被忽略并且不会被加载。

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

      【讨论】:

      • 我没查过,但据我所知,大概是数据的10%。需要牺牲太多信息,尤其是考虑到我们正在为接收这些数据付费。
      • 那太糟糕了。无论如何,这是值得评论的。在这种情况下,恐怕您需要通过将空列添加到所有行或将其从存在的行中删除来规范化行
      【解决方案4】:

      找到一个可行的“hack”。 使用七列架构为每个文件运行一个作业,然后对所有具有八列架构的文件运行另一个作业。其中一项工作将成功完成。节省我单独编辑每个文件并重新上传 1000 多个文件的时间。

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 1970-01-01
        • 2014-05-09
        • 2023-02-01
        • 1970-01-01
        • 2010-09-16
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多