sqoop如何指定pg库的模式
摘要:sqoop如何指定pg库的模式?
本文分享自华为云社区《【Hadoop】关于Sqoop导出数据到postgresql时schema的设置问题》,作者:Copy工程师 。
说明
使用sqoop导出导入数据非常的方便,但是对于postgresql(简称PG库)时就碰到了一个问题,pg库是三层结构的database——schema——table。如果想导入到某一个模式下,那就需要指定模式才可以。但是sqoop如何指定pg库的模式?
解决办法
碰到问题首先要看文档才对的。文档这里已经指出如何指定pg库的schema了。官方文档地址
文档已经说了,如果向指定schema需要添加-- --schema <name> 但是要注意的是必须在命令行的 !!!!最后!!! 添加才会生效。
但是,这是命令行的解决办法,如果我们使用的是java呢?在没解决之前,我的java代码是这样写的:
public static boolean ExportCmdInPg(Configuration conf, String tableName, List<String> columns, String hdfsDir,Map<String, String> dbMap) {
try {
LogUtils.logInfoPrint("开始任务",logger);
List<String> list = new ArrayList<>();
list.add("--connect");
list.add(dbMap.get(Constant.DRIVERURL));
list.add("--username");
list.add(dbMap.get(Constant.USER));
list.add("--password");
list.add(dbMap.get(Constant.PASSWORD));
list.add("--table");
list.add(tableName);
list.add("--columns");
list.add(StringUtils.join(columns, ','));
list.add("--fields-terminated-by");
list.add("\t");
list.add("--export-dir");
list.add(hdfsDir);
list.add("-m");
list.add("1");
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
String[] data = list.toArray(new String[0]);
if (0 == data.length) {
LogUtils.logErrorPrint("sqoop参数为空,请检查ExportCmd方法!",logger);
return false;
}
if (0 == Sqoop.runSqoop(sqoop, data)){
return true;
}
}catch (Exception e){
LogUtils.logErrorPrint("ExportCmd 导入到HDFS出现错误",logger,e);
}
return false;
}
结果当然是不成功。那我哦添加-- --schema 参数试一下
public static boolean ExportCmdInPg(Configuration conf, String tableName, List<String> columns, String hdfsDir,Map<String, String> dbMap) {
try {
LogUtils.logInfoPrint("开始任务",logger);
List<String> list = new ArrayList<>();
list.add("--connect");
list.add(dbMap.get(Constant.DRIVERURL));
list.add("--username");
list.add(dbMap.get(Constant.USER));
list.add("--password");
list.add(dbMap.get(Constant.PASSWORD));
list.add("--table");
list.add(tableName);
list.add("--columns");
list.add(StringUtils.join(columns, ','));
list.add("--fields-terminated-by");
list.add("\t");
list.add("--export-dir");
list.add(hdfsDir);
list.add("-m");
list.add("1");
list.add("-- --schema");
list.add("HERO");
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
String[] data = list.toArray(new String[0]);
if (0 == data.length) {
LogUtils.logErrorPrint("sqoop参数为空,请检查ExportCmd方法!",logger);
return false;
}
if (0 == Sqoop.runSqoop(sqoop, data)){
return true;
}
}catch (Exception e){
LogUtils.logErrorPrint("ExportCmd 导入到HDFS出现错误",logger,e);
}
return false;
}
结果也是不成功,显示报错不识别-- --schema 。。。为了能够使schema参数生效,废了我不少劲。。。也查了不少资料,但是查到的资料都没有关于java的schema的设置。所以。。。最终正确的解决办法是:
public static boolean ExportCmdInPg(Configuration conf, String tableName, List<String> columns, String hdfsDir,Map<String, String> dbMap) {
try {
LogUtils.logInfoPrint("开始sqoop将oracle的数据导出到HDFS目录",logger);
List<String> list = new ArrayList<>();
list.add("--connect");
list.add(dbMap.get(Constant.DRIVERURL));
list.add("--username");
list.add(dbMap.get(Constant.USER));
list.add("--password");
list.add(dbMap.get(Constant.PASSWORD));
list.add("--table");
list.add(tableName);
list.add("--columns");
list.add(StringUtils.join(columns, ','));
list.add("--fields-terminated-by");
list.add("\t");
list.add("--export-dir");
list.add(hdfsDir);
list.add("-m");
list.add("1");
// 注意这里是--是分开的,源码这里是通过--做判断的
list.add("--");
list.add("--schema");
list.add("HERO");
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
String[] data = list.toArray(new String[0]);
if (0 == data.length) {
LogUtils.logErrorPrint("sqoop参数为空,请检查ExportCmd方法!",logger);
return false;
}
if (0 == Sqoop.runSqoop(sqoop, data)){
return true;
}
}catch (Exception e){
LogUtils.logErrorPrint("ExportCmd 导入到HDFS出现错误",logger,e);
}
return false;
}
当然你也可能会使用字符串数组,数组方式就要这样写了
// 这里只是举个示例
String[] string = new String[]{"--","--schema","HERO"}
so 问题解决,心情愉快。如果问题不解决,可能会憋一天。。。。
sqoop如何指定pg库的模式的更多相关文章
- sqoop与PG库导入导出数据
导入数据到Hive sqoop import --connect jdbc:postgresql://172.66.6.666/radar5g4h --username postgres --pass ...
- Sqoop export参数updatemode两种模式updateonly和allowinsert区别
1.更新导出(updateonly模式)1.1参数说明-- update-key,更新标识,即根据某个字段进行更新,例如id,可以指定多个更新标识的字段,多个字段之间用逗号分隔. -- updatem ...
- Excel数据导入PG库,字符串正则表达式
1.Excel数据导入到PG库的某张表中:先将Excel文件转换为CSV格式,打开SQL Shell(psql),连接数据库(输入server,database,Port,username),然后再执 ...
- Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- gcc -rpath 指定动态库路径
gcc -rpath 指定动态库路径 http://blog.csdn.net/v6543210/article/details/44809405
- @font-face引用指定字体库(一)
创建 文件夹 font 存放指定字体库 在css文件中使用字体库: html, body{ font-family: "Microsoft YaHei",Arial,Helveti ...
- linux 给运行程序指定动态库路径
1. 连接和运行时库文件搜索路径到设置 库文件在连接(静态库和共享 库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/li ...
- 开启PG的归档模式
目录 开启PG的归档模式 1.查看pg的数据目录 2.查看pg的归档情况 3.查看归档的模式和位置 4.建立归档目录 5.配置归档参数 6.重启pg 7.查看&&切换归档日志 8.查看 ...
- redis 指定db库导入导出数据
最近根据之前的项目重新改编一个新的项目,发现上一个项目的搭建者,把一些区域权限和划分放在redis上存储,因此不得不照搬过来,所以搜索一下相关如何做的 发现一个比较简单的做法,记录一下操作过程,方便以 ...
随机推荐
- Go 的 golang.org/x/ 系列包和标准库包有什么区别?
在开发过程中可能会遇到这样的情况,有一些包是引入自不同地方的,比如: golang.org/x/net/html 和 net/html, golang.org/x/crypto 和 crypto. 那 ...
- SpringBoot项目使用Nacos作为配置中心
前置条件:jdk.SpringBoot项目.Nacos.Linux服务器(可无) 具体版本:jdk11.SpringBoot 2.3.5.RELEASE.Nacos 2.0.3.Centos 6 目标 ...
- centos7使用docker安装es(elasticsearch)
1.安装docker依赖(已安装可以不用安装) yum install -y docker 2.搜索镜像 docker search elasticsearch 如果出现以下报错 Cannot con ...
- JAVA执行cmd命令方法
package com.cmd; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStre ...
- win10使用cmake编译libevent(解决依赖openssl)
概述 win10没有安装openssl cmake version: 3.18 libevent version: 2.1.10-stable libevent目前的版本中写好了 CMakeLists ...
- 【九度OJ】题目1018:统计同成绩学生人数 解题报告
[九度OJ]题目1018:统计同成绩学生人数 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1018 题目描述: ...
- 【LeetCode】976. Largest Perimeter Triangle 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...
- 【LeetCode】123. Best Time to Buy and Sell Stock III 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 从头造轮子:python3 asyncio 之 run(2)
前言 书接上文,本文造第二个轮子,也是asyncio包里面非常常用的一个函数run 一.知识准备 ● 相对于run_until_complete,改动并不大,就是将入口函数重新封装了一下,基础知识主要 ...
- Springcloud-alibaba学习实践(2)- nacos&Eureka Server服务注册实践
前言:上一篇已搭建好了springcloud服务注册中心(Nacos&Eureka Server),本篇继续代码实践,注册服务到服务中心,本篇只是演示了两种注册中心,后续我们以Nacos注册中 ...