代码之家  ›  专栏  ›  技术社区  ›  Avalokitesvara

Simba BigQuery驱动程序未使用缓存

  •  0
  • Avalokitesvara  · 技术社区  · 3 年前

    我使用Simba BigQuery ODBC驱动程序从BigQuery读取数据。SQL语句运行良好,我能够检索结果。但是,如果我多次运行同一个查询(它们只是简单的select语句),那么每次都会执行它们(因此会计费),而不是从缓存中检索。我的理解是,只有第一次应该执行,后面的尝试只是打到缓存并给我结果。

    我已明确设置ODBC设置为使用缓存(UseQueryCache=1)。我不知道为什么后续的查询没有到达缓存。

    是与我的ODBC设置有关,还是Simba通常根本不使用缓存?

    0 回复  |  直到 3 年前
        1
  •  1
  •   Nestor    3 年前

    没有缓存查询的几个因素是:

    • 在作业配置、Google Cloud控制台、bq命令行工具或API中指定目标表时
    • 如果任何引用的表或逻辑视图自上次缓存结果后发生了更改
    • 当查询引用的任何表最近接收到流插入时(表在写优化存储中有数据),即使没有新行到达
    • 如果查询使用非确定性函数;例如,日期和时间函数,如CURRENT_TIMESTAMP()和CURRENT_date,以及其他函数,如SESSION_USER(),它会根据执行查询的时间返回不同的值
    • 如果使用通配符查询多个表
    • 如果缓存的结果已过期;典型的缓存生存期是24小时,但缓存的结果是尽最大努力的,可能会很快失效
    • 如果查询针对云存储以外的外部数据源运行。(缓存的查询结果支持云存储上的GoogleSQL查询。)
    • 如果查询针对受列级安全性保护的表运行,则可能不会缓存结果。
    • 如果查询针对受行级安全性保护的表运行,则不会缓存结果。

    只要缓存的查询存储在临时表中,就不会为这些临时表收费。

    在BQ控制台中,我们可以在运行查询(缓存结果)后通过检查作业信息选项卡来验证这一点:

    enter image description here

    您可以访问 link here 以获取其文档。