bashスクリプト内で引数をSqoopに渡す際に問題が発生しました。Sqoopでの可変解釈のエラー
Sqoopは、RDB(この特定のケースではOracle)からHiveにテーブルを転送するためのツールです。私は、スクリプト内で起動するコマンドを生成する値は、ファイルを形成し、awkのでそれらを解析取ってい
sqoop import --connect <string> --direct --table <table> --query <query> ....
:それは、コマンドラインツールは、このようにして起動します。
--queryを除くすべての引数はokです。この引数は、データ抽出のためにソースで使用するクエリを渡すために使用されます。
select very long list of columns from schema.table where \$CONDITIONS
$条件\それはこの非常にリテラル形式で必須ですSqoop代替、ので、バックスラッシュが含まれる変数である:それはこの形式を受け入れます。
私はこのスクリプトをそのまま実行しても、--queryの値をプレーンテキストでハードコーディングするので、問題は--queryパラメータであると確信しています。
明確にするために、これは私が私のスクリプト内で持っているコマンドです:だから
scoop import --connect "$source" --table "$sourcetab" \
-- hiveimport --some more other commands --querytot "$query"
、私は理解していない理由は、この値に問題があります。成功することなく、これらの
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
すべて:考える
::私はすでに試した
query="select col1 col2 col3 col4 col4 from schema.table"
は、これまでのところ私は、これらの値は、--queryを形成しようとしました。
私を助けてくれませんか?私は立ち往生している。
おかげ
は 'bashの-x yourscript'が、それは' sqoop'ラインを起動する方法を示し、そして '(-x'設定し実行した後、手で作業ラインを自分で実行しているののログの両方を提供します**と**成功したコマンドライン呼び出しの 'set -x'出力が含まれているので、シェルがどのように解釈しているかがわかります)。 –
(「普通のテキストで '--query'の値をハードコーディングする」と言うと、あなたが何の引用をしているのかはまったく分かりません。 –
@CharlesDuffyあなたができるだけ早く尋ねた情報を提供します。ハードコーディングとは、変数を使用せずに、実際にselect文をプレーンテキストで記述することを意味します。つまり、 '--query select col1 col2 col3 from schema.table where \ $ CONDITIONS' – Omar