2017-01-19 6 views
0

Я пытаюсь сгенерировать команду Sqoop, используя python. Я могу передать и запустить запрос Sqoop. Я хотел сопоставить имя столбца в команде Sqoop--map-column-java, а количество столбцов в каждом столбце различно. только BLOB и CLOB должно быть mapped.Sqoop job from python 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']

я должен получить новый Sqoop запрос с ниже формате

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 

мне нужно только добавить эту часть --map-column-java C456=String,C459=String,C8=String динамически, так что мой следующий код subprocess.call может использовать это.

ответ

0

Создайте свой синтаксис sqoop, присвоив переменной и на основе условий переопределите переменную с параметрами и после того, как окончательный синтаксис будет создан, выполните ее. Надеюсь это поможет.

+0

было бы здорово, если бы вы могли показать пример. Этого я уже сделал RND. –