簡體   English   中英

PyAthenaJDBC查詢字符串格式問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM