2017-04-22 8 views
0

PyAthenaJDBCライブラリを使用して、Athenaを使用してS3バケットをクエリするPythonスクリプトを作成しようとしています。ライブラリはかなり素晴らしいですが、フォーマットに問題があります。PyAthenaJDBCクエリ文字列書式設定の問題

私は別の関数で文字列としてクエリを構築し、クエリ文字列をcursor.execute(query)に戻します。

クエリ文字列は、それに引用符を持っており、次のようになります。これは `LIKE「5%」ステートメントでセカンドシングルクォーテーションマークでエラーが発生します

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 

ValueError: unsupported format character ''' (0x27) at index 186 

Iは、エラーを回避し、成功コードのこの時点でreturn (operation).strip()return (operation % kwargs).strip()からライブラリにhttps://github.com/laughingman7743/PyAthenaJDBC/blob/master/pyathenajdbc/formatter.py#L115

この行を変更することにより、クエリを実行し、operation == query(上記貼り付け)とkwargs == {}

でき

私の具体的な質問は、私は間違ってクエリを構成していますか?それとも、空の辞書で置き換えようとすると、元の文字列の書式設定について理解できないものですか?

答えて

1

クエリを書式設定する文字列として使用する場合は、生き残りたい文字の%を二重にする必要があります。文字は%文字です。

WHEN elb_response_code LIKE '5%' THEN 1の代わりにWHEN elb_response_code LIKE '5%%' THEN 1を使用してください。 formatter.pyで指定した行の後に%%%に変換されます。

+0

それでした。私はそれを見たはずです。ありがとう! – manisha