自行书写shell脚本,完成ELT的功能,将数据从MySQL中抽取后加载到Oracle中,然后在Oracle中进转换
时间: 2024-03-15 18:45:35 浏览: 79
数据转换mysqltooracle
5星 · 资源好评率100%
这是一个简单的 ELT shell 脚本,可以将数据从 MySQL 中抽取加载到 Oracle 中,并进行转换。请根据实际情况修改数据库连接信息、表名、字段名、转换规则等。
```bash
#!/bin/bash
# 数据库连接信息
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_DB="test"
MYSQL_USER="root"
MYSQL_PASSWORD="password"
ORACLE_HOST="localhost"
ORACLE_PORT="1521"
ORACLE_SID="ORCLCDB"
ORACLE_USER="system"
ORACLE_PASSWORD="password"
# 抽取 MySQL 数据
mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DB} -N -e "SELECT * FROM users" | \
# 转换数据格式
awk -F'\t' '{print $1","$2","$3}' | \
# 加载到 Oracle
sqlldr ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_SID} control=users.ctl log=users.log
# 转换 Oracle 数据
sqlplus ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_SID} @users.sql
```
其中 `users.ctl` 文件内容如下:
```ctl
LOAD DATA
INFILE *
APPEND INTO TABLE users
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
id INTEGER EXTERNAL,
name CHAR(50),
age INTEGER
)
```
`users.sql` 文件内容如下:
```sql
UPDATE users SET name = UPPER(name);
```
这个脚本假设 MySQL 中有一个名为 `users` 的表,包含 `id`、`name` 和 `age` 三个字段,其中 `name` 字段需要转换为大写字母。脚本首先使用 MySQL 的命令行工具将数据抽取到标准输出中,然后使用 awk 将数据格式转换为逗号分隔的形式,最后使用 Oracle 的 sqlldr 工具将数据加载到 Oracle 中。加载完成后,脚本使用 sqlplus 工具执行一条 SQL 语句将 `name` 字段转换为大写字母。
阅读全文