在Linux(如Ubuntu、CentOS)上使用Informix进行数据分析前,需先完成数据库的安装与基础配置,确保数据库服务正常运行。
groupadd informix
useradd -g informix -d /opt/informix -m informix
passwd informix
chmod 755 /opt/informix
~/.bash_profile(或用户对应的shell配置文件),添加Informix相关变量:export INFORMIXDIR=/opt/informix # Informix安装根目录
export INFORMIXSERVER=ifxserver # 数据库服务器实例名
export ONCONFIG=onconfig.ifxserver # 配置文件名
export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts.ifxserver # SQL主机配置文件
export PATH=$INFORMIXDIR/bin:$PATH # 添加Informix命令到PATH
source ~/.bash_profile # 使变量生效
ids-11.70.FC7TL.linux-x86_64.tar)。tar -xvf ids-11.70.FC7TL.linux-x86_64.tar
cd ids-11.70.FC7TL.linux-x86_64
./ids_install # 按提示完成安装(选择典型安装即可)
cp $INFORMIXDIR/etc/onconfig.std $INFORMIXDIR/etc/onconfig.ifxserver
onconfig.ifxserver:修改关键参数(根据服务器资源调整):ROOTPATH=/dbs/rootdbs # Root数据库路径
DBSERVERNAME=ifxserver # 数据库服务器名称(需与ONCONFIG变量一致)
NETTYPE=soctcp # 网络类型(TCP/IP)
SHMVIRTSIZE=80000 # 共享内存初始大小(80MB)
mkdir -p /dbs
chown -R informix:informix /dbs
touch /dbs/rootdbs
chown informix:informix /dbs/rootdbs
chmod 660 /dbs/rootdbs
oninit -ivy # -i初始化,-v显示详细日志,-y自动确认
/etc/services,添加Informix服务端口:sqlexec 1526/tcp # SQL执行端口
sqlexed 1528/tcp # SQL执行端口(备用)
sqlhosts文件:编辑$INFORMIXDIR/etc/sqlhosts.ifxserver,添加本地连接:ifxserver onipcshm linux # 共享内存连接
ifxserver_tcp onsoctcp linux # TCP/IP连接
onmode -c startup # 启动数据库
onstat -o # 验证状态(显示“Server started”即为成功)
dbaccess -e <<EOF
CREATE DATABASE testdb WITH BUFFERPOOL BP8K, LOG;
CONNECT TO testdb;
EOF
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50),
salary DECIMAL(10,2),
dept_id INT,
hire_date DATE
);
完成数据库配置后,可通过SQL查询、工具集成等方式进行数据分析。
LOAD命令批量导入:将CSV文件数据导入表中(需提前创建表结构)。dbaccess testdb <<EOF
LOAD FROM '/path/employees.csv' DELIMITER ',' INSERT INTO employees;
EOF
INSERT语句手动插入:适合小批量数据测试。INSERT INTO employees VALUES (1, 'John Doe', 5000.00, 101, '2023-01-15');
Informix支持标准SQL语法,结合其扩展功能可实现复杂分析:
SELECT emp_name, salary FROM employees WHERE dept_id = 101;
SELECT dept_id, COUNT(*) AS emp_count, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
ORDER BY avg_salary DESC;
SELECT e.emp_name, d.dept_name, e.salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id;
SELECT emp_name, salary,
RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dept_rank
FROM employees;
dbaccess(命令行)、IBM Data Studio(图形化)可用于执行SQL、查看结果。dbaccess testdb -e "SELECT * FROM employees;"
CREATE INDEX idx_emp_dept ON employees(dept_id);
CREATE UNIQUE INDEX idx_emp_id ON employees(emp_id); -- 主键自动创建唯一索引
EXPLAIN分析查询计划,避免全表扫描。EXPLAIN SELECT * FROM employees WHERE emp_name LIKE '%John%';
-- 查看当前执行的SQL
SELECT username, sqx_sqlstatement FROM sysmaster:syssqexplain;
-- 查看系统概要信息(缓存命中率、锁等待等)
SELECT name, value FROM sysmaster:sysprofile;
onbar或dbexport工具备份数据,防止数据丢失。