通过DataX将文件系统迁移到MySQL
python /bigdata/datax/bin/datax.py -r txtfilereader -w mysqlwriter
配置文件如下,(json文件中是不允许有//注释的,这里为了理解配置项的含义所以给加上了)
{
"job": {
// 数据同步任务的具体内容配置,包含数据源读取和写入目标的配置
"content": [
{
// 数据源读取器配置
"reader": {
// 读取器名称,使用 txtfilereader 从文本文件读取数据
"name": "txtfilereader",
// 读取器的参数配置
"parameter": {
// 定义要读取的列信息,包含数据类型和列索引
"column": [
{
// 第一列数据类型为 long
"type": "long",
// 列索引为 0
"index": 0
},
{
// 第二列数据类型为 string
"type": "string",
// 列索引为 1
"index": 1
},
{
// 第三列数据类型为 double
"type": "double",
// 列索引为 2
"index": 2
}
],
// 文本文件中字段的分隔符
"fieldDelimiter": ",",
// 要读取的文件路径,支持通配符
"path": "/bigdata/dataCP/movies*",
// 是否跳过文件的首行
"skipHeader": true
}
},
// 数据写入器配置
"writer": {
// 写入器名称,使用 mysqlwriter 将数据写入 MySQL 数据库
"name": "mysqlwriter",
// 写入器的参数配置
"parameter": {
// 写入模式,使用 insert 插入数据
"writeMode": "insert",
// 数据库用户名
"username": "root",
// 数据库密码
"password": "123456",
// 要写入的数据库表的列名
"column": [
"id",
"name",
"score"
],
// 数据库连接配置
"connection": [
{
// JDBC 连接 URL
"jdbcUrl": "jdbc:mysql://master:3306/datax?useSSL=false",
// 要写入的数据库表名
"table": [
"movies"
]
}
]
}
}
}
],
// 任务的设置信息
"setting": {
// 任务速度相关设置
"speed": {
// 并发通道数
"channel": "1"
}
}
}
}
在 JSON(JavaScript Object Notation)中,{}
和[]
有着不同的含义和用途:
花括号{}
{}
用于表示对象(Object) 。对象是一种无序的键值对集合,每个键(Key)和值(Value)之间用冒号:
分隔,不同的键值对之间用逗号,
分隔。
在展示的配置文件中:
{ "job": { ... } }
整体是一个对象,job
是这个对象的键,它对应的值也是一个对象(内部包含content
和setting
等键值对 )。{ "reader": { ... } }
,reader
是外层对象的键,对应的值又是一个对象,里面包含name
和parameter
等键值对 ,用于描述数据源读取器的相关配置 。{ "writer": { ... } }
同理,writer
对应的值是描述数据写入器配置的对象 。
方括号[]
[]
用于表示数组(Array) 。数组是一种有序的元素列表,元素之间用逗号,
分隔,元素可以是不同类型,比如字符串、数字、对象等。
在配置文件中:
[ { "reader": { ... }, "writer": { ... } } ]
,这里的content
键对应的值是一个数组,数组中只有一个对象(这个对象又包含reader
和writer
等配置 )。在更复杂的场景下,content
数组中可能有多个类似的对象,来配置多个不同的数据同步任务。["id", "name", "score"]
,这是一个包含三个字符串元素的数组,用于指定要写入数据库表的列名 。["movies"]
,是包含一个字符串元素的数组,指定要写入的数据库表名 。
简单来说,如果你想表示一组相关的、有特定名称(键 )的数据集合,就用{}
表示对象;如果只是想表示一组有序的、不需要特定名称标识的元素列表,就用[]
表示数组。