对 GCP 外部函数进行故障排除¶
本主题提供有关 GCP 外部函数的故障排除信息。
本主题内容:
与平台无关的运行时问题¶
数据类型返回值与预期返回值不一致¶
将实参传递到外部函数或从外部函数传递实参时,请确保数据类型是合适的。如果发送的值不适合接收的数据类型,则该值可能会被截断或以其他方式损坏。
有关更多详细信息,请参阅 确保外部函数的实参与远程服务解析的实参相对应。
Error: Row numbers out of order¶
- 可能原因:
在每个批处理中返回的行号应该是从 0 开始的单调升序整数。输入行号也必须遵循此规则,并且每个输出行都应与相应的输入行一致。例如,输出行 0 中的输出应与输入行 0 中的输入相对应。
- 可能的解决方案:
确保返回的行号与收到的行号相同,并且每个输出值都使用相应输入的行号。如果这不起作用,则输入行号可能不正确,或者您没有以正确的顺序返回行。
接下来,确保输出行号从 0 开始,增加 1,并按顺序排列。
有关数据输入和输出格式的更多信息,请参阅 远程服务输入和输出数据格式。
Error: "Error parsing JSON: Invalid response"¶
- 可能原因:
最可能的原因是远程服务(例如 AWS Lambda 函数)返回的 JSON 构造不正确。
- 可能的解决方案:
确保外部函数返回一个数组数组,每个接收的输入行返回一个内部数组。查看以下位置中的输出格式说明:Snowflake 接收的数据格式。
Error: Format of the returned value is not JSON¶
- 可能原因:
返回值内包含双引号。
- 可能的解决方案:
尽管 JSON 字符串由双引号分隔,但在大多数情况下,字符串本身不应以引号开头和结尾。如果嵌入的双引号不正确,请将其删除。
Error: Function received the wrong number of rows¶
- 可能原因:
远程服务尝试返回的行数多于或少于接收的行数。即使函数名义上是标量的,它也可能在
event
参数的body
字段中接收多行,并且返回的行数应与接收的行数完全相同。- 可能的解决方案:
确保远程服务为接收的每一行返回一行。
特定于 GCP 的问题¶
Error: Request fails with '{"message":"Audiences in Jwt are not allowed","code":403}'¶
- 可能原因:
API 集成的
google_audience
字段中的值不是允许的值。- 可能的解决方案:
验证 API 集成的
google_audience
值是否与 API 的托管服务名称匹配,该名称应记录在跟踪工作表的Managed Service Identifier
字段中。如果您将 x-google-audiences 字段添加到 API 配置文件的 securityDefinitions 部分之中,请确保 x-google-audiences 中的值与 API 集成字段中的
google_audience
值匹配。
有关 Google 身份验证的更多信息,请参阅 Google 服务账户 身份验证文档 (https://cloud.google.com/api-gateway/docs/authenticate-service-account#configure_auth)。
Error: Request fails with '{"message":"Jwt is missing","code":401}'¶
- 可能原因:
在配置文件中, securityDefinitions 字段中的 x-google-issuer 字段值可能与跟踪工作表中记录的 API 集成的 API_GCP_SERVICE_ACCOUNT 值不匹配。
x-google-issuer 中的值可能包含额外的空格。
- 可能的解决方案:
更新 x-google-issuer,以匹配 API_GCP_SERVICE_ACCOUNT。
移除不需要的空格。
Error: Request fails with '403 Forbidden'¶
- 可能原因:
使用配置的服务账户在后端不具备适当的权限。
- 可能的解决方案:
更新服务账户的权限。