Ich habe Probleme bei der Übergabe von Argumenten an Sqoop in einem Bash-Skript.Fehler bei der Interpretation der Variablen mit Sqoop
Sqoop ist ein Werkzeug, um Tabellen von RDB (Oracle in diesem speziellen Fall) zu Hive zu übertragen. Es ist ein Kommandozeilen-Tool wie folgt aufgerufen:
sqoop import --connect <string> --direct --table <table> --query <query> ....
ich den Befehl bin Erzeugung innerhalb des Skripts zu starten, wobei Werte eine Datei bilden und sie mit awk Parsen.
Alle Argumente sind ok, außer der - Anfrage eins. Dieses Argument wird verwendet, um die Abfrage an die Quelle für die Datenextraktion zu übergeben. Es akzeptieren dieses Format:
select very long list of columns from schema.table where \$CONDITIONS
DIE \ $ BEDINGUNGEN ist eine Variable, dass Sqoop Ersatz, so dass es in diesem sehr wörtlich Format zwingend vorgeschrieben ist, Backslash enthalten.
Ich bin mir sicher, dass das Problem mit der --Query Parameter ist, denn wenn ich das Skript ausführen, wie es ist, aber den Wert für --query im Klartext hardcodieren, funktioniert es.
klar zu sein, das ist der Befehl, den ich in meinem Skript habe:
scoop import --connect "$source" --table "$sourcetab" \
-- hiveimport --some more other commands --querytot "$query"
Also, ich verstehe nicht, aus einem Grunde, gibt es ein Problem mit diesem Wert.
Bisher habe ich versucht, diese Werte bilden --query:
Gegeben:
query="select col1 col2 col3 col4 col4 from schema.table"
ich schon versucht:
1. querytot="$query where \\$CONDITIONS"
2. cond=" where '\$CONDITIONS'"
querytot="$query$cond"
3. $(echo "$query$cond") <-- placed directly in the sqoop command
4. echo "$query$cond" > query_file, and passed it to Sqoop via --options-file
Alle diese ohne Erfolg.
Würden Sie mir bitte helfen? Ich stecke fest.
Dank
bieten sowohl das Protokoll der 'bash -x yourscript' zeigt, wie es die' sqoop' Zeile ruft, und eine Arbeitsleitung selbst von Hand laufen nach 'set -x' Laufen (** mit ** der 'set -x' Ausgabe dieses erfolgreichen Befehlszeilenaufrufs, der anzeigt, wie die Shell es interpretierte). –
(Wenn Sie sagen, "den Wert für' --query' im Klartext fest codieren ", ist es überhaupt nicht klar, welche Zitate Sie dafür verwenden, wenn überhaupt, und das sind ** ganz wesentliche ** Informationen). –
@CharlesDuffy Ich werde die Informationen so schnell wie möglich zur Verfügung stellen.Hardcoding bedeutet, dass ich die SELECT-Anweisung im Klartext schreibe und keine Variablen verwende. Das heißt, '--abfrage col1 col2 col3 aus schema.table where \ $ CONDITIONS' – Omar