首页 > 其他分享 >大数据技术之DataX

大数据技术之DataX

时间:2023-10-19 17:35:21浏览次数:27  
标签:province CN 技术 name base datax 数据 DataX

一、DataX简介

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

二、DataX架构原理

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

 

1.DataX框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework

Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

Framework:用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

2.DataX运行流程

 

Job单个数据同步的作业,称为一个Job,一个Job启动一个进程。

Task根据不同数据源的切分策略,一个Job会切分为多个Task,Task是DataX作业的最小单元每个Task负责一部分数据的同步工作。

TaskGroupScheduler调度模块会对Task进行分组,每个Task组称为一个Task Group。每个TaskGroup负责以一定的并发度运行其所分得的Task,单个Task Group的并发度为5。

Reader>Channel>Writer每个Task启动后,都会固定启动Reader>Channel>Writer的线程来完成同步工作。

 

3.DataX调度决策思路

举例来说,用户提交了一个DataX作业,并且配置了总的并发度为20,目的是对一个有100张分表的mysql数据源进行同步。DataX的调度决策思路是:

1)DataX Job根据分库分表切分策略,将同步工作分成100个Task。

2)根据配置的总的并发度20,以及每个Task Group的并发度5,DataX计算共需要分配4个TaskGroup。

3)4个TaskGroup平分100个Task,每一个TaskGroup负责运行25个Task。

 

4.DataX与Sqoop对比

 

三、DataX部署

1)下载DataX安装包并上传到hadoop102的/opt/software

下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

2)解压datax.tar.gz到/opt/module

3)自检,执行如下命令

[root@hadoop102 ~]$ python /opt/module/datax/bin/datax.py /opt/module/datax/job/job.json

 

出现如下内容,则表明安装成功

……

2021-10-12 21:51:12.335 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-12 21:51:02

任务结束时刻                    : 2021-10-12 21:51:12

任务总计耗时                    :                 10s

任务平均流量                    :          253.91KB/s

记录写入速度                    :          10000rec/s

读出记录总数                    :              100000

读写失败总数                    :                   0

四、DataX使用

1.DataX使用概述

(1)DataX任务提交命令

DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

[root@hadoop102 datax]$ python bin/datax.py path/to/your/job.json

 

(2)DataX配置文件格式

可以使用如下命名查看DataX配置文件模板。

[root@hadoop102 datax]$ python bin/datax.py -r mysqlreader -w hdfswriter

配置文件模板如下,json最外层是一个job,job包含setting和content两部分,其中setting用于对整个job进行配置,content用户配置数据源和目的地。

Reader和Writer的具体参数可参考官方文档,地址如下:

https://github.com/alibaba/DataX/blob/master/README.md

 

2.同步MySQL数据到HDFS案例

案例要求:同步gmall数据库中base_province表数据到HDFS的/base_province目录

需求分析:要实现该功能,需选用MySQLReader和HDFSWriter,MySQLReader具有两种模式分别是TableMode和QuerySQLMode,前者使用table,column,where等属性声明需要同步的数据;后者使用一条SQL查询语句声明需要同步的数据。

下面分别使用两种模式进行演示。

(1)MySQLReader之TableMode

1)编写配置文件

(1)创建配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

 

