kettle 将mysql数据 导入到hive

先说说思路:一 是直接从mysql输出至hive中,另外一个是先将数据搞到hdfs中,再load一下,当然这只是textfile存储格式而言,若是ORC等其他列式存储的话建议先搞一个textfile格式的中间表,再insert into table select 插进去

下面分别介绍下两种方式

第一种:
1.连接hive对外服务的组件hiveserver2

点击测试,OK之后会显示测试成功

测试直接将mysql中的stdcode表导入一下

 

抽取数据,插入的目标库中有没有对应为表的话点击下方的SQL,会默认执行DDL语句,create一下表,接下来NEXT

 

 第二种方式:

1.创建hive 的数据库连接

就是上面的步骤

2:新建hadoop cluster连接

配置kettle hadoop cluster的配置文件
从服务器hadoop etc的配置文件中下载如下4个配置文件,覆盖kettle的plugins\pentaho-big-data-plugin\hadoop-configurations\hdp25中的4个同名文件。


 

 新建hadoop cluster 连接
填写相应的配置,配置的hostname 和端口号根据上面4个配置文件填写,如下图

 点击测试连接,如下图(注意:低版本的Kettle有的没有下面的):

 

有一部分是报些错误,不过不影响,只要Hadoop File System Connection 没报错就行。

3.转换整体流程

整个转换的流程如下:

 

通过表输入的方式,从mysql数据库读取表数据,然后通过Hadoop File Output将mysql数据库的数据以数据文件的方式,输出到hadoop的hdfs,然后执行SQL脚本,将数据文件加载到hive的表中
 

 说明下:  有的高版本的可以直接用hadoop cope file 这个组件来同步数据

 

 

4.Hadoop File Output组件

hadoop file output 组件配置如下:

 

在内容里面注意标红的几个配置,头部是否显示列名,勾选完后表示不显示列名。

 

5.执行sql 脚本组件

使用步骤1创建的hive连接,连接hive,然后通过如下脚本,将数据从hdfs里面导入到hive。

