【问题标题】:Return Row Type In Presto Udf在 Presto Udf 中返回行类型
【发布时间】:2017-09-08 11:21:06
【问题描述】:

我想实现一个返回一行的 udf。

我在网上搜索过,但没有例子。在 presto 的源代码中,我看到了 this 之类的方法,但它采用行数据类型作为参数。没有示例如何创建行。

谢谢。

【问题讨论】:

    标签: user-defined-functions presto


    【解决方案1】:

    像这样定义你的输出函数:

    @OutputFunction("row(name double,some double)")
    public static void output(SomeState state, BlockBuilder out){
    BlockBuilder blockBuilder = DoubleType.DOUBLE.createBlockBuilder(new BlockBuilderStatus(), 1);
        DoubleType.DOUBLE.writeDouble(blockBuilder, 1.0);
        DoubleType.DOUBLE.writeDouble(blockBuilder, 2.0);
        Block block =  blockBuilder.build();
        out.writeObject(block);
        out.closeEntry();
    }  
    

    这里,我们为row(Name Type)定义参数类型

    【讨论】:

      【解决方案2】:

      创建新的 UDF 有两个步骤

      1 创建UDF link

      2 RegisterUDF。

      即你有UDF签名

       long Dt_TIME_ADD(string time,
                       string duration
                       [, string default_timezone = 'UTC'])
      
      
         Here 1 Long is return type 
               2 TIME_ADD is UDF Name 
               3 Parms  time ,duration and Default parm default_timezone  
      

      这可以像这样调用

             SELECT ... WHERE TD_TIME_RANGE(time,
                                 '2013-01-01',
                                 TD_TIME_ADD('2013-01-01', '1d'))
      

      【讨论】:

      • 在我的问题中,我想了解如何构建一行并在 udf 中返回它?我可以开发返回 int、varchar、array 等的 udf。但我不知道如何在 udf 中构建一行。
      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2016-08-18
      • 1970-01-01
      • 2017-06-08
      • 2017-02-06
      • 1970-01-01
      • 2017-08-28
      • 2018-09-04
      相关资源
      最近更新 更多