如何从多个标量函数返回 StructArray

Posted

技术标签:

【中文标题】如何从多个标量函数返回 StructArray【英文标题】:How to return a StructArray from Multiple Scalar Functions 【发布时间】:2022-01-08 15:57:29 【问题描述】:

我有一个场景,我在 Apache Arrow 中处理时间数据,并使用计算函数来提取日期/时间组件,如下所示:

auto year = arrow::compute::CallFunction("year", array);
auto month = arrow::compute::CallFunction("month", array);
auto day = arrow::compute::CallFunction("day", array);
...

虽然这可行,但我必须管理三个独立的基准。理想情况下,我希望有一个函数返回包含年/月/日元素的StructArray,它还可以扩展到更详细的时间组件。有没有一种简单的方法可以用当前的 API 注册这样的函数?

【问题讨论】:

【参考方案1】:

有没有一种简单的方法可以用当前的 API 注册这样的函数?

我不这么认为,您的用例看起来太具体了。另一方面,如果你经常这样做,你可以实现一些可以为你做的事情:


std::shared_ptr<arrow::Array> CallFunctions(std::vector<std::string> const& functions,
                                            std::vector<arrow::Datum> const& args) 

  std::vector<std::shared_ptr<arrow::Array>> results;
  for (std::string const& function : functions) 
    results.push_back(arrow::compute::CallFunction(function, args).ValueOrDie().make_array());
  
  return arrow::StructArray::Make(results, functions).ValueOrDie();


void test()  
   auto array = ....
   auto structArray = CallFunctions("year", "month", "day", array);



【讨论】:

以上是关于如何从多个标量函数返回 StructArray的主要内容,如果未能解决你的问题,请参考以下文章

从标量 SQL 函数返回两个值

从 TSQL 标量函数返回连接值

如何从@NamedStoredProcedureQuery 获得标量结果?

如何在一段时间内为多个对象运行标量函数

从 ms 访问调用标量 UDF 函数

如何在sql服务中将列名分配给标量函数的返回值