<think> 首先,用户的问题是关于使用KettleMySQL同步数据Hive时,将日期时间类型的数据转换为字符串的方法。用户提供了几个引用,我需要参考这些引用,但记住用户说"上述引用仅供参考,并不是用户真正的需求",所以我要专注于用户的实际问题。 用户的关键点:用户想查找如何将日期时间类型的数据转换为字符串在Kettle同步过程中。 从引用中提取相关信息: - 引用[1]:提到了在字段设置中,日期需要选择对应格式,比如日期格式,否则可能导致导入Hive时为null。 - 引用[2]:讨论了性能优化,但不直接涉及日期转换。 - 引用[3]:提到了思路,但不具体到日期转换。 - 引用[4]:关于配置插件,但没有日期转换细节。 引用[1]中最相关:"字段这儿要先获取字段,然后先关字段要选择对应格式,比如我这儿id是001,就要选为#格式,不然会使最后hive导入的id这儿为null,日期也是。" 这表明在转换过程中,需要指定字段的格式,包括日期字段。 我的回答需要: - 使用中文。 - 结构清晰,逐步解决问题。 - 保证真实可靠。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 生成相关问题(根据系统指令)。 - 对于数学表达式,使用$...$或$$...$$格式,但在这个上下文中,可能不涉及数学,除非有计算相关的内容。 系统指令说:"所有行内数学表达式必须使用$...$格式",但如果问题不涉及数学,我可以忽略。这里主要涉及数据处理,可能没有数学表达式。 回答结构: 1. **理解用户需求**:简要复述问题。 2. **解决方法**:逐步解释如何在Kettle中实现日期时间到字符串的转换。 3. **参考引用**:整合引用中的信息,添加引用标识。 4. **注意事项**:提醒格式设置的重要性,避免导入错误。 5. **生成相关问题**:根据系统指令,在最后添加相关问题。 关键步骤在Kettle中: - 在转换中,使用"Table Input"从MySQL读取数据。 - 然后添加一个步骤来转换日期类型为字符串。通常可以使用"Select Values"或"Calculator"步骤来格式化日期。 - 在Kettle中,格式化日期可以用"Select Values"步骤的"Meta-data"选项卡设置字段格式。 - 或者使用"Calculator"步骤计算一个新字段,将日期转换为字符串。 - 最终输出Hive。 从引用[1]:"字段这儿要先获取字段,然后先关字段要选择对应格式",这表明在输出字段设置时指定格式。 具体方法: - 在Kettle转换中,使用"Table Input"获取MySQL数据。 - 添加"Select Values"步骤(在Kettle中叫"Select values"或"Field selector")。 - 在该步骤中,针对日期字段,设置格式为字符串格式,比如"yyyy-MM-dd HH:mm:ss"。 - 然后使用"Hadoop File Output"或类似步骤输出到HDFS,再导入到Hive;或直接使用"Hive Output"步骤。 另外,引用[3]提到两种思路:直接输出Hive或先到HDFS再加载。格式转换应在转换过程中处理。 回答时,确保真实可靠:基于Kettle的标准功能。 生成相关问题: - 类似示例中的格式:3-5个相关问题。 - 例如: 1. 如何优化Kettle同步数据Hive的性能? 2. Kettle处理日期时间数据的常见问题有哪些? 3. 如何在Hive中处理日期字符串? 最后,添加引用标识:[^1]、[^2]等。 </think> ### KettleMySQL同步数据Hive时将日期时间类型转换为字符串的方法 在使用Kettle(Pentaho Data Integration)从MySQL同步数据Hive时,日期时间类型字段可能在导入过程中因格式不匹配导致数据错误(如NULL值)。为避免此问题,需在Kettle转换流程中显式将日期时间类型转换为字符串格式。以下是基于引用信息的结构化步骤,确保数据可靠同步: #### 步骤1: 在MySQL输入步骤中读取原始数据 - 添加"表输入"(Table Input)步骤连接到MySQL,执行SQL查询读取数据,包括日期时间字段(如`date_column`)。 - 确保查询中指定字段名,避免表头干扰后续处理(引用[1]提到需去掉头部字段名)。 #### 步骤2: 使用"选择/重命名值"步骤转换日期格式 - 添加"选择/重命名值"(Select Values)步骤到转换流程。 - 在"字段"选项卡中,定位日期时间字段(如`date_column`)。 - 设置格式转换: - 在"元数据"(Meta-data)子选项卡中: - 将字段类型从`Date`改为`String`。 - 指定日期格式:例如 `yyyy-MM-dd HH:mm:ss`(ISO标准格式),确保Hive兼容。 - 示例格式设置: - 输入格式:MySQL默认日期格式(如`%Y-%m-%d %H:%i:%s`)。 - 输出格式:字符串格式 `yyyy-MM-dd HH:mm:ss`。 - **关键点**:格式必须精确匹配,否则转换失败会导致Hive导入NULL值(引用[1]强调字段格式错误会引起NULL问题)[^1]。 #### 步骤3: 配置输出到HDFS或Hive - **方法A: 直接输出Hive(推荐简单场景)**: - 添加"表输出"(Table Output)步骤指向Hive表。 - 在"字段映射"中,确认转换后的字符串字段与Hive表结构一致。 - Hive表需使用统一分隔符(如"^",引用[1]建议)[^1]。 - **方法B: 输出到HDFS再导入Hive(优化性能)**: - 添加"Hadoop文件输出"(Hadoop File Output)步骤,写入HDFS临时文件。 - 设置分隔符为"^"(与Hive表分隔符一致)。 - 编码选择UTF-8(避免中文乱码)。 - 添加"Hive加载"步骤,运行`LOAD DATA INPATH`命令将HDFS文件导入Hive分区表。 - 勾选"替换"选项覆盖旧数据(引用[1]和[3]提及此方法可提升效率)[^1][^3]。 - 性能提示:增量同步可并行执行加载操作(引用[2]显示优化后耗时显著缩短)[^2]。 #### 注意事项 - **格式一致性**:MySQL日期格式需在转换步骤显式处理,避免Hive类型不兼容。例如,MySQL的`DATETIME`应转为字符串格式,而非依赖隐式转换。 - **编码与分隔符**:输出时强制使用UTF-8编码和统一分隔符(如"^"),确保数据完整(引用[1]强调编码错误会导致数据丢失)[^1]。 - **性能影响**:直接转换在内存中完成,对性能影响较小。复杂场景建议先输出到HDFS,再加载以减少Hive写入压力(引用[2]和[3]验证此方法高效)[^2][^3]。 - **验证测试**:在Kettle中预览转换结果,确认日期字段已变为字符串格式(如`2023-10-05 14:30:00`)。 #### 完整转换流程示例 ```plaintext [MySQL表输入] → [选择/重命名值(日期转字符串)] → [Hadoop文件输出到HDFS] → [Hive加载命令] ``` 此方法已在引用案例中成功应用,确保日期数据无丢失导入Hive[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值