Sqoop
コマンドをpython
を使って生成しようとしています。私はSqoop
クエリを渡して起動することができます。私はSqoop
のコマンドで--map-column-java
の列名をマップしたいと考えていました。列の数は各列で異なります。 BLOB
とCLOB
のみが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
を追加する必要があります。
いくつかの例を示すことができれば素晴らしいと思います。これほど多くの私はすでにRNDをしています。 –