(2)配置文件内容如下

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mysqlreader",

                    "parameter": {

                        "column": [

                            "id",

                            "name",

                            "region_id",

                            "area_code",

                            "iso_code",

                            "iso_3166_2"

                        ],

                        "where": "id>=3",

                        "connection": [

                            {

                                "jdbcUrl": [

                                    "jdbc:mysql://hadoop102:3306/gmall"

                                ],

                                "table": [

                                    "base_province"

                                ]

                            }

                        ],

                        "password": "000000",

                        "splitPk": "",

                        "username": "root"

                    }

                },

                "writer": {

                    "name": "hdfswriter",

                    "parameter": {

                        "column": [

                            {

                                "name": "id",

                                "type": "bigint"

                            },

                            {

                                "name": "name",

                                "type": "string"

                            },

                            {

                                "name": "region_id",

                                "type": "string"

                            },

                            {

                                "name": "area_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_3166_2",

                                "type": "string"

                            }

                        ],

                        "compress": "gzip",

                        "defaultFS": "hdfs://hadoop102:8020",

                        "fieldDelimiter": "\t",

                        "fileName": "base_province",

                        "fileType": "text",

                        "path": "/base_province",

                        "writeMode": "append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}

 

2)配置文件说明

(1)Reader参数说明

 

(2)Writer参数说明

 

注意事项:

HFDS Writer并未提供nullFormat参数:也就是用户并不能自定义null值写到HFDS文件中的存储格式。默认情况下,HFDS Writer会将null值存储为空字符串(‘’),而Hive默认的null值存储格式为\N。所以后期将DataX同步的文件导入Hive表就会出现问题。

 

解决该问题的方案有两个:

一是修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考https://blog.csdn.net/u010834071/article/details/105506580。

二是在Hive中建表时指定null值存储格式为空字符串(‘’),例如:

DROP TABLE IF EXISTS base_province;

CREATE EXTERNAL TABLE base_province

(

    `id`         STRING COMMENT '编号',

    `name`       STRING COMMENT '省份名称',

    `region_id`  STRING COMMENT '地区ID',

    `area_code`  STRING COMMENT '地区编码',

    `iso_code`   STRING COMMENT '旧版ISO-3166-2编码,供可视化使用',

    `iso_3166_2` STRING COMMENT '新版IOS-3166-2编码,供可视化使用'

) COMMENT '省份表'

    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

    NULL DEFINED AS ''

    LOCATION '/base_province/';

 

(3)Setting参数说明

 

3)提交任务

(1)在HDFS创建/base_province目录

使用DataX向HDFS同步数据时,需确保目标路径已存在

[root@hadoop102 datax]$ hadoop fs -mkdir /base_province

 

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

 

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/base_province.json

 

4)查看结果

(1)DataX打印日志

2021-10-13 11:13:14.930 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 11:13:03

任务结束时刻                    : 2021-10-13 11:13:14

任务总计耗时                    :                 11s

任务平均流量                    :               66B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  32

读写失败总数                    :                   0

 

(2)查看HDFS文件

