摘要: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库的模式的更多相关文章

  1. sqoop与PG库导入导出数据

    导入数据到Hive sqoop import --connect jdbc:postgresql://172.66.6.666/radar5g4h --username postgres --pass ...

  2. Sqoop export参数updatemode两种模式updateonly和allowinsert区别

    1.更新导出(updateonly模式)1.1参数说明-- update-key,更新标识,即根据某个字段进行更新,例如id,可以指定多个更新标识的字段,多个字段之间用逗号分隔. -- updatem ...

  3. Excel数据导入PG库,字符串正则表达式

    1.Excel数据导入到PG库的某张表中:先将Excel文件转换为CSV格式,打开SQL Shell(psql),连接数据库(输入server,database,Port,username),然后再执 ...

  4. Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

  5. gcc -rpath 指定动态库路径

    gcc -rpath 指定动态库路径 http://blog.csdn.net/v6543210/article/details/44809405

  6. @font-face引用指定字体库(一)

    创建 文件夹 font 存放指定字体库 在css文件中使用字体库: html, body{ font-family: "Microsoft YaHei",Arial,Helveti ...

  7. linux 给运行程序指定动态库路径

    1. 连接和运行时库文件搜索路径到设置 库文件在连接(静态库和共享 库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/li ...

  8. 开启PG的归档模式

    目录 开启PG的归档模式 1.查看pg的数据目录 2.查看pg的归档情况 3.查看归档的模式和位置 4.建立归档目录 5.配置归档参数 6.重启pg 7.查看&&切换归档日志 8.查看 ...

  9. redis 指定db库导入导出数据

    最近根据之前的项目重新改编一个新的项目,发现上一个项目的搭建者,把一些区域权限和划分放在redis上存储,因此不得不照搬过来,所以搜索一下相关如何做的 发现一个比较简单的做法,记录一下操作过程,方便以 ...

随机推荐

  1. C++实现反射---RTTR库的使用

    使用过C#或者Java 的童鞋,应该对这些语言提供的反射机制有所了解.所谓反射,在我看来就是在只知道一个类的名字(字符串形式)的情况下,自动创建出具体的类实例,并且能够枚举该类型拥有的属性.方法等信息 ...

  2. 关于编写c++动态库常用的定义

    1. 关于 1.1 最近一段时间,写了不少动态库,慢慢的也积累了东西. 1.2 之前一直做Windows的动态库,没有做过Linux和OS X的动态库,太缺乏经验了: 代码缺乏 编译器支持的判断.缺乏 ...

  3. c++基础之operator =处理

    1.注意自我赋值 先看个例子: class A {}; A a ; a = a; // 注意这句 可能实际中,你不会这样做,但是实际中,是有可能的,并且这样做,也不违背语法. BUT, 如果上面的例子 ...

  4. 【LeetCode】409. Longest Palindrome 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:字典统计次数 方法二:HashSet 方法三 ...

  5. 【LeetCode】120. Triangle 解题报告(Python)

    [LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...

  6. 【LeetCode】779. K-th Symbol in Grammar 解题报告(Python)

    [LeetCode]779. K-th Symbol in Grammar 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingz ...

  7. 3998 - Prime k-tuple

    {p1,..., pk : p1 < p2 <...< pk} is called a prime k -tuple of distance s if p1, p2,..., pk ...

  8. 4 种主流的 API 架构风格对比

    1RPC:调用另一个系统的函数 RPC 的工作机制 客户端调用一个远程的过程,将参数和附加信息序列化为消息,然后将消息发送到服务端.服务端在接受到消息后,将信息的内容反序列化,执行所请求的操作,然后将 ...

  9. 替代RTD2166|CS5212直接Pin to pin兼容替代RTD2166|替代RTD2166方案

    RTD2166功能概述 RTD2166是一款DisplayPort端口到VGA转换器,成本较高,Capstone于2019年推出CS5212,直接Pin to pin兼容替代RTD2166,可用原RT ...

  10. 【优雅代码】03-optional杜绝空指针异常

    [优雅代码]03-optional杜绝空指针异常 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...