首批通过分布式安全可靠测评,为关键业务系统打造
命令行应用示例
更新时间:2026-04-07 17:00:52
本文为您介绍一些常用或应用于复杂场景的命令行使用示例。
--auto-column-mapping
默认情况下,OBLOADER 要求源文件的列和目标表完全一致,OBLOADER 根据列顺序导入数据,并不识别列名。
如果源文件与目标表的列数量存在差异,您可以使用参数 --auto-column-mapping,OBLOADER 将根据列名称进行匹配导入,并忽略无法匹配的列。
场景描述
将 /home/admin/obloader 目录下的表 my_table 的 CSV 文件(列名分别为 col1、col2 和 col3)导入至数据库 obloader 中,目标表的列名分别为 col2、col3 和 col4。
源端表数据
$cat my_table.csv 'col1','col2','col3' 'data1',1,'desc1' 'data2',2,'desc2' 'data3',3,'desc3'目标端表结构
obclient [obloader]> DESC my_table; +-------+--------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+------+---------+-------+ | col2 | int(11) | YES | | NULL | | | col3 | varchar(255) | YES | | NULL | | | col4 | varchar(255) | YES | | NULL | | +-------+--------------+------+------+---------+-------+ 3 rows in set (0.035 sec)
不使用 --auto-column-mapping
执行导入命令。
./bin/obloader -h xxx.xxx.xxx.xxx -P xxxx -u test@mysql -D obloader --csv --table 'my_table' -f /home/admin/obloader等待命令执行结果,预期会报错。
注意
对于列名不一致但列类型一致的情况,可能会忽略列名进行导入,导致出现数据不一致的问题。
在数据库查询目标表数据,未成功导入。
SELECT * FROM my_table;查询结果如下:
obclient [obloader]> SELECT * FROM my_table; Empty set (0.035 sec)
使用 --auto-column-mapping
执行导入命令。
./bin/obloader -h xxx.xxx.xxx.xxx -P xxxx -u test@mysql -D obloader --csv --table 'my_table' --auto-column-mapping -f /home/admin/obloader等待命令执行结果,预期会导入源端
col2和col3列的数据,col4列会填充默认值。在数据库查询目标表数据,符合预期。
SELECT * FROM my_table;查询结果如下:
obclient [obloader]> SELECT * FROM my_table; +------+---------+------+ | col2 | col3 | col4 | +------+---------+------+ | 1 | desc1 | NULL | | 2 | desc2 | NULL | | 3 | desc3 | NULL | +------+---------+------+ 3 rows in set (0.033 sec)
--source-type hive
默认情况下,OBLOADER 根据源文件结构,按照列的位置和目标表映射并导入数据。在 Hive 场景下,如果源文件与目标表的列数量存在差异,您可以使用参数 --source-type hive 将源路径的目录名解析为列值,并搭配参数 --auto-column-mapping 解决列位置不对齐的问题。
场景描述
将 Hive 存储的 Parquet 格式的文件 part-00439-07417647-caab-4f87-823d-7c6dfac92211.c000(列名分别为 id、name、age 和 city)导入至数据库 obloader 的目标表 tbl1(列名分别为 id、name、age、city 和 dt)中。
源端 Hive 数据存放结构
hive/ └── tbl1 └── dt=2025 └── part-00439-07417647-caab-4f87-823d-7c6dfac92211.c000目标端表结构
CREATE TABLE tbl1 ( id INT NOT NULL, -- 用户 ID name VARCHAR(50) NOT NULL, -- 用户姓名 age INT NOT NULL, -- 用户年龄 city VARCHAR(50) NOT NULL, -- 用户所在城市 dt YEAR NOT NULL -- 年份 ) PARTITION BY RANGE (dt) ( PARTITION P0 VALUES LESS THAN (2024), PARTITION P1 VALUES LESS THAN (MAXVALUE) );
实现方式
在导入命令中使用参数 --source-type hive 识别源端目录 dt=2025 为一列,并搭配参数 --auto-column-mapping 用于根据列名进行映射。
执行导入命令。
./bin/obloader --user root@sun2 -h xxx.xxx.xxx.xxx -P xxxx -D obloader --table 'tbl1' --truncate-table --par -f ${hdfs_path} -pxxxx --log-path /tmp/ --source-type hive --auto-column-mapping --file-regular-expression '.*'等待命令执行结果,预期源端的目录名
dt=2025会导入至目标端表的dt列中。在数据库查询目标表数据,符合预期。
obclient [obloader]> SELECT * FROM tbl1; +------+---------+------+-------------+------+ | id | name | age | city | dt | +------+---------+------+-------------+------+ | 1 | Alice | 25 | New York | 2025 | | 2 | Bob | 30 | Los Angeles | 2025 | | 3 | Charlie | 35 | Chicago | 2025 | | 4 | David | 40 | Houston | 2025 | | 5 | Eve | 45 | Phoenix | 2025 | +------+---------+------+-------------+------+