ods数据导入mysql

本文介绍了如何将ods格式的数据导入mysql,首先尝试通过Java操作openoffice库读取ods并填充JavaBean,但由于构造方法参数问题未能实现。后来发现phpmyadmin能直接导入ods,节省了大量时间。同时,对于mdb数据,先转换为csv再导入,但遇到文件大小限制,通过调整php.ini解决了问题。最后发现mdb-export生成的sql文件中每个记录都是独立的insert语句,改为批处理方式显著提高了导入效率。

    之前记录了mdb格式中的数据如何导出,这次是ods格式。

    为了导出数据,还专门查阅了用Java操作openoffice的相关库,并做了简单的测试,确实很方便就能读取到ods中表的内容。但是,读取出来以后如何放到针对mysql数据表的JavaBean中还是个问题。首先的思路是写一个一劳永逸的通用方法,使用具体JavaBean作为参数,在方法内获取ods的数据后,利用反射机制得到JavaBean的构造方法,然后把数据填进去,最后传个List<JavaBean>出来。结果还是Java功力不够深厚,未能实现。最大的阻碍在于每一个JavaBean的构造需要不同的参数,反射获取构造方法时还需要指定参数列表才能得到相应的构造方法。想到一个解决方法:把参数列表也作为参数,与JavaBean一起传到通用方法中;不过这样就整的太复杂了,倒个百十来条的数据,何必呢。

    本着“做懒人”的原则,看到了phpmyadmin能把csv导入到mysql中,而ods能够直接导出csv,于是果断奔向了phpmyadmin。安装以后,直接导入。在导入选项里多看了两眼,支持的格式包括:csv、sql、xml,还有...居然还有openoffice表格,这次真是冤了。果断直接选择openoffice导入,一秒,二秒...页面华丽丽的一刷,数据全部导入。果然以后还是要更懒一点...

    想到之前mdb转出的sql导入mysql时间太长,干脆把mdb转出csv试试吧。没想到这部分数据过大,其实也就20M,但是phpmyadmin提示文件超限,并给出了参考文档的链接:http://localhost/phpmyadmin/Documentation.html#faq1_16,看了一下,原来是php本身在网络上传文件时做了限制,需要修改php.ini。按照文档修改完成以后就可以上传了。心想这次应该没有问题了,点“执行”,页面刷出了一片空白...重复了几次都不行,看了这个已然超出phpmyadmin的能力范围了。

    没办法,刚才一激动已经把mdb转出的那张表删除了,重新倒吧,一想到那么长时间就郁闷。想想应该

### 数据迁移方法 #### 方法一:使用 Sqoop 实现 MySQL 到 Hive 的数据导入 通过 Sqoop 工具可以方便地将 MySQL 中的数据迁移到 Hive。其核心原理是先将数据MySQL 导入到 HDFS,然后再由 Hive 加载这些数据[^1]。 以下是基本命令结构: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <username> \ --password <password> \ --table <table_name> \ --target-dir /path/to/hdfs/directory \ --hive-import \ --hive-database <hive_database_name> \ --hive-table <hive_table_name> ``` 此过程需要注意的是,在执行过程中可能会遇到依赖冲突等问题。例如,如果 Sqoop 缺少某些必要的库文件,则可能导致任务失败。一种常见的解决办法是将 Hive 所需的 jar 文件复制到 Sqoop 的 lib 目录下[^3]。 --- #### 方法二:批量导入多个表并处理异常情况 当需要一次性导入多个表时,可以通过编写 Shell 脚本来完成自动化操作。下面是一个典型的脚本示例: ```bash #!/bin/bash while read line do sqoop import \ --driver com.mysql.cj.jdbc.Driver \ --connect jdbc:mysql://<host>:<port>/<database>?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull \ --username <username> \ --password <password> \ --table "$line" \ --num-mappers 1 \ --hive-import \ --fields-terminated-by ',' \ --hive-overwrite \ --hive-database <hive_db_name> \ --hive-table ods_"$line" \ --null-non-string '\\N' \ --null-string '\\N' done < table_list_file.txt ``` 上述脚本能够逐行读取 `table_list_file.txt` 文件中的表名,并依次调用 Sqoop 命令将其导入到指定的 Hive 表中[^2]。 --- #### 注意事项 1. **字段分隔符设置** 如果 MySQL 和 Hive 的字段分隔方式不同,可以在 Sqoop 命令中通过参数 `--fields-terminated-by` 进行调整。 2. **空值处理** 对于非字符串类型的 NULL 值,默认情况下可能无法正确解析。因此建议显式定义 `--null-non-string` 和 `--null-string` 参数来统一表示 NULL 值。 3. **权限管理** 确保运行 Sqoop 的用户具有足够的权限访问目标目录以及源数据库资源。 --- ### 总结 无论是单次还是批量导入场景,都可以借助 Sqoop 完成高效的数据迁移工作。同时针对可能出现的各种兼容性问题,提前做好环境配置和错误排查准备是非常重要的。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值