【问题标题】:Extracting data from an array using SQL query使用 SQL 查询从数组中提取数据
【发布时间】:2021-12-30 17:45:32
【问题描述】:

我在 Athena 中有一个如下所示的字段:

{ clientip=66.249.69.121, country=US, headers=[{name=Host, value=play.hubhopper.com}, {name=Connection, value=keep-alive}, {name=Accept, value=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8}, {name=From, value=googlebot(at)googlebot.com}, {name=User-Agent, value=Googlebot-Video/1.0}, {name=Accept-Encoding, value=gzip, deflate, br}], uri=/b3219e23cb94459d30487d5caca0be06.mp3, args=s=hh-rss-feed, httpversion=HTTP/1.1, httpmethod=GET, requestid=Md_hWt8b0cpIA_9Id2X3-cqaI1AAVSSk0_YTfZcodwInTfqUp9T_nA==}

有很多这样的记录与各种用户代理。我想获取 user-agent = 'Googlebot-Video/1.0' 的数据。查询应该是什么?

谢谢

【问题讨论】:

    标签: sql amazon-s3


    【解决方案1】:

    您也许可以在此处使用正则表达式替换:

    SELECT REGEXP_REPLACE(field, '.*\{name=User-Agent, value=(.*?)\}.*', '\1') AS user_agent
    FROM yourTable;
    

    请注意,如果 \1 不能作为替代品,您可能必须改用 $1。这是一个regex demo,表明替换逻辑正在运行。

    【讨论】:

    • 它给了我以下错误:'意外参数(行(“clientip”varchar,“country”varchar,“headers”array(row(“name”varchar,“value”varchar)) "uri" varchar,"args" varchar,"httpversion" varchar,"httpmethod" varchar,"requestid" varchar), varchar(36), varchar(2)) 用于函数 regexp_replace。预期: regexp_replace(varchar(x), JoniRegExp, varchar(y)) , regexp_replace(varchar(x), JoniRegExp) , regexp_replace(varchar, JoniRegExp, function(array(varchar),varchar(x)))'
    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2015-08-24
    • 2019-01-21
    • 1970-01-01
    • 2015-04-18
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多