Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python stdout=subprocess.pipe中的Sqoop作业_Python_Python 3.x_Sqoop - Fatal编程技术网

python stdout=subprocess.pipe中的Sqoop作业

python stdout=subprocess.pipe中的Sqoop作业,python,python-3.x,sqoop,Python,Python 3.x,Sqoop,我正在尝试使用python生成Sqoop命令。我能够通过并启动Sqoop查询。我想在Sqoop命令--map column java中映射列名,并且每列中的列数不同。只有BLOB和CLOB需要映射 数据: 样本代码:- proc=subprocess.Popen(["sqoop", "eval", "--connect","jdbc:oracle:thin:@" + config["Production_host"]+":"+config["port"]+"/"+config['Producti

我正在尝试使用
python
生成
Sqoop
命令。我能够通过并启动
Sqoop
查询。我想在
Sqoop
命令
--map column java
中映射列名,并且每列中的列数不同。只有
BLOB
CLOB
需要映射

数据:

样本代码:-

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
sqoop导入--connect--connect“,”jdbc:oracle:thin:@“+config[“Production\u host”]+”:“+config[“port”+”/“+config[“Production\u SERVICE\u NAME]”,“--username”、config[“Production\u User”]、“--password”、config[“Production\u password”],--表格--以“|”结尾的字段--映射列java C456=String,C459=String,C8=字符串--配置单元放置导入delims--输入空字符串'\\N'--输入空非字符串'\\N'--作为文本文件--目标目录-m 1

我只需要动态添加这一部分
--映射列java C456=String,C459=String,C8=String
,这样我的下一个代码
子流程.call
就可以使用它了。

通过分配给一个变量并基于条件用参数覆盖该变量来构建sqoop语法,一旦构建了最终语法,就执行它。希望这有帮助。

如果您能举一些例子,那就太好了。这一点我已经做了RND。
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