【问题标题】:Using Google BigQuery to run multiple queries back to back使用 Google BigQuery 背靠背运行多个查询
【发布时间】:2017-07-21 07:45:30
【问题描述】:

我目前正在开展一个项目,我正在使用 Google Big Query 从电子表格中提取数据。我对 SQL 很陌生,所以我很抱歉。我目前正在使用以下代码

Select *
From my_data
Where T1 > 1000
And T2 > 2000

所以保持 Select 和 From 相同,我希望能够运行多个查询,我可以在 t1t2 之间不断更改我正在寻找的值。大约 50 种不同的值。我希望 BigQuery 能够背靠背运行这 50 个不同的值。有没有办法做到这一点?谢谢!

【问题讨论】:

标签: mysql sql google-bigquery


【解决方案1】:

我对 SQL 很陌生

...我假设 BigQuery 要么...,所以

以下是不熟悉BigQuery API 和/或different clients 而不是BigQuery Web UI 的新用户的选项之一。

BigQuery Mate 向 BigQuery 网页界面添加参数功能

你需要做的是

  1. 使用保存查询按钮将您的查询保存如下

通知<var_t1><var_t2>
这些是 BigQuery Mate 可识别的参数

  1. 现在您可以设置这些参数
    点击QB Mate,然后点击Parameters进入下面的表格

  2. 现在您可以使用任何想要运行的值来设置参数;
    单击 Replace Parameters OK 按钮,这些值将出现在编辑器中。例如

点击OK后会得到

所以现在你可以运行你的查询了

  1. 要使用新参数运行另一轮,您需要通过单击 Edit Query 按钮
  2. 再次将保存的查询加载到编辑器中

现在重复设置参数等等

您可以找到 BigQuery Mate Chrome 扩展程序here

免责声明:我是该工具的作者和唯一的开发者

【讨论】:

    【解决方案2】:

    您可能有兴趣运行parameterized queries。这个想法是有一个单一的查询字符串,例如:

    SELECT *
    FROM YourTable
    WHERE t1 > @t1_min AND
      t2 > @t2_min;
    

    您将多次执行此操作,每次绑定 t1_mint2_min 参数的不同值。确切的逻辑取决于您使用 client libraries 所通过的 API,并且在我提供的第一个链接中有特定于语言的示例。

    【讨论】:

      【解决方案3】:

      如果您不关心 sql-injection 并且只想迭代地换出查询中的参数,您可能需要研究 mustache 模板语言(在 R 中以“whisker”的形式提供)。

      如果您使用 R,您可以使用 condusco R 包迭代/自动化此类查询。这是一个完整的 R 脚本,它将使用胡须和 condusco 完成这种迭代查询:

      library(bigrquery)
      library(condusco)
      library(whisker)
      
      # create a simple function that will create a query
      # using {{{mustache}}} placeholders for any parameters
      
      create_results_table <- function(params){
      
        destination_table <- '{{{dataset_id}}}.{{{table_prefix}}}_results_{{{year_low}}}_{{{year_high}}}'
      
        query <- '
          SELECT *
          FROM `bigquery-public-data.samples.gsod`
          WHERE year > {{{year_low}}}
            AND year <= {{{year_high}}}
        '
      
      
        # use whisker to swap out {{{mustache}}} placeholders with parameters
        query_exec(
          whisker.render(query,params),
          project=whisker.render('{{{project}}}', params),
          destination_table = whisker.render(destination_table,params),
          use_legacy_sql = FALSE
        )
      
      }
      
      # create an invocation query to provide sets of parameters to create_results_table
      
      invocation_query <- '
        SELECT
          "<YOUR PROJECT HERE>" as project,
          "<YOUR DATASET_ID HERE>" as dataset_id,
          "<YOUR TABLE PREFIX HERE>" as table_prefix,
          num as year_low,
          num+1 as year_high
        FROM `bigquery-public-data.common_us.num_999999`
        WHERE num BETWEEN 1992 AND 1995
      '
      
      # call condusco's run_pipeline_gbq to iteratively run create_results_table over invocation_query's results
      
      run_pipeline_gbq(
        create_results_table,
        invocation_query,
        project = '<YOUR PROJECT HERE>',
        use_legacy_sql = FALSE
      )
      

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-08
        相关资源
        最近更新 更多