[root@hadoop102 datax]$ hadoop fs -cat /base_province/* | zcat

3 山西 1 140000 CN-14 CN-SX

4 内蒙古 1 150000 CN-15 CN-NM

5 河北 1 130000 CN-13 CN-HE

6 上海 2 310000 CN-31 CN-SH

7 江苏 2 320000 CN-32 CN-JS

8 浙江 2 330000 CN-33 CN-ZJ

9 安徽 2 340000 CN-34 CN-AH

10 福建 2 350000 CN-35 CN-FJ

11 江西 2 360000 CN-36 CN-JX

12 山东 2 370000 CN-37 CN-SD

14 台湾 2 710000 CN-71 CN-TW

15 黑龙江 3 230000 CN-23 CN-HL

16 吉林 3 220000 CN-22 CN-JL

17 辽宁 3 210000 CN-21 CN-LN

18 陕西 7 610000 CN-61 CN-SN

19 甘肃 7 620000 CN-62 CN-GS

20 青海 7 630000 CN-63 CN-QH

21 宁夏 7 640000 CN-64 CN-NX

22 新疆 7 650000 CN-65 CN-XJ

23 河南 4 410000 CN-41 CN-HA

24 湖北 4 420000 CN-42 CN-HB

25 湖南 4 430000 CN-43 CN-HN

26 广东 5 440000 CN-44 CN-GD

27 广西 5 450000 CN-45 CN-GX

28 海南 5 460000 CN-46 CN-HI

29 香港 5 810000 CN-91 CN-HK

30 澳门 5 820000 CN-92 CN-MO

31 四川 6 510000 CN-51 CN-SC

32 贵州 6 520000 CN-52 CN-GZ

33 云南 6 530000 CN-53 CN-YN

13 重庆 6 500000 CN-50 CN-CQ

34 西藏 6 540000 CN-54 CN-XZ

 

(2)MySQLReader之QuerySQLMode

1)编写配置文件

(1)修改配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

 

(2)配置文件内容如下

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mysqlreader",

                    "parameter": {

                        "connection": [

                            {

                                "jdbcUrl": [

                                    "jdbc:mysql://hadoop102:3306/gmall"

                                ],

                                "querySql": [

                                    "select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"

                                ]

                            }

                        ],

                        "password": "000000",

                        "username": "root"

                    }

                },

                "writer": {

                    "name": "hdfswriter",

                    "parameter": {

                        "column": [

                            {

                                "name": "id",

                                "type": "bigint"

                            },

                            {

                                "name": "name",

                                "type": "string"

                            },

                            {

                                "name": "region_id",

                                "type": "string"

                            },

                            {

                                "name": "area_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_3166_2",

                                "type": "string"

                            }

                        ],

                        "compress": "gzip",

                        "defaultFS": "hdfs://hadoop102:8020",

                        "fieldDelimiter": "\t",

                        "fileName": "base_province",

                        "fileType": "text",

                        "path": "/base_province",

                        "writeMode": "append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}

 

2)配置文件说明

(1)Reader参数说明

 

3)提交任务

(1)清空历史数据

[root@hadoop102 datax]$ hadoop fs -rm -r -f /base_province/*

 

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

 

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/base_province.json

 

4)查看结果

(1)DataX打印日志

2021-10-13 11:13:14.930 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 11:13:03

任务结束时刻                    : 2021-10-13 11:13:14

任务总计耗时                    :                 11s

任务平均流量                    :               66B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  32

读写失败总数                    :                   0

 

(2)查看HDFS文件

[root@hadoop102 datax]$ hadoop fs -cat /base_province/* | zcat

3 山西 1 140000 CN-14 CN-SX

4 内蒙古 1 150000 CN-15 CN-NM

5 河北 1 130000 CN-13 CN-HE

6 上海 2 310000 CN-31 CN-SH

7 江苏 2 320000 CN-32 CN-JS

8 浙江 2 330000 CN-33 CN-ZJ

9 安徽 2 340000 CN-34 CN-AH

10 福建 2 350000 CN-35 CN-FJ

11 江西 2 360000 CN-36 CN-JX

12 山东 2 370000 CN-37 CN-SD

14 台湾 2 710000 CN-71 CN-TW

15 黑龙江 3 230000 CN-23 CN-HL

16 吉林 3 220000 CN-22 CN-JL

17 辽宁 3 210000 CN-21 CN-LN

18 陕西 7 610000 CN-61 CN-SN

19 甘肃 7 620000 CN-62 CN-GS

20 青海 7 630000 CN-63 CN-QH

21 宁夏 7 640000 CN-64 CN-NX

22 新疆 7 650000 CN-65 CN-XJ

23 河南 4 410000 CN-41 CN-HA

24 湖北 4 420000 CN-42 CN-HB

25 湖南 4 430000 CN-43 CN-HN

26 广东 5 440000 CN-44 CN-GD

27 广西 5 450000 CN-45 CN-GX

28 海南 5 460000 CN-46 CN-HI

29 香港 5 810000 CN-91 CN-HK

30 澳门 5 820000 CN-92 CN-MO

31 四川 6 510000 CN-51 CN-SC

32 贵州 6 520000 CN-52 CN-GZ

33 云南 6 530000 CN-53 CN-YN

13 重庆 6 500000 CN-50 CN-CQ

34 西藏 6 540000 CN-54 CN-XZ

 

(3)DataX传参

通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。

DataX传参的用法如下,在JSON配置文件中使用${param}引用参数,在提交任务时使用-p"-Dparam=value"传入参数值,具体示例如下。

1)编写配置文件

(1)修改配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

 

(2)配置文件内容如下

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mysqlreader",

                    "parameter": {

                        "connection": [

                            {

                                "jdbcUrl": [

                                    "jdbc:mysql://hadoop102:3306/gmall"

                                ],

                                "querySql": [

                                    "select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"

                                ]

                            }

                        ],

                        "password": "000000",

                        "username": "root"

                    }

                },

                "writer": {

                    "name": "hdfswriter",

                    "parameter": {

                        "column": [

                            {

                                "name": "id",

                                "type": "bigint"

                            },

                            {

                                "name": "name",

                                "type": "string"

                            },

                            {

                                "name": "region_id",

                                "type": "string"

                            },

                            {

                                "name": "area_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_code",

                                "type": "string"

                            },

                            {

                                "name": "iso_3166_2",

                                "type": "string"

                            }

                        ],

                        "compress": "gzip",

                        "defaultFS": "hdfs://hadoop102:8020",

                        "fieldDelimiter": "\t",

                        "fileName": "base_province",

                        "fileType": "text",

                        "path": "/base_province/${dt}",

                        "writeMode": "append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}

 

2)提交任务

(1)创建目标路径

[root@hadoop102 datax]$ hadoop fs -mkdir /base_province/2020-06-14

 

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

 

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py -p"-Ddt=2020-06-14" job/base_province.json

 

3)查看结果

[root@hadoop102 datax]$ hadoop fs -ls /base_province

Found 2 items

drwxr-xr-x - root supergroup 0 2021-10-15 21:41 /base_province/2020-06-14

 

3.同步HDFS数据到MySQL案例

案例要求:同步HDFS上的/base_province目录下的数据到MySQL gmall 数据库下的test_province表。

需求分析:要实现该功能,需选用HDFSReader和MySQLWriter。

 

(1)HDFSReader和MySQLWriter

1)编写配置文件

(1)创建配置文件test_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

 

(2)配置文件内容如下

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "hdfsreader",

                    "parameter": {

                        "defaultFS": "hdfs://hadoop102:8020",

                        "path": "/base_province",

                        "column": [

                            "*"

                        ],

                        "fileType": "text",

                        "compress": "gzip",

                        "encoding": "UTF-8",

                        "nullFormat": "\\N",

                        "fieldDelimiter": "\t",

                    }

                },

                "writer": {

                    "name": "mysqlwriter",

                    "parameter": {

                        "username": "root",

                        "password": "000000",

                        "connection": [

                            {

                                "table": [

                                    "test_province"

                                ],

                                "jdbcUrl": "jdbc:mysql://hadoop102:3306/gmall?useUnicode=true&characterEncoding=utf-8"

                            }

                        ],

                        "column": [

                            "id",

                            "name",

                            "region_id",

                            "area_code",

                            "iso_code",

                            "iso_3166_2"

                        ],

                        "writeMode": "replace"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}

 

2)配置文件说明

(1)Reader参数说明

 

(2)Writer参数说明

 

3)提交任务

(1)在MySQL中创建gmall.test_province表

DROP TABLE IF EXISTS `test_province`;

CREATE TABLE `test_province`  (

  `id` bigint(20) NOT NULL,

  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `region_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `area_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `iso_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `iso_3166_2` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

 

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

 

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/test_province.json

4)查看结果

(1)DataX打印日志

2021-10-13 15:21:35.006 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 15:21:23

任务结束时刻                    : 2021-10-13 15:21:35

任务总计耗时                    :                 11s

任务平均流量                    :               70B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  34

读写失败总数                    :                   0

 

(2)查看MySQL目标表数据

 

五、DataX优化

1.速度控制

DataX3.0提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在数据库可以承受的范围内达到最佳的同步速度。

关键优化参数如下:

注意事项:

1.若配置了总record限速,则必须配置单个channel的record限速

2.若配置了总byte限速,则必须配置单个channe的byte限速

3.若配置了总record限速和总byte限速,channel并发数参数就会失效。因为配置了总record限速和总byte限速之后,实际channel并发数是通过计算得到的:

 

计算公式为:

min(总byte限速/单个channel的byte限速,总record限速/单个channel的record限速)

 

配置示例:

{

    "core": {

        "transport": {

            "channel": {

                "speed": {

                    "byte": 1048576 //单个channel byte限速1M/s

                }

            }

        }

    },

    "job": {

        "setting": {

            "speed": {

                "byte" : 5242880 //总byte限速5M/s

            }

        },

        ...

    }

}

 

2.内存调整

当提升DataX Job内Channel并发数时,内存的占用会显著增加,因为DataX作为数据交换通道,在内存中会缓存较多的数据。例如Channel中会有一个Buffer,作为临时的数据交换的缓冲区,而在部分Reader和Writer的中,也会存在一些Buffer,为了防止OOM等错误,需调大JVM的堆内存。

建议将内存设置为4G或者8G,这个也可以根据实际情况来调整。

 

调整JVM xms xmx参数的两种方式:一种是直接更改datax.py脚本;另一种是在启动的时候,加上对应的参数,如下:

python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" /path/to/your/job.json

标签:province,CN,技术,name,base,datax,数据,DataX
From: https://www.cnblogs.com/yeyuzhuanjia/p/17775192.html

相关文章

  • 硬盘数据恢复:避免悲剧,学会这招就能轻松搞定
    在这个数字化时代,数据的重要性日益凸显,我们的工作和生活已经和各种电子设备和数据紧密联系在一起。硬盘、U盘、固态硬盘这些看似普通的存储设备,却承载着我们的重要数据,比如,照片、工作文档、视频等。如果这些重要数据意外丢失了,那么无疑将是巨大的损失。硬盘数据丢失问题在平时也很......
  • Javascript抓取京东、淘宝商品数据
    随着互联网的发展,越来越多的商品信息被发布在各大电商平台上,如京东、淘宝等。这些平台上的商品信息对于消费者来说是非常重要的,可以帮助他们了解商品的价格、详情和评价等信息。而对于商家来说,了解竞争对手的商品信息也是至关重要的。因此,抓取京东、淘宝商品数据成为了一种常见的需......
  • TSINGSEE烟火识别算法的技术原理是什么?如何应用在视频监控中?
    AI烟火识别算法是基于深度学习技术的一种视觉识别算法,主要用于在视频监控场景中自动检测和识别烟雾、火焰的行为。该技术基于深度学习神经网络技术,可以动态识别烟雾和火焰从有到无、从小到大、从大到小、从小烟到浓烟的状态转换过程。1、技术原理1)数据采集与准备:首先需要采集大量带......
  • TSINGSEE烟火识别算法的技术原理是什么?如何应用在视频监控中?
    AI烟火识别算法是基于深度学习技术的一种视觉识别算法,主要用于在视频监控场景中自动检测和识别烟雾、火焰的行为。该技术基于深度学习神经网络技术,可以动态识别烟雾和火焰从有到无、从小到大、从大到小、从小烟到浓烟的状态转换过程。1、技术原理1)数据采集与准备:首先需要采集大......
  • 2023年东莞/深圳CPDA数据分析师认证怎么报名和备考?
    CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三,为大部分决策难题提供解决方案。帮助数据分析人员掌握几种通用的数据......
  • 硬盘数据恢复:避免悲剧,学会这招就能轻松搞定
    在这个数字化时代,数据的重要性日益凸显,我们的工作和生活已经和各种电子设备和数据紧密联系在一起。硬盘、U盘、固态硬盘这些看似普通的存储设备,却承载着我们的重要数据,比如,照片、工作文档、视频等。如果这些重要数据意外丢失了,那么无疑将是巨大的损失。硬盘数据丢失问题在平时也很......
  • vue 组件之间的数据传递
    一、组件之间的关系父子关系、兄弟关系、跨级关系二、父子之间数据传递1、父组件向子组件传递【使用 props】第一步:在父组件中使用子组件时,给子组件绑定属性第二步:在子组件中使用props接收绑定的属性值2、子组件向父组件传递【使用 $emit】第一步:在子组件中通......
  • MJ和网络数据批量重命名
    importosimportopenpyxlimportreUNWANTED_UNITS=["undefined","皮皮","zly324"]#第一步:删名称defrename_files(path):files=[fforfinos.listdir(path)ifos.path.isfile(os.path.join(path,f))]renamed_files=[]counte......
  • excel导入数据库-摘抄
    假如excel表格中有A、B、C三列数据,希望导入到数据库users表中,相应的字段各自是name,sex,age,在你的excel表格中添加一列。利用excel的公式自己主动生成sql语句,方法例如以下: 1、在你的excel表格中添加一列 2、在第一行的D列,就是D1中输入公式:=CONCATENATE("INSERTINTOPERS......
  • 智慧粮仓粮库解决方案:视频+AI识别技术赋能,守护大国粮仓
    一、需求背景我国作为世界人口大国,农产品需求量庞大,保障粮食等重要农产品安全是经济社会稳定发展的重要基础。粮食安全涉及到生产、收购、加工、储藏、销售等全产业链,既涉及新型基础设施建设,也有对软件技术等专业能力要求。伴随着互联技术的快速发展,粮仓粮库的建设与监管也迎来了......