BigQuery - 基于字段/过滤器构建动态选择语句/查询

Posted

技术标签:

【中文标题】BigQuery - 基于字段/过滤器构建动态选择语句/查询【英文标题】:BigQuery - Build a Dynamic Select Statement/Query Based on Fields/Filters 【发布时间】:2016-03-29 19:53:54 【问题描述】:

我已经到处寻找解决下面提到的场景的方法,但没有运气。注意 - 我是一名编码新手,但目前正在学习 Python 作为我的主要编程语言。

简而言之,我在 BigQuery 中有一个表,其中第一列包含字符串,而其他每一列都包含整数。整数列的标题使用“月_年”格式。我希望我的用户能够在文本框中输入一个单词并选择一个“开始”日期和一个“结束”日期,然后运行查询,以便它将该单词的数据作为这些日期之间的趋势图返回。

我在 Excel 中工作得很好,因此我能够使用链接到单元格的 ActiveX 控件来操作查询,然后通过数据连接执行它。下面是一个适用于 Excel 的查询示例:

SELECT que, jan_15, feb_15, mar_15, apr_15, FROM [xxx.xxxx] WHERE (que CONTAINS 'VITAMINS') ORDER BY 1 DESC, LIMIT 1000

因此,“VITAMINS” - 将是文本框值,“jan_15, feb_15, mar_15, apr_15” 将是“开始”日期和“到”日期值。

我想用 Python 复制它。除了月度数据,我还将为日常数据和年度数据创建表格,因此允许用户设置开始/结束日期以按日、月或年进行搜索会很棒。

谢谢!

【问题讨论】:

即使您是初学者,您能否发布代码以进行最佳尝试?谢谢。 嘿@Irnzcig - 老实说,我一直在转圈,所以目前没有代码可以显示。我只有使用 VBA 按需工作的 Excel 工作簿。到目前为止,我发现的最接近的是:demo.easyquerybuilder.com/asp-net-ajax - 当用户添加过滤器/条件时,查询构建在左下角。 嗯,我明白了,但关键是你的问题,就像现在一样,真的很广泛,看起来有点像编程服务请求......我相信这不是你的意图,所以在我看来,您应该尝试将其缩小到更具体的疑问(或疑问)。即使您的代码不完整,比如说其中一个试验,是什么阻止了您?这样,我想你会有更多的机会得到一个好的答案。 动态查询是社区长期以来一直在询问的一项功能。在这里投票:code.google.com/p/google-bigquery/issues/…。希望他们能尽快开发它。 【参考方案1】:

您应该重新考虑您的设计并将数据检索和表示层分开 因此,当您从 Excel 迁移到 BigQuery 时,我强烈建议您更改架构。 根据您的示例,它可能只有几列:

que 字符串 年份字符串字符串 公制整数

在这种情况下,您需要构建的查询非常简单(仅作为示例)

SELECT que, TIMESTAMP([year] + '-' + [month] + '-01') AS ts, metric
FROM YourTable
WHERE que = 'VITAMINS'
AND TIMESTAMP([year] + '-' + [month] + '-01') 
  BETWEEN TIMESTAMP('2015-01' + '-01') AND TIMESTAMP('2015-04' + '-01')

其中“维生素”、“2015-01”和“2015-04”来自用户输入

当您的客户端应用程序构建并运行上述查询时 - 您现在可以使用输出来构建图表

您可以为日常数据和早期数据使用类似的架构 但是,此外,如果您的指标是累加的 - 您不需要三个单独的表 只需拥有每日表,然后您就可以汇总到每月或每年查询所需的级别

【讨论】:

以上是关于BigQuery - 基于字段/过滤器构建动态选择语句/查询的主要内容,如果未能解决你的问题,请参考以下文章

带有 BigQuery 的动态表后缀不限制处理的数据

BigQuery - 分组并使用数组字段作为过滤器

如何从基于嵌套 json 的 BigQuery 表中进行选择?

BigQuery:使用标准 SQL 过滤重复字段

在将 Google BigQuery 作为源数据库的 Metabase 中使用字段过滤器时出现无法识别的名称

使用自动检测的动态 BigQuery 架构:错误架构没有字段