【问题标题】:Disable cache while running SQL - Google Big Query运行 SQL 时禁用缓存 - Google Big Query
【发布时间】:2018-11-15 06:14:52
【问题描述】:

需要一些关于我们在 Google Big Query 中面临的缓存问题的建议。

我正在使用 Talend tBigQueryInput 组件来运行 Google Big Query SQL。但是 SQL 没有返回当前数据。我们怀疑它正在从缓存中返回陈旧的数据。

是否有一个禁用缓存选项可以嵌入到 SQL 中,以便我们说 Big Query 严格不从缓存中获取?

【问题讨论】:

    标签: sql caching google-bigquery talend


    【解决方案1】:

    想到两个快速的想法:

    • 您可以检查 UI 中的作业历史记录以查看 Talend 正在运行的作业。从统计数据中,他们将报告结果是否来自缓存。您还可以检查审核日志以获取此信息。

    • 您可以利用非确定性方面执行更改的测试查询,这将确保无法从缓存中提供结果。 CURRENT_TIMESTAMP()CURRENT_DATE() 等函数应该足以满足此目的。

    通过扫描公共 Talend 文档,我可以看到没有配置设置映射到将查询作业的 configuration.query.useQueryCache 设置为 false,这是您请求的行为。

    【讨论】:

    • 嗨 Shollyman,感谢您的回复。对于第 1 点,您能否说明我可以在 UI 中的哪个位置看到有关从缓存提供的结果的统计信息?在 Google Big Query--> Job History 中。通过 Talend 运行的作业没有作业历史记录。同样对于那里可用的作业,如果数据来自缓存,它也没有说明。我还可以从哪里获得审计日志信息。非常感谢您在这方面的帮助。
    • 对不起,我不清楚。我所说的 UI 是指 BigQuery Web UI,而不是 Talend 界面,它公开了作业历史信息。如果您使用云控制台中的界面,左侧导航中的查询历史链接将公开在项目中运行的查询。 cloud.google.com/bigquery/audit-logs 提供有关 BigQuery 审核日志功能的更多信息。
    【解决方案2】:

    是否有禁用缓存选项可以嵌入到 SQL 中

    不!查询中没有这样的选项

    同时,为了强制不使用缓存,您可以在查询中添加如下内容

    WHERE RAND() < 2    
    

    这只是一个愚蠢的例子 - 但你应该有一个想法:o)

    【讨论】:

    • 嗨,米哈伊尔,感谢您的回复。您能否解释一下使用 RAND()
    • 查询结果缓存24小时有效,如果底层数据没有改变,查询本身没有改变,结果是确定性的,就使用这个缓存。通过使用非确定性函数,您将有效地强制 bq 引擎不使用缓存结果 - 请参阅更多关于 Exceptions to query caching
    • ... 显然因为 RAND() 总是小于 1 它不会影响您的查询结果 :o)
    • 这解释了吗?有意义吗?
    • 嗨,米哈伊尔,是的,现在这很有意义。让我将此条件添加到 SQL 并监视查询一段时间。感谢您的帮助。
    【解决方案3】:

    另一种选择是创建 UDF(User Defined Functions)。

    如果不执行 UDF,则不会通过 BigQuery WebUI 进行查询缓存。

    例如

    CREATE TEMP FUNCTION
      FOO_BAR() AS (CONCAT('FOO', 'BAR'));
    
    <Your Uncached Query>
    

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多