[英]PyAthenaJDBC query string formatting issue
我正在嘗試使用PyAthenaJDBC庫制作一個Python腳本,該腳本將使用Athena查詢S3存儲桶。 該庫非常棒,但是我在格式化方面遇到問題。
我在一個單獨的函數中將查詢構造為字符串,並將查詢字符串傳遞回cursor.execute(query)
。
查詢字符串中帶有引號,如下所示:
SELECT day, elb_name
,COUNT (*) AS c
,100.0 * (
1.0 - (
SUM (
CASE
WHEN elb_response_code LIKE '5%' THEN 1
ELSE 0
END
) / cast(COUNT (*) as double)
)
) AS success_rate
,100.0 * SUM (
CASE
WHEN backend_processing_time < 0.1 THEN 1
ELSE 0
END
) / cast(COUNT (*) as double) AS t_lt_pt1
,100.0 * SUM (
CASE
WHEN backend_processing_time < 1 THEN 1
ELSE 0
END
) / cast(COUNT (*) as double) AS t_lt_1
,100.0 * SUM (
CASE
WHEN backend_processing_time < 5 THEN 1
ELSE 0
END
) / cast(COUNT (*) as double) AS t_lt_5
,100.0 * SUM (
CASE
WHEN backend_processing_time < 10 THEN 1
ELSE 0
END
) / cast(COUNT (*) as double) AS t_lt_10
FROM elb_logs_raw_native_part
WHERE year = '2017' AND
month = '03' AND
elb_name is not NULL AND
elb_name != ''
GROUP BY day, elb_name
ORDER BY c DESC
這將導致在'LIKE'5%'語句中第二個單引號引起錯誤。
ValueError: unsupported format character ''' (0x27) at index 186
我可以通過更改庫https://github.com/laughingman7743/PyAthenaJDBC/blob/master/pyathenajdbc/formatter.py#L115中的這一行來避免錯誤並成功執行查詢
從return (operation % kwargs).strip()
到return (operation).strip()
在代碼的這一點上, operation == query
(上面粘貼)和kwargs == {}
我的具體問題是,我的查詢結構是否正確? 還是我不了解原生字符串格式,這是一個不好的主意?
如果查詢用作要格式化的字符串,則需要將要保留為文字%
字符的所有%
字符加倍。
代替WHEN elb_response_code LIKE '5%' THEN 1
,請使用WHEN elb_response_code LIKE '5%%' THEN 1
。 在formatter.py中指定的行運行之后, %%
將被轉換為單個%
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.