【问题标题】:Indexes on BigQuery TableBigQuery 表上的索引
【发布时间】:2015-04-20 10:26:11
【问题描述】:

我有一个用例,我们在 BigQuery 中有几个表。 现在我想在 BigQuery 表中的一列上实现索引。 但我没有找到足够的文档来做到这一点。我发现一些博客和帖子提到 BigQuery 不支持索引。 请帮助我找到可以帮助我在 BigQuery 上实现索引的博客或帖子。提前致谢。

【问题讨论】:

  • 如果您能描述为什么需要索引,即您的查询将是什么样的形状,将会有所帮助。 BigQuery 中可能还有其他一些机制(手动或自动),它们可能会产生您期望从数据库中的传统索引获得的性能。
  • 嗨 Mosha,在我的用例中,截至目前,我们有大约 50 万条记录,我们根据用户选择在 UI 中显示这些记录(还包括分页)。这些选择基于同一张表中的 8 个不同的列。到目前为止,我们的查询给出了令人满意的结果,但我担心将来随着记录数量的增加,我现在的数量大约是 10-100 倍。因此正在考虑找到一种方法来实现索引或其他方法来提高性能。

标签: cloud google-bigquery


【解决方案1】:

除了分区之外,还可以使用多个表,例如每个表都有一天的数据量。 BigQuery 一次最多可以查询 1000 个表,因此应该涵盖大多数情况,并且让您保持成本不变。

【讨论】:

    【解决方案2】:

    2019 年更新:查看 clusters improve your querying times and data scanned:


    正如 cmets 中所述,此问题与“如果我的数据大 100 倍,BigQuery 将如何处理我的数据”相关联。在处理传统数据库时,索引是正确的解决方案,但 BigQuery 有所不同:随着数据量的增长,BigQuery 会添加更多服务器,从而保持性能几乎不变。

    换句话说,随着数据的增长,您应该预计成本会线性增加,而性能几乎保持不变。不需要索引。这也是人们选择 BigQuery 进行分析工作的重要原因之一。

    (当然,这完全取决于您的具体用例,请测试这些断言并反馈!)

    【讨论】:

    • 感谢 Felipe 的投入。将使用 more 进行测试并在此处更新。
    • 嗨 Felipe,我可以从这个答案中推断出大查询只会在您处理超过一定大小的数据集时给您带来性能提升吗?例如,我目前在一个表中有 8000 万条记录,一次表扫描似乎在大约 6 秒内完成,这比我可以在笔记本电脑上使用的各种方法慢。但是,如果我有 8 亿条记录,那么在 BigQuery 上仍然需要大约 6 秒?
    • @Hexatonic - 是的!您正在运行哪种扫描?例如,我在 2 秒内看到了 10 亿行。
    • 我还看到 BigQuery 的性能不佳,其中索引将成为关系数据库中的解决方案。例如,搜索约 5000 万行以查找特定列值 (WHERE myColumn = "searchvalue")。可能还有哪些其他解决方案?
    • Oleg - 这是 BigQuery。一切都是全表扫描。
    【解决方案3】:

    您可以在创建表时使用高级选项中提供的集群顺序参数在 bigquery 表中创建索引。此集群选项仅适用于分区表。 请点击以下链接了解更多详情: link to google documentation

    【讨论】:

      【解决方案4】:

      BigQuery 中“索引”的收盘价是Partitioned Tables。目前它只支持按日期分区。

      分区表是一种特殊的表,它被分成多个段, 称为分区,可以更轻松地管理和查询数据。 通过将大表划分为较小的分区,您可以改进 查询性能并减少计费的字节数 限制扫描的数据量。 BigQuery 优惠 日期分区表,这意味着该表被划分为一个 每个日期都有单独的分区。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 2016-03-10
        • 2019-01-25
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        相关资源
        最近更新 更多