2017-01-19 6 views
0

Sqoopコマンドをpythonを使って生成しようとしています。私はSqoopクエリを渡して起動することができます。私はSqoopのコマンドで--map-column-javaの列名をマップしたいと考えていました。列の数は各列で異なります。 BLOBCLOBのみがmappedである必要があります。PythonのSqoopジョブstdout = subprocess.pipe

データ:

----------------------------------------------- 
| COLUMN_NAME   | DATA_TYPE   | 
----------------------------------------------- 
| C460     | VARCHAR2    | 
| C459     | CLOB     | 
| C458     | VARCHAR2    | 
| C457     | VARCHAR2    | 
| C456     | CLOB     | 
| C8     | BLOB     | 
| C60901    | VARCHAR2    | 
----------------------------------------------- 

サンプルコード: -

proc=subprocess.Popen(["sqoop", "eval", "--connect","jdbc:oracle:thin:@" + config["Production_host"]+":"+config["port"]+"/"+config['Production_SERVICE_NAME'],"--username", config["Production_User"], "--password", config["Production_Password"], "--query","SELECT column_name, data_type FROM all_tab_columns where table_name =" + "'"+ Tablename + "'"],stdout=subprocess.PIPE) 
COl_Re=re.compile('(?m)(C\d+)(?=.+[CB]LOB)') 
columns=COl_Re.findall(proc.stdout.read()) 

私は上記のコードを使用して、必要なカラム名C459,C456,C8を取得することができています。出力['C459', 'C456','C8']

iはフォーマット以下

sqoop import --connect "--connect","jdbc:oracle:thin:@" + config["Production_host"]+":"+config["port"]+"/"+config['Production_SERVICE_NAME'],"--username", config["Production_User"], "--password", config["Production_Password"], --table table --fields-terminated-by '|' --map-column-java C456=String,C459=String,C8=String --hive-drop-import-delims --input-null-string '\\N' --input-null-non-string '\\N' --as-textfile --target-dir <Location> -m 1 

で新しいSqoopクエリを取得する必要があります私は私の次のコードsubprocess.callはこれを使用することができるように動的にこの部分--map-column-java C456=String,C459=String,C8=Stringを追加する必要があります。

答えて

0

変数に代入して条件に基づいてsqoop構文を構築し、パラメータで変数をオーバーライドし、最後の構文がビルドされたら実行します。お役に立てれば。

+0

いくつかの例を示すことができれば素晴らしいと思います。これほど多くの私はすでにRNDをしています。 –

関連する問題