在 mapreduce 中实现 BigQuery UDF 作为地图的动机是啥?
Posted
技术标签:
【中文标题】在 mapreduce 中实现 BigQuery UDF 作为地图的动机是啥?【英文标题】:Whats the motivation behind implementing BigQuery UDFs as map in mapreduce?在 mapreduce 中实现 BigQuery UDF 作为地图的动机是什么? 【发布时间】:2015-10-30 10:36:24 【问题描述】:Google BigQuery 现在支持像 mapreduce 中的映射器一样工作的 UDF。
BigQuery 支持用 javascript 编写的用户定义函数 (UDF)。 UDF 类似于 MapReduce 中的“Map”函数:它将单行作为输入并产生零或多行作为输出。输出可能具有与输入不同的架构。
来自https://cloud.google.com/bigquery/user-defined-functions
在行上实现 UDF 而不是允许在列/字段上作为纯函数工作的 UDF 背后的动机是什么,例如 UDF 在 hive https://cwiki.apache.org/confluence/display/Hive/HivePlugins 中的工作方式。
我想您可以将任何适用于列的 UDF(如 hive UDF)表示为适用于行的 UDF(BigQuery UDF),但反之则不行。这可以通过定义一个 UDF(在 BigQuery 中)来实现,该 UDF 具有与数据集相同的输入和输出架构以及刚刚传递的所有值,但您希望将函数应用到的字段。
如果您想将相同的函数应用于具有不同架构的不同数据集,这当然很麻烦。请帮我理解。
【问题讨论】:
【参考方案1】:目前在 BigQuery 中实现 UDF 只是第一步。正如您所注意到的 - 如果您希望能够处理嵌套和重复的结构,这是最通用的方式,但是当您只需要简单的标量值时它会变得很麻烦。预计该领域的未来会有所改进,使简单的 UDF 变得简单。
【讨论】:
我已经等不及可以开始使用dateint(timestamp)
而不是 year(timestamp) * 10000 + month(timestamp) * 100 + day(timestamp)
的那一天了。以上是关于在 mapreduce 中实现 BigQuery UDF 作为地图的动机是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BigQuery 的标准 SQL 中实现 RATIO_TO_REPORT()?
使用 MapReduce 防止重复到 BigQuery 管道