首页 > 解决方案 > redshift 用户定义的 Lambda 函数返回错误

问题描述

我按照本官方教程中提到的所有步骤创建了一个 redshift lambda 函数。

https://aws.amazon.com/blogs/big-data/accessing-external-components-using-amazon-redshift-lambda-udfs/

我可以使用我自己的代码而不是该示例中提供的代码。它按预期工作。

# select 123456 as input_number, mycircle('123456');
 input_number |      mycircle
--------------+--------------------
 123456 |  Mumbai 
(1 row)

但是在这样的表格中使用时,相同的功能不起作用......

# select input_number, mycircle(input_number) from mytable  limit 1;
ERROR:  Invalid Lambda Response
DETAIL:
  -----------------------------------------------
  error:  Invalid Lambda Response
  code:      8001
  context:   Missing rows in lambda response
  query:     2983079
  location:  exfunc_data.cpp:288
  process:   query0_121_2983079 [pid=29202]
  -----------------------------------------------

似乎 UDF 不像任何其他 python UDF 那样工作,那些已经被 redshift 支持。如何在此查询中使用我的 lambda 函数作为用户定义的函数?


更新:

我的函数是这样编写的,它只有在我创建一个只有 1 行的新表时才会起作用。

# create table todel as select * from  mytable  limit 1;

然后在新创建的表上运行 UDF,它可以工作:

#  select input_number, mycircle(input_number) from todel;

这不是预期的,我的其他 python UDF 按预期正常工作。

标签: amazon-web-servicesaws-lambdaamazon-redshift

解决方案


您需要确保返回与输入行匹配的正确数量的输出行。请记住,该函数不仅仅需要一个输入行,而是“批量”处理。


推荐阅读