sqoop导出hive数据到mysql避免空值

sqoop导入导出问题

sqoop export --connect jdbc:mysql://ip:3306/eqpt_base_db?characterEncoding=utf8 --username root --password secret_password --table A_JQZ_T_GAS_GET_ORDER_NUM_INFO_S  --export-dir  /user/hive/warehouse/origin_ennenergy_energytrade.db/a_jqz_t_gas_get_order_num_info_s  --input-null-string ‘\\N‘ --input-null-non-string ‘\\N‘ --fields-terminated-by ‘\t‘

为了避免空值时,没有数据,需要以下命令:

--input-null-string ‘\\N‘ --input-null-non-string ‘\\N‘ --fields-terminated-by ‘\t‘

由sqoop导入失败发现的hive的空值问题

先说基础知识
hive中空值分两种
(1)NULL
hive中null实际在HDFS中默认存储为‘\N‘,通过查询显示的是‘NULL‘。

这时如果查询为空值的字段可通过语句:aaa is null 或者 aaa =‘\N‘ 实现。
此时可用hive中与null有关的函数,如nvl,coalesce,is null等判断是否为null是为true。

产生NULL值,一般都是由hive外链接引起的。

(2)‘‘
‘‘ 表示的是字段不为null且为空字符串,此时用 aaa is null 是无法查询这种值的,必须通过 aaa ==‘‘ 或者 length(aaa)=0 查询

产生‘‘值,一般都是源数据为空。

之前项目中用到sqoop工具从HDFS中往数据库中导数据时,任务失败。不得已,用二分法导数据,去排查问题,看看是哪一条数据导致任务报错。最后排查到数据文件中有字段的值为空。但是奇怪的是,在hive sql里面已经加为null判断了。再看数据文件,发现其中的值不是通常的NULL,或者是\N,而是‘‘。

所以得到原因,用判断null的nvl函数并不能排除‘‘的情况,需要用IF(aaa == ‘‘,‘未知‘,aaa) AS aaa 来判断。

原文地址:https://www.cnblogs.com/18800105616a/p/12603980.html

时间: 2024-11-03 16:29:24

sqoop导出hive数据到mysql避免空值的相关文章

如何利用sqoop将hive数据导入导出数据到mysql

运行环境  centos 5.6   hadoop  hive sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具. 上海尚学堂hadoop大数据培训组原创,陆续有hadoop大数据技术相关文章奉上,请多关注! 在使用过程中可能遇到的问题: sqoop依赖zookeeper,所以必须配置ZOOKEEPER_HOME到环境变量中. sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.ja

关于使用sqoop export 导出hdfs数据到mysql中文乱码问题

前几天使用sqoop将hdfs的数据导入mysql中,发现中文导进去后会乱码,我的执行命令是: sqoop export  --connect "jdbc:mysql://10.19.157.*****?useUnicode=true&characterEncoding=utf-8" --table msg_rule_copy --username root --password root*** --export-dir $path --hadoop-home $home --

Scrapy基础(十二)————异步导出Item数据到Mysql中

异步导出数据到Mysql中 上次说过从Item中同步写入数据库,因为网络的下载速度和数据库的I/O速度是不一样的所以有可能会发生下载快,但是写入数据库速度慢,造成线程的堵塞:关于堵塞和非堵塞,同步和异步的关系,因为没接触过,所以也不是很好的理解,这里查看了些资料,已做记录 链接1:https://www.zhihu.com/question/19732473;http://wiki.jikexueyuan.com/project/twisted-intro/ 实现异步写入mysql数据库的思路:

[Sqoop]将Hive数据表导出到Mysql

业务背景 mysql表YHD_CATEG_PRIOR的结构如下: -- Table "YHD_CATEG_PRIOR" DDL CREATE TABLE `YHD_CATEG_PRIOR` ( `category_id` int(11) NOT NULL COMMENT '类目ID', `category_name` varchar(250) DEFAULT NULL COMMENT '类目名称', `category_level` int(11) DEFAULT '0' COMMEN

利用sqoop从 hive中往mysql中导入表出现的问题

这个错误的原因是指定Hive中表字段之间使用的分隔符错误,供Sqoop读取解析不正确.如果是由hive执行mapreduce操作汇总的结果,默认的分隔符是 '\001',否则如果是从HDFS文件导入的则分隔符则应该是'\t'.此处我是hive执行mapreduce分析汇总的结果,所以默认的分隔是'\001'.Sqoop命令修改如下,指定分隔符: [[email protected] ~]$ sqoop-export --connect jdbc:mysql://secondmgt:3306/tr

hbase结合hive和sqoop实现数据指导mysql

hive综合hbase两个优势表中的:    1.实现数据导入到MYSQL. 2.实现hbase表转换为另外一张hbase表. 三个操作环节: 1.hbase关联hive作为外部表: Sql代码   CREATE EXTERNAL TABLE hive_device_app(row_key string,genera_type string,install_type string,label string,meid string,model string,pkg_name string,spec

HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)

Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据导入到HDFS 1.使用MySQL工具手工导入 把MySQL的导出数据导入到HDFS的最简单方法就是,使用命令行工具和MySQL语句. 为了导出整个数据表或整个数据库的内容,MySQL提供了mysqldump工具. 比如 SELECT  col1,col2 FORM TABLE INTO OUTFI

详细总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出

一.使用Sqoop将MySQL中的数据导入到HDFS/Hive/HBase 二.使用Sqoop将HDFS/Hive/HBase中的数据导出到MySQL 2.3 HBase中的数据导出到mysql 目前没有直接的命令将HBase中的数据导出到MySQL,但可以先将HBase中的数据导出到HDFS中,再将数据导出到MySQL. 三.使用Sqoop将Oracle中的数据导入到HDFS/Hive/HBase 下面只给出将Oracle中的数据导入HBase,其他情况下的命令行选项与MySQL的操作相似 O

1.131.15 Sqoop导出数据Export使用

一.export 1.export概述 export工具将一组文件从HDFS导入到RDBMS.目标表必须已经存在于数据库中.根据用户指定的分隔符读取输入文件并将其解析为一组记录, 只有map: [[email protected] sqoop-1.4.5-cdh5.3.6]# bin/sqoop help export sqoop-export有三种模式: 默认模式:将它们转换为一组将INSERT语句注入数据库的语句. 更新模式:Sqoop将生成UPDATE替换数据库中现有记录的语句. 调用模式