Ich möchte Python-Bibliotheken verwenden, um UDF-Funktionen in Redshift, speziell ua-Parser Bibliothek zu erstellen.Amazon Redshift UDF mit benutzerdefinierten Python-Bibliothek ua-Parser
Prozess benutzerdefinierte Python-Bibliotheken auf Redshift der Verwendung von hier beschriebenen http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_LIBRARY.html
Um die Bibliothek mit allen Abhängigkeiten zu bekommen, habe ich PipLibraryInstaller, von aws Labors, die alle abhängigen Bibliotheken auf S3 setzen sollte, gleich wie regulärer Pip-Befehl.
Aber ich kann nicht RE-Parser Bibliotheksarbeit mit diesem Befehl machen.
I erstellt und hochgeladen lib Befehl
folgenden mit bis S3./installPipModuleAsRedshiftLibrary.sh -m ua-parser -s s3://bucket_location -r region_name
ich die Bibliothek folgenden Befehl zum Erstellen dann
CREATE OR REPLACE LIBRARY ua_parser
LANGUAGE plpythonu
from 's3://bucket/ua-parser.zip'
WITH CREDENTIALS AS 'aws_access_key_id=AWS_key;aws_secret_access_key=secret_key'
region 'region_name'
Dann habe ich Funktion erstellt:
create function f_user_agent_parse (user_agent varchar) returns varchar IMMUTABLE
as $$
from ua_parser import user_agent_parser as parser
parsed_string = parser.Parse(user_agent)
return type(parsed_string)
$$
language plpythonu;
Wenn Ich versuche folgendes auszuführen:
select f_user_agent_parse('facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)') as s
bekomme ich folgende Fehlermeldung:
ERROR: XX000: ImportError: No module named _regexes. Please look at svl_udf_log for more information
Es sieht aus wie Regexes ist nicht in der Bibliothek. Aber, als ich Lib von S3 heruntergeladen habe, und ich habe es angeschaut, sehe ich folgende Dateien:
Was ist das Problem hier? Ich mache etwas wring oder gibt es ein Problem mit der Bibliothek?
ich den Code kennen nicht richtig sein könnte, aber ich nie erreichen zu bekommen diese Art von Fehler. Ich bekomme, dass "_regexes" Modul nicht verfügbar ist. Ich habe Python 2.7.12 und pip 8.1.2 Also, nachdem Sie das Skript aus den AWS-Labs ausführen, stirbt es direkt Bibliothek S3, und erstellen Sie die Bibliothek mit dem gleichen Skript zu dem oben angegebenen ? –
Ich habe selbst ein neues env mit Python 2.7.12 und pip 8.1.2 erstellt, aber alles funktioniert immer noch einwandfrei. Ich habe auch das Skript von 'aws-labs' benutzt und es kann problemlos in S3 hochgeladen werden. Aus Ihrer Frage klingt es, als ob Sie beim Ausführen der Funktion einen Fehler erhalten, aber jetzt schreiben Sie, dass es beim Hochladen auf S3 bereits abstürzt? Könntest Du das erläutern? – moertel
Nono, das Hochladen auf S3 funktioniert einwandfrei. Hier sind die Schritte, die ich durchgeführt: 1) aws-labs Skript erstellt und hochgeladen ua_parser.zip bis S3 mit -> funktioniert 2) erstellen Bibliothek in Redshift Aginity-Tool -> ohne Fehler gelungen 3) erstellt Funktion in Redshift mit Aginity Client -> erfolgreich ohne Fehler 4) versuchen, Select-Anweisung mit zuvor erstellten Funktion ausführen, (wie in der Frage beschrieben) -> Ich bekomme den Fehler, dass es kein Modul namens _regexes Vielen Dank –