sql查询中的base64子字符串

时间:2017-08-25 22:03:46

标签: sql presto amazon-athena

我在aws中使用athena来解析一堆日志文件。查询的标准是base64编码的子字符串。 ( “ADID = eW0vMU0zeGE5NUE4NjcyLzYzNDgvalhkVGhkZmxfODQwS182NDB4MzYwLm1wNAo =%somejunk”)

据我所知,此查询没有问题。

SELECT count(*)
FROM reporting."logs"
WHERE sc_status NOT LIKE '404'
        AND cs_cookie LIKE 'adId%'
        AND cs_uri_stem LIKE'%.m3u8'
        AND FROM_UTF8( from_base64( regexp_extract(cs_cookie, '(adId=)([^ ]+?)\%(.*)',2) ) ) LIKE '%mp4' limit 1 ;

它给出了错误INVALID_FUNCTION_ARGUMENT:Illegal base64 character 5f

使用所有组件的不同版本不会返回错误,并且会给出以mp4结尾的值。

SELECT FROM_UTF8( from_base64( regexp_extract(cs_cookie, '(adId=)([^ ]+?)\%(.*)',2) ) ) 
FROM reporting."logs" 
WHERE sc_status NOT LIKE '404' 
    AND cs_cookie LIKE 'adId%' 
    AND cs_uri_stem LIKE'%.m3u8' limit 1 ;

返回值中没有任何奇怪的东西。

ym/1M3xa95A8672/6348/jXdThdfl_840K_640x360.mp4

关于我为什么会收到错误或如何格式化以便它可以工作的任何想法?

1 个答案:

答案 0 :(得分:0)

看起来有一些不安全的字符,因为它是一个网址。

必须替换一些无效的base64字符。

工作版

SELECT *
FROM reporting."logs"
WHERE sc_status LIKE '2__'
AND date(date) = current_date - interval '1' day
        AND cs_cookie LIKE 'adId%'
        AND cs_uri_stem LIKE'%ad.m3u8'
        AND FROM_UTF8( from_base64( replace(replace(regexp_extract(cs_cookie, '(adId=)([^ ]+?)\%(.*)',2), '_','/'),'-','+') ) ) LIKE '%mp4'