您能否创建一个 BigQuery UDF 来生成表列表,而不是对行进行操作?
Posted
技术标签:
【中文标题】您能否创建一个 BigQuery UDF 来生成表列表,而不是对行进行操作?【英文标题】:Can you create a BigQuery UDF that generates lists of tables, instead of operating on rows? 【发布时间】:2016-05-18 17:36:58 【问题描述】:我正在查看 BigQuery 的用户定义函数文档,但我需要定义一个函数来简化查询多个表的过程。我有些人必须做这样的事情:
SELECT * FROM (TABLE_DATE_RANGE([SomeDataSet.SomeTableName_],DATE_ADD(CURRENT_TIMESTAMP(),-2,'DAY'),DATE_ADD(CURRENT_TIMESTAMP(),-1,'DAY'))) where magical_rainbows = 7;
没有人会记住所有这些,他们最终会一遍又一遍地从某个来源复制粘贴。没什么大不了的,除非人们很懒惰,并且不可避免地会养成将日期范围设置为包罗万象的习惯,从而使我的账单飞涨。
我宁愿使用 UDF 将所有内容归结为他们可以记住的内容 - 并快速输入:
SELECT * FROM da_tables([SomeDataSet.SomeTableName_], -2, -1) where .....
然而,我在 UDF 中看到的所有内容都是关于表模式生成的,而我似乎没有办法解决这个问题。
【问题讨论】:
如果您问“如何才能轻松查询过去 3 天的表格以避免所有剪切和粘贴”,我建议创建一个嵌入所有 TABLE_DATE_RANGE( ) 计算。 关于“让我的账单飞涨”的问题,请查看cloud.google.com/bigquery/cost-controls上的“使用 BigQuery 自定义配额控制查询成本” 使用 table_query() 和包含“营业日期”元数据的参考表可以轻松完成...因为它已被删除,请投票支持恢复功能...***.com/questions/36673468/… 感谢您的建议——支持以这种方式对表进行操作的函数似乎是一个有用的功能。我在 BigQuery 问题跟踪器中提交了 code.google.com/p/google-bigquery/issues/detail?id=535。 为了结束循环,我们现在支持对结构(例如行类型)进行操作的 SQL UDF,因此可以使用函数来表达这种转换。我将相应的功能请求标记为已修复:code.google.com/p/google-bigquery/issues/detail?id=535。 【参考方案1】:BigQuery UDF 的当前实现不提供此类功能
同时 - 乐观地说:
检查此博客Google takes Cloud Machine Learning service mainstream 中的Big Data and Analytics
部分。具体查看Automatic Table Partitions
子弹!
另外——你可以在Table的Resource中查看timePartitioningexperimental property,它告诉我这个方向有进展:o)
【讨论】:
以上是关于您能否创建一个 BigQuery UDF 来生成表列表,而不是对行进行操作?的主要内容,如果未能解决你的问题,请参考以下文章
使用 json 模式创建 bigquery 表的 Java 代码
使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?
JS UDF 返回标准 SQL / BigQuery 的结构并创建两列
如何使用调用 UDF 的 Python 脚本来使用 BigQuery API