【问题标题】:Using Presto's Coalesce function with a row on AWS Athena在 AWS Athena 上使用 Presto 的 Coalesce 函数和一行
【发布时间】:2020-12-25 22:09:25
【问题描述】:

我正在使用 AWS Web 应用程序防火墙 (WAF)。日志写入 S3 存储桶并由 AWS Athena 查询。

有些日志字段不是简单的数据类型而是复杂的 JSON 类型。例如“规则组列表”。它包含一个复杂类型的 JSON 数组,该数组可能有 0 个或多个元素。

所以我正在使用 Presto 的 try() 函数将错误转换为 NULL,并尝试使用 coalesce() 函数在它们的位置放置一个破折号。 (使用 GROUP BY 时保留空值会导致问题)

try() 工作正常,但 coalesce() 导致类型不匹配问题。

下面的函数调用:

coalesce(try(waf.rulegrouplist[1].terminatingrule),'-')

导致此错误:

All COALESCE operands must be the same type: row(ruleid varchar,action varchar,rulematchdetails varchar)

如何将“-”转换为一行,或者我还可以使用什么来计算一行?

【问题讨论】:

    标签: presto amazon-athena amazon-waf


    【解决方案1】:

    显然,您可以创建一个空行并将其转换为键入的行。

    这行得通...

    coalesce(try(waf.rulegrouplist[1].terminatingrule),CAST(row('null','null','null') as row(ruleid varchar,action varchar,rulematchdetails varchar)))
    

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2021-02-19
      • 2017-12-17
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多