DataX从Mysql导数据到Hive分区表案例

0、下载DataX并解压到对应目录

DataX安装包,开箱即用,无需配置。

https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz

相关参考文档

https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md

1、Hive分区表DDL样例

注意分隔符号要和后续的DataX配置保持一致,同时在此将贴源层数据类型统一为String。

sql 复制代码
CREATE TABLE datax.fin_transaction_flow (
  transaction_id     STRING COMMENT '交易唯一ID(主键)',
  account_no         STRING COMMENT '账户号(外键 -> account_info.account_no)',
  transaction_code   STRING COMMENT '交易类型编码(外键 -> transaction_reference.transaction_code)',
  amount             STRING COMMENT '交易金额(格式:整数部分18位,小数2位)',
  currency           STRING COMMENT '币种(如CNY/USD)',
  counterparty_account STRING COMMENT '对手账户(外键 -> account_info.account_no)',
  transaction_time   STRING COMMENT '交易时间(格式:yyyy-MM-dd HH:mm:ss)',
  status             STRING COMMENT '交易状态(成功/失败)',
  channel            STRING COMMENT '交易渠道(ATM/网银)'
)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\b'
STORED AS ORC ;

2、DataX Json配置样例

创建以下Json文件(mysql-hive.json)并放置到DataX节点合适目录下。

json 复制代码
{
  "job": {
    "setting": {
      "speed": {
        "channel": 4
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "root",
            "password": "pwd",
            "connection": [
              {
                "querySql": [
                  "select  transaction_id,account_no,transaction_code,amount,currency,counterparty_account,transaction_time,status,channel from fin_transaction_flow where dt='20250416';"
                ],
                "jdbcUrl": [
                  "jdbc:mysql://chdp01:3306/bg2025"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "hdfswriter",
          "parameter": {
            "defaultFS": "hdfs://chdp01:9000",
            "fileType": "orc",
            "path": "/user/hive/warehouse/datax.db/fin_transaction_flow/dt=20250416",
            "fileName": "xxxx",
            "column": [
              {
                "name": "transaction_id",
                "type": "STRING"
              },
              {
                "name": "account_no",
                "type": "STRING"
              },
              {
                "name": "transaction_code",
                "type": "STRING"
              },
              {
                "name": "amount",
                "type": "STRING"
              },
              {
                "name": "currency",
                "type": "STRING"
              },
              {
                "name": "counterparty_account",
                "type": "STRING"
              },
              {
                "name": "transaction_time",
                "type": "STRING"
              },
              {
                "name": "status",
                "type": "STRING"
              },
              {
                "name": "channel",
                "type": "STRING"
              }
            ],
            "writeMode": "append",
            "fieldDelimiter": "\b",
            "compress": "NONE"
          }
        }
      }
    ]
  }
}

3、手动创建对应分区目录

shell 复制代码
hadoop fs -mkdir /user/hive/warehouse/datax.db/fin_transaction_flow/dt=20250416

4、执行DataX

shell 复制代码
./bin/datax.py ../mysql-hive.json

看最终状态显示成功

hdfs目标目录里也有了对应文件

5、添加分区信息

经过上述操作还不能直接从hive表里查询出数据,因为元数据信息尚未构建起来。

复制代码
ALTER TABLE datax.fin_transaction_flow ADD IF NOT EXISTS PARTITION (dt='20250416');

6、验证数据

7、问题:发现count数据为0

sql 复制代码
select count(*) from datax.fin_transaction_flow;

这个是因为hive未及时构建表分析信息导致,手动执行如下表分析sql即可

sql 复制代码
analyze table datax.fin_transaction_flow compute statistics;
相关推荐
杨云龙UP7 分钟前
CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程
数据库·oracle
ezl1fe18 分钟前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端
小咖张24 分钟前
spring声明式事务,finally 中return对事务回滚的影响
数据库·java 声明式事务
JSON_L26 分钟前
MySQL 加锁与解锁函数
数据库·mysql
白鲸开源2 小时前
收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态
大数据·数据库·开源
MonKingWD2 小时前
MySQL事务篇-事务概念、并发事务问题、隔离级别
数据库·后端·mysql
我科绝伦(Huanhuan Zhou)2 小时前
银河麒麟V10一键安装Oracle 11g脚本分享
数据库·oracle
秋千码途4 小时前
一道同分排名的SQL题
数据库·sql
似水流年流不尽思念5 小时前
MySQL 的 MVCC 到底解决了幻读问题没有?请举例说明。
mysql·面试
秋难降6 小时前
零基础学SQL(八)——事务
数据库·sql·mysql