精华内容
下载资源
问答
  • 然后最近刚好有一个比较小的活,需要每天定时同步几个csv文件数据库表,然后用kettle大概花了一天时间做完了这个任务。需求:将每天上传到指定目录下.tar.gz压缩包下的4个csv文件,每天定时同步到数据库表中。解题...

    背景

    最近由Java工程师转岗为ETL数据工程师,虽然以前也有为数据集成的项目储备过kettle相关的知识,但是一直没有在生产环境中实际使用过kettle。然后最近刚好有一个比较小的活,需要每天定时同步几个csv文件到数据库表,然后用kettle大概花了一天时间做完了这个任务。

    需求:将每天上传到指定目录下.tar.gz压缩包下的4个csv文件,每天定时同步到数据库表中。

    解题思路

    首先对压缩文件解压,解压.tar.gz文件,得到4个csv文件。

    然后对4个csv文件使用kettle,输出到数据库表。

    使用linux crontab 定时调用脚本完成每天的同步任务。

    kettle Job流程

    下面是同步csv文件Job的整体流程,整体流程是如下:

    设置当前日期变量->清除表数据->同步csv到数据库*4->成功/失败邮件

    7942b333748c

    整体流程

    1. 设置当前日期变量

    因为csv文件都是有日期后缀的,每天一个,所以获取csv文件名的时候需要拼一个当前日期字符串。因为后面4个同步csv的转换都需要这个日期字符串,所以单独用一个转换来处理这个日期字符串,然后设置到环境变量,后面的几个转换,再获取这个日期字符串,这个转换主要有3步:

    获取系统时间->时间格式化->设置时间变量到环境变量,其中时间格式化是采用JavaScript插件来处理:

    7942b333748c

    日期格式化

    在设置时间变量步骤中,需要注意,设置的环境变量是通过第二列的${FILEDATE}来获取,而不是第一列的字段名

    7942b333748c

    设置环境变量

    2. 清除表数据

    通过sql插件来清除4张表数据。

    3. 同步CSV文件到数据库表

    这部分是主要的流程,CSV文件是以当前日期结尾的,不是固定的,所以一开始需要处理csv文件名,动态拼接日期字符串。流程如下:

    获取当前日期变量->处理文件名字符串->CSV文件输入->表输出

    7942b333748c

    同步数据文件主要流程

    处理文件名字符串字符串使用的是公式插件,然后拼接日期参数:

    7942b333748c

    处理文件名

    csv文件输入的时候,需要选择从上一步骤获取文件名,然后因为没有从本地选择本地文件,所以无法获取字段,可以创建一个从本地文件读取的csv输入,获取字段Copy下来,然后黏贴到下面字段列表里。

    7942b333748c

    csv文件输入

    shell脚本来处理压缩文件和执行Job任务

    通过linux crontab 定时执行shell脚本来解压文件,以及执行kettle的Job任务。解压tar.gz文件到指定目录,然后再调用kettle kitchen命令来执行Job。

    1. 处理压缩文件脚本如下:

    7942b333748c

    处理压缩文件脚本

    2. 执行ETL Job任务脚本如下:

    7942b333748c

    执行kettle job脚本

    欢迎大家赞赏、转载、点赞、评论。

    展开全文
  • 一、 python将数据数据生成csv文件 0. 导入csv模块 1. 327行,首先创建csv文件的文件头。 2. 342行上的new_data是包含多个字典数据的列表,每个字典数据是一条数据库记录 3. 345行打开要写入的文件,没有的时候会...

    一、 python将数据数据生成csv文件


    0. 导入csv模块

    1. 327行,首先创建csv文件的文件头。

    2. 342行上的new_data是包含多个字典数据的列表,每个字典数据是一条数据库记录

    3. 345行打开要写入的文件,没有的时候会创建。

    4. 346行,防治乱码

    5. 347行,dialect设置编码风格, 默认是excel ,也就是逗号分隔,header设置子段和属性

    6.349将数据多条数据写入csv文件


    二、php处理导出





    展开全文
  • oracle导出多CSV文件的问题----------------------------------------------------------------------用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件...

    oracle导出多CSV文件的问题

    ----------------------------------------------------------------------

    用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv

    我已经实现了一个方法,但80w要导5小时,用户没法接受。如下:

    sqlplus -s user/pwd @${SqlDir}/select_log.sql >/tmp/a.tmp

    然后每read 4000行到文件a_1.csv,并且每隔4000行换一个文件名。

    大家有什么好方法吗?注意效率

    ----------------------------------------------------------------------

    先一次性生成一个csv文件

    再用split分割文件

    --------------------------------------------------------

    完全赞同楼上说的。

    关于性能问题,用oracle spool出80万行纪录是非常快的,我刚试了一下,再hp-ux下,spool出某表中100万纪录(2列)耗时大约2分钟,输出文件80m, 用split命令分割为每个4000行的文件耗时数秒而已。 下附测试代码:

    /* sql file:  spool_test.sql */

    set pages 0

    set head off

    set echo off

    set feedback off

    spool spool_text.csv

    select col1, col2 from my_table where rownum<1000000;

    spool off

    exit

    ## shell script to spool out:

    sqlplus -s user/password @spool_test.sql > /dev/null

    ## split file:

    split -l 4000 spool_text.csv splited

    --------------------------------------------------------

    export.sh

    #Generate the sql language

    echo "SET HEADING OFF;">${SqlDir}/select_log.sql

    echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql

    echo "SET LINESIZE 10000;">>${SqlDir}/select_log.sql

    echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql

    echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql

    echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql

    echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql

    echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql

    echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql

    echo exit | ${ORACLE_HOME}/bin/sqlplus -s omc_sbardz812/omc_sbardz812 @${SqlDir}

    /select_log.sql >/dev/null

    split -l 4000 -a 5 ${SqlDir}/EXPORT_ALL.CSV log_20060606_

    =============================================================

    以上是我的脚本,80w数据我用了3个多小时还没完呢。有问题吗?

    另外,很重要的一点,split后,再不是csv后缀了。看来还得文件遍历,然后一个一个的mv 成csv文件。

    --------------------------------------------------------

    先整个导出罢,然后在处理

    --------------------------------------------------------

    你的代码看起来没有问题,但80万条记录导3小时没完成很难让人理解。

    你用sqlplus做一下测试,比如导出10000条记录需要多少时间,如果确实很慢,那可能是连接太慢(网络速度?)。

    --------------------------------------------------------

    导出为csv文件很快,就几分钟而已,但是split要花3个小时,共250个文件,每个文件4000行。我的机器是SUN Blade 150,还有我在server上运行的,不存在网络速度的问题。

    --------------------------------------------------------

    根据需要导出的列,单独建个临时表,比如:create table sales_range_tmp as select salesman_id,salesman_name,sales_amount,sales_date from sales;

    再利用脚本导出来,看看速度应该有所提高。不过有一点必须明白,全扫描8w的表数据肯定不是几分钟可以完成的,何况要写成物理文件。

    --------------------------------------------------------

    KingSunSha(弱水三千),我用spool导出的文件大小为9G(8900828448byte on solaris),而你的才80M

    --------------------------------------------------------

    SELECT 中不要拼接字符串,非常影响速度

    --------------------------------------------------------

    大家还有好的办法吗?

    --------------------------------------------------------

    9GB = 9,216 MB = 9,437,184 KB = 9,663,676,416 Bytes

    800,000 records

    size of each record (line) = 9GB/800,000 = 12,079 Bytes

    select 中只有 4 列(SALESMAN_ID, SALESMAN_NAME, SALES_AMOUNT, SALES_DATE

    ),你觉得每行纪录占12KB合理吗?

    --------------------------------------------------------

    问题是你在sqlplus中用了set linesize=100000,所以每行都会spool出100000bytes。

    解决这个问题很简单,在spool开始之前加上两行set命令

    set trimspool on

    set termout off

    第一个set是指定trim spool出的每行在行末的空格

    第二个set是指定只spool而不回显,所以在运行sqlplus的时候不需要 >/dev/null。

    --------------------------------------------------------

    非常感谢KingSunSha(弱水三千),现在我把linesize改为100,非常快,2分钟就完成了。太好了。不过还有一个问题,导出的文件,每隔13行就会自动设置一个空行,能把这个去掉吗?因为我导出的文件会被我的程序打开的。

    --------------------------------------------------------

    just add

    set pagesize 0

    before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.

    --------------------------------------------------------

    just add

    set pagesize 0

    before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.

    --------------------------------------------------------

    非常感谢KingSunSha(弱水三千),搞定了,贴出来吧,共享!

    echo "SET HEADING OFF;">${SqlDir}/select_log.sql

    echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql

    echo "SET LINESIZE 500;">>${SqlDir}/select_log.sql

    echo "SET trimspool on;">>${SqlDir}/select_log.sql

    echo "SET termout off;" >>${SqlDir}/select_log.sql

    echo "SET NEWPAGE NONE;" >>${SqlDir}/select_log.sql

    echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql

    echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql

    echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql

    echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql

    echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql

    echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql

    echo exit | ${ORACLE_HOME}/bin/sqlplus -s user/pwd @${SqlDir}/select_log.sql

    split -l 4000 -a 3 ${SqlDir}/EXPORT_ALL.CSV log_20060606_

    #mv these splitted file to be csv file

    for file in $(ls ./)

    do

    echo $file | grep log_20060606_ > /dev/null

    status=$?

    if [ $status -eq 0 ]; then

    mv $file $file.csv

    fi

    status=1

    done

    80万10分钟就可以搞定了。

    ksh可以执行,由于有这句:$(ls ./),sh不支持。

    --------------------------------------------------------

    谢谢大家!

    展开全文
  • oracle导出多CSV文件的问题 -------------------------...用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,....,a_200.csv ...

    oracle导出多CSV文件的问题


    ----------------------------------------------------------------------

    用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv

    我已经实现了一个方法,但80w要导5小时,用户没法接受。如下:
    sqlplus -s user/pwd @${SqlDir}/select_log.sql >/tmp/a.tmp
    然后每read 4000行到文件a_1.csv,并且每隔4000行换一个文件名。

    大家有什么好方法吗?注意效率

    ----------------------------------------------------------------------

    先一次性生成一个csv文件
    再用split分割文件

    --------------------------------------------------------

    完全赞同楼上说的。

    关于性能问题,用oracle spool出80万行纪录是非常快的,我刚试了一下,再hp-ux下,spool出某表中100万纪录(2列)耗时大约2分钟,输出文件80m, 用split命令分割为每个4000行的文件耗时数秒而已。 下附测试代码:

    /* sql file:  spool_test.sql */
    set pages 0
    set head off
    set echo off
    set feedback off
    spool spool_text.csv
    select col1, col2 from my_table where rownum<1000000;
    spool off
    exit

    ## shell script to spool out:
    sqlplus -s user/password @spool_test.sql > /dev/null

    ## split file:
    split -l 4000 spool_text.csv splited


    --------------------------------------------------------

    export.sh

    #Generate the sql language
    echo "SET HEADING OFF;">${SqlDir}/select_log.sql
    echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql
    echo "SET LINESIZE 10000;">>${SqlDir}/select_log.sql
    echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql
    echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql
    echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql
    echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql
    echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql
    echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql
    echo exit | ${ORACLE_HOME}/bin/sqlplus -s omc_sbardz812/omc_sbardz812 @${SqlDir}
    /select_log.sql >/dev/null

    split -l 4000 -a 5 ${SqlDir}/EXPORT_ALL.CSV log_20060606_
    =============================================================

    以上是我的脚本,80w数据我用了3个多小时还没完呢。有问题吗?
    另外,很重要的一点,split后,再不是csv后缀了。看来还得文件遍历,然后一个一个的mv 成csv文件。



    --------------------------------------------------------

    先整个导出罢,然后在处理

    --------------------------------------------------------

    你的代码看起来没有问题,但80万条记录导3小时没完成很难让人理解。

    你用sqlplus做一下测试,比如导出10000条记录需要多少时间,如果确实很慢,那可能是连接太慢(网络速度?)。

    --------------------------------------------------------

    导出为csv文件很快,就几分钟而已,但是split要花3个小时,共250个文件,每个文件4000行。我的机器是SUN Blade 150,还有我在server上运行的,不存在网络速度的问题。

    --------------------------------------------------------

    根据需要导出的列,单独建个临时表,比如:create table sales_range_tmp as select salesman_id,salesman_name,sales_amount,sales_date from sales;
    再利用脚本导出来,看看速度应该有所提高。不过有一点必须明白,全扫描8w的表数据肯定不是几分钟可以完成的,何况要写成物理文件。


    --------------------------------------------------------

    KingSunSha(弱水三千),我用spool导出的文件大小为9G(8900828448byte on solaris),而你的才80M

    --------------------------------------------------------

    SELECT 中不要拼接字符串,非常影响速度

    --------------------------------------------------------

    大家还有好的办法吗?

    --------------------------------------------------------

    9GB = 9,216 MB = 9,437,184 KB = 9,663,676,416 Bytes
    800,000 records
    size of each record (line) = 9GB/800,000 = 12,079 Bytes

    select 中只有 4 列(SALESMAN_ID, SALESMAN_NAME, SALES_AMOUNT, SALES_DATE
    ),你觉得每行纪录占12KB合理吗?

    --------------------------------------------------------

    问题是你在sqlplus中用了set linesize=100000,所以每行都会spool出100000bytes。
    解决这个问题很简单,在spool开始之前加上两行set命令

    set trimspool on
    set termout off

    第一个set是指定trim spool出的每行在行末的空格
    第二个set是指定只spool而不回显,所以在运行sqlplus的时候不需要 >/dev/null。


    --------------------------------------------------------

    非常感谢KingSunSha(弱水三千),现在我把linesize改为100,非常快,2分钟就完成了。太好了。不过还有一个问题,导出的文件,每隔13行就会自动设置一个空行,能把这个去掉吗?因为我导出的文件会被我的程序打开的。

    --------------------------------------------------------

    just add 
    set pagesize 0
    before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.


    --------------------------------------------------------

    just add
    set pagesize 0
    before spool to suppress all headings, page breaks, titles, the initial blank line, and other formatting information.

    --------------------------------------------------------

    非常感谢KingSunSha(弱水三千),搞定了,贴出来吧,共享!

    echo "SET HEADING OFF;">${SqlDir}/select_log.sql 
    echo "SET FEEDBACK OFF;">>${SqlDir}/select_log.sql 
    echo "SET LINESIZE 500;">>${SqlDir}/select_log.sql 
    echo "SET trimspool on;">>${SqlDir}/select_log.sql 
    echo "SET termout off;" >>${SqlDir}/select_log.sql 
    echo "SET NEWPAGE NONE;" >>${SqlDir}/select_log.sql 
    echo "SPOOL ${SqlDir}/EXPORT_ALL.CSV;" >> ${SqlDir}/select_log.sql 
    echo "SELECT SALESMAN_ID||','||">>${SqlDir}/select_log.sql 
    echo "SALESMAN_NAME||','||">>${SqlDir}/select_log.sql 
    echo "SALES_AMOUNT||','||">>${SqlDir}/select_log.sql 
    echo "SALES_DATE from sales_range;">>${SqlDir}/select_log.sql 
    echo "SPOOL OFF;" >> ${SqlDir}/select_log.sql 
    echo exit | ${ORACLE_HOME}/bin/sqlplus -s user/pwd @${SqlDir}/select_log.sql 

    split -l 4000 -a 3 ${SqlDir}/EXPORT_ALL.CSV log_20060606_ 

    #mv these splitted file to be csv file 
    for file in $(ls ./) 
    do 
        echo $file | grep log_20060606_ > /dev/null 
        status=$? 
        if [ $status -eq 0 ]; then 
            mv $file $file.csv 
        fi 
        status=1 
    done 

    80万10分钟就可以搞定了。

    ksh可以执行,由于有这句:$(ls ./),sh不支持。

    --------------------------------------------------------

    谢谢大家!

     

    http://blog.csdn.net/studyvcmfc/article/details/7047986

     

    转载于:https://www.cnblogs.com/seasonzone/p/7512489.html

    展开全文
  • 通过PLSQL导入csv文件时出现乱码问题

    万次阅读 2017-03-23 18:12:26
    问题现象:从生产环境导入的csv文件,导入到测试环境数据库后发现同一列的数据有一部分是乱码,一部分是正常的。打开csv文件查看数据全部正常显示,无乱码; 问题解决: 第一步:先查看生产环境PLSQL客户端与本地...
  • 记录一下通过xlsx,csv文件修改数据库生产救急!记录一下 update xcxmall_goods m, Sheet1 mp set m.attr=REPLACE(m.attr,mp.`原货号`,mp.`更新货号`) where mp.`小明商品ID`=m.id and m.store_id=100; update ...
  • 使用Spring boot整合HDFS主要是为了从数据库获取List,将List数据生产CSV文件,导入到HDFS进行机器学习。本文主要讲解如何整合成功和如果将List数据变成CSV文件存进HDFS当中。简单整理下会出现的问题:1.使用过程...
  • CSV,TXT文件数据导入到kudu(hive)

    千次阅读 2019-04-01 13:19:51
    记一次将三十万条数据的CSV文件导入到生产环境的kudu数据库中 因为是生产环境,自己也是小心翼翼,进行实践操作。 思路还是简单的 0,开始工作前,先将文件复制出来,保存为.txt文件,且用制表符作为分隔。 1,先将...
  • 记一次将三十万条数据的CSV文件导入到生产环境的kudu数据库中因为是生产环境,自己也是小心翼翼,进行实践操作。思路还是简单的0,开始工作前,先将文件复制出来,保存为.txt文件,且用制表符作为分隔。1,先将文件...
  • FileContextCore是Entity Framework Core的“数据库”提供程序,并增加了在文件中存储信息的功能。 由于仅复制,编辑和删除文件的优点,因此可以实现快速开发。 该框架基于DevMentor( )的FileContext概念。 优点...
  • 昨天,做了一个东西,就是把生产上的mongodb数据使用mongoexport导出了一个.json文件用于本地做分析使用,里面有将近60MB的数据,导出没问题,但是当使用./mongoimport -d 数据库名称 -c 表名...
  • 内含两个CSV数据文件及品牌对应的logo文件,2018最新最全详细车型车系数据库(含品牌、年款、指导价、Logo、生产状态、国产/进口、新能源车型等)
  • 有时候在项目中需要这样一种功能:把数据库里面的数据查询出来后,保存到csv文件里面。然后下载到客户端。开发思路:先把需要查询的数据从数据库里面查询出来;把需要查询出来的数据写入到csv文件里面;保存到客户端...
  • 有时候在项目中需要这样一种功能:把数据库里面的数据查询出来后,保存到csv文件里面。然后下载到客户端。开发思路:先把需要查询的数据从数据库里面查询出来;把需要查询出来的数据写入到csv文件里面;保存到客户端...
  • sqlite管理软件

    2012-04-27 19:21:03
    可以用此软件查看sqlite数据库生产的db文件,也可以将sqlite数据库文件导出成csv格式的文件,同时可以修改sqlite数据库文件
  • 这是由美联储经济数据库(FRED)托管的美联储数据集。有关每个文件的更多详细信息,请参见各个文件的说明。 industrial-production-business-equipment_metadata.json industrial-production-consumer-goods_...
  • 该解决方案依赖于原始数据库的自增ID【超大CSV文件的构建可以导入MySQL之后构建】,经过测试可以在生产环境正常运行并且避免过多的内存消耗。 函数与过程功能介绍 从关系数据库加载数据 apoc.load.jdbc 函数...
  • 支持常见关系数据库CSV文件之间的数据迁移,包括Firebird,Microsoft SQL Server,MySQL,Oracle,PostgreSQL,SQLite,Sybase 支持迁移使用SQL语句查询的数据,并基于SQL语句自动创建视图以供以后参考 支持提取...
  • ly-源码

    2021-02-14 00:09:40
    这些csv文件需要存储在SQL数据库中。 一旦加载到关系数据库中,关系表中写入的数据就需要通过API获得。 解决方法: 我正在考虑将Microsoft Azure堆栈服务用于不同的计算和存储。 有两种方法可以将csv文件加载到...
  • Spring boot项目整合Hadoop的HDFS

    千次阅读 2018-11-16 19:38:36
    由于最近需要使用Spring boot整合...使用Spring boot整合HDFS主要是为了从数据库获取List,将List数据生产CSV文件,导入到HDFS进行机器学习。 本文主要讲解如何整合成功和如果将List数据变成CSV文件存进HDFS当中。...
  • Neo4J学习心得

    2019-12-25 17:52:59
    Neo4J学习心得 一个基于图数据库的相关应用开发项目。 没钱搞企业版的,用社区版的凑合着,也能用。 Loading CSV语句对于数据量有限制,上千的导入就开始...CSV文件ONLY 图数据库的数据来自生产环境的数据库,不会有...
  • 给同事做一个下载的功能,将数据库关联查询后生产csv文件供下载,期间遇到的小问题,记录下。 1,数据库的关联查询  查询出来的数据结构是:一个表TABLE_A的部分数据,和TABLE_A的每条数据在TABLE_B表中的个数  ...
  • mysqldump 备份还原

    千次阅读 2018-03-09 17:48:50
    Mysqldump Mysqldump客户端程序执行逻辑备份,可以生产一组SQL语句,这些语句...Mysqldump命令也能生成csv文件或其他分隔符的文本,后者XML格式文件; Mysqldump必须有SELECT 选项for dumptable,SHOW VIEW权限f...
  • 使用 sqluldr2 卸载oracle数据生产csv文件 使用load data local infile 装载到MySQL数据库 **问题:**在已经添加null default null 属性的情况下,load到MySQL中timestamp列空值系统给的默认值是“0000-00-00 00:00:...
  • Adventure Works Cycles是AdventureWorks样本数据库所虚构...拿到的数据是30个csv文件和一个sql文件,其中里面的格式使用“|”分隔的。适合进行数据分析处理https://blog.csdn.net/fl02china/article/details/108440043
  • 根据包含在多个csv文件中的数据,我在postgresql数据库中进行了分析,而在sqlite数据库中进行了设置,以便从关系数据库管理系统中找出更好的选择。 我选择使用PostgreSQL进行分析,因为总体而言,我更喜欢...
  • 图数据分块ETL图数据...该解决方案依赖于原始数据库的自增ID【上百G超大CSV文件的构建可以导入MySQL之后构建】,经过测试可以在生产环境正常运行并且避免过多的内存消耗。函数与过程功能介绍从关系数据库加载数据a...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

数据库生产csv文件