在 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 作为地图的动机是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Erlang 中实现 MapReduce 框架

如何在 BigQuery 的标准 SQL 中实现 RATIO_TO_REPORT()?

使用 MapReduce 防止重复到 BigQuery 管道

如何正确迭代所有 BigQuery 结果行?

Parquet Data 时间戳列 INT96 尚未在 Druid Overlord Hadoop 任务中实现

在 BigQuery 中创建动态视图