Ich versuche, die PyAthenaJDBC-Bibliothek zu verwenden, um ein Python-Skript zu erstellen, das einen S3-Bucket mit Athena abfragen wird. Die Bibliothek ist ziemlich gut, aber ich habe Probleme mit der Formatierung.PyAthenaJDBC Abfragezeichenfolge Formatierung Problem
Ich konstruiere die Abfragen als Zeichenfolgen in einer separaten Funktion und übergibt die Abfragezeichenfolge zurück an cursor.execute(query)
.
Der Query-String hat Anführungszeichen in ihm, und sieht wie folgt aus:
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
Dieses ein Fehler auf dem zweiten einfachen Anführungszeichen in der LIKE '5%' Aussage verursacht.
ValueError: unsupported format character ''' (0x27) at index 186
ich den Fehler vermeiden kann und erfolgreich die Abfrage ausführen, indem Sie diese Zeile in der Bibliothek zu ändern https://github.com/laughingman7743/PyAthenaJDBC/blob/master/pyathenajdbc/formatter.py#L115
return (operation % kwargs).strip()
-return (operation).strip()
An dieser Stelle im Code, operation == query
(klebte oben) und kwargs == {}
Meine spezifische Frage ist, bin ich meine Anfrage falsch strukturieren? Oder ist das etwas, was ich nicht über die native String-Formatierung verstehe, bei der es keinen Sinn macht, einen Ersatz durch ein leeres Wörterbuch zu machen?
Das war es. Ich hätte das sehen sollen. Vielen Dank! – manisha