KES V8R6 SYS_BULKLOAD

8. sys_bulkload

sys_bulkload是KingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。使用前需要用户手动创建sys_bulkload插件,需要说明的是sys_bulkload工具是随数据库版本一同发布的,使用时请使用对应发布的数据库版本,其他数据版本则不保证能正常工作。

8.1. 关于sys_bulkload

语法格式:

sys_bulkload [options][control_file_path]

功能:

依照配置文件中指定的信息快速加载数据到KingbaseES数据库中,或者将KingbaseES数据库中的数据快速导出到CSV文件中。

参数说明:

options参数

加载选项

-i in_file --input in_file

指定待加载文件或需要导出数据的表,同配置文件的INPUT选项。

-O output_table --output output_table

快速加载的目标表或者接收导出数据的文件路径,同配置文件的OUTPUT选项。

-l log_file --logfile log_file

结果日志路径,同配置文件中的LOGFILE选项。

-P bad_file --parse-badfile bad_file

记录无法正确解析或写失败的日志路径,同配置文件的PARSE_BADFILE选项。

-u duplicate_badfile --duplicate-badfile duplicate_badfile

重建索引时与唯一性约束冲突而导入失败的记录的写入路径,同配置文件中的DUPLICATE_BADFILE选项。

-o optional --option optional

任何在配置文件中任何可使用的选项,参见 配置文件 。可以传入多次选项。对于加载的必填选项如input, output等,为指定参数的方便和简洁已在上面提供了单独长短项配置。

连接选项

-d dbname --dbname dbname

指定连接的数据库。如未指定,数据库名将从环境变量KINGBASE_DATABASE中读取。如未设置该环境变量,使用连接的用户名。

-h host --host host

指定运行服务器的主机名。如果值以/开始,被用作unix域套接字的目录。

-p port --port port

指定TCP的端口号或者本地unix域套接字文件扩展名的服务器监听端口号。

-U username --username username

指定连接的用户名。

-W password --password password

连接用户的数据库登录密码。需要说明的是-W 后面必须指定密码,否则会报错。

一般选项

-e --echo

输出发送给服务器的命令。

-E --elevel

设置输出信息的级别,其中级别包括:DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC。默认为INFO。

--help

输出帮助信息

--version

输出版本号

control_file_path参数

指定配置文件的路径。配置文件写法参见 配置文件

使用说明:

快速加载工具sys_bulkload可以通过短选项、长选项、配置文件三种方式来指定配置加载选项。由于加载的选项比较多,并且一些加载选项的信息比较固定和反复使用,可以把这些加载选项配置在配置文件中,直接指定配置文件的路径。配置加载选项规则如下:

  1. 启动参数的短选项和长选项是等价的。

  2. 在启动参数选项中仍然可以指定配置文件中配置的加载选项,其作用主要是临时替换配置文件的选项,以避免去修改配置文件中的选项,配置文件和启动参数同时指定则以启动参数指定为准。

  3. 如果使用启动参数则需要注意input,output,logfile,parse_badfile,duplicate_badfile不能多次指定,否则报错:specified only once。其他选项可以多次指定,并且以后指定的选项为准。

8.2. 配置文件

功能:

包含了加载数据时所需要的一些配置。导入时只需要将配置文件的路径 + 文件名作为参数传入快速加载提供的系统函数或可执行程序即可。

配置文件中参数选项说明:

必填参数

TYPE = CSV | TEXT | BINARY | DB

加载的数据源的类型

CSV

从CSV格式的文本文件加载数据

TEXT

从TEXT格式的文本文件加载数据

BINARY

从二进制格式的文件加载数据

DB

从数据库的表中导出数据

INPUT = PATH | [schema_name.] table_name

需要导入的数据文件路径或者导出数据的源表

PATH

需要导入的数据源文件路径。如果是相对路径,在控制文件中指定时,它将与控制文件相对;当在命令行参数中指定时,相对于当前工作目录。KingbaseES服务器的用户必须具有该文件的读取权限。在“TYPE = CSV | TEXT | BINARY”时可用。

[schema_name.] table_name

需要导出数据的表名。仅在“TYPE = DB”时可用。

OUTPUT = [schema_name.] table_name | PATH

指定将数据导入的目标表或者目标文件。

[schema_name.] table_name

导入数据的表名。在“ TYPE = CSV | TEXT | BINARY ”时可用。

PATH

导出数据的文件路径。如果是相对路径,在控制文件中指定时,它将与控制文件相对;当在命令行参数中指定时,相对于当前工作目录。KingbaseES服务器的用户必须具有该文件的读取权限。仅在“TYPE = DB”时可用。

LOGFILE = PATH

指定一个文件记录日志。如果指定为相对路径,则指定规则与INPUT相同。默认值为$KINGBASE_DATA/sys_bulkload/<timestamp>_<dbname>_<schema>_<table>.log

非必填参数

WRITER = BUFFERED | CSV_FILE

指定数据的加载方式,默认值为 BUFFERED。

BUFFERED

通过共享缓冲区将数据加载到表中。使用共享缓冲区编写WAL日志,并可使用KingbaseES的WAL日志进行恢复。

CSV_FILE

当数据的加载方式指定为CSV_FILE时,表示将数据库中的数据导出到CSV格式的文本文件中,该参数一般与“TYPE = DB”配合使用。

LIMIT = n

LIMIT只在导入数据文件时有效,加载n行即停止加载。默认值为最大的64位整数(即(2^64)/2-1 = 9223372036854775807),当n为0或默认值时表示不限制加载行数。

ENCODING = encoding

指定输入数据的编码格式,检查指定的编码格式是否合法。默认不检查。若有需要转化输入文件的格式为数据库的编码格式。如果可以确保输入文件格式与数据库格式一致,不指定该选项,会有助于加载速度的提高,因为会忽略字符集的检查和转化。配置文件中ENCODING选项与数据库编码选项的转化关系详见 表 2-1 。

表 8.2.5 配置文件中ENCODING选项与数据库编码选项的转化关系

配置文件中Encoding选项指定

SQL ASCII

non-SQL ASCII

未指定

既不检查也不转化

既不检查也不转化

SQL_ASCII

既不检查也不转化

只检查

非SQL_ASCII,与数据库一致

只检查

只检查

非SQL_ASCII,与数据库不一致

只检查

检查并转化

CHECK_CONSTRAINTS = YES | NO

指定加载时是否进行约束检查(只检查check约束),默认为NO。注: 当前不支持分区约束检查,所以直接插入分区时需要保证数据正确。

PARSE_ERRORS = n

允许出现的错误次数。若错误次数超过该设置值,则快速加载退出运行。-1表示不限制错误个数,0为默认值,表示不允许错误,其他表示允许的错误次数。

FILTER = [schema_name.] function_name[(arg_value,...)]

只在导入数据文件时有效,指定过滤函数用来转换输入文件的每行,如果函数名在数据库中唯一,可以忽略函数的参数类型定义。如果该选项未指定,输入数据将直接被解析到目标表中。

DUPLICATE_ERRORS = n

允许违反唯一约束的忽略的元组个数。冲突的元组将从表中删除并被记录在重复失败的文件中。如果大于等于重复记录数,记录会被回滚。默认值为0,表示不允许重复记录数,-1表示忽略所有错误。BUFFERED模式不支持该参数,指定时会被忽略。

ON_DUPLICATE_KEEP = NEW | OLD

执行元组如何处理违反唯一约束。被删除的元组会被记录在出错文件中。设置了该选项,同样需要设置DUPLOCATE_ERRORS大于0。默认值为NEW。

NEW

采用输入文件中的最新一条记录的数据替换表中原有的数据。

OLD

保持表中原有数据,删除输入文件中的元组。

PARSE_BADFILE = PATH

指定一个文件路径(若指定路径的文件不存在则自动创建一个新文件),默认值与bulkload工具同目录,文件名为导入数据文件的文件名+”.bad”后缀的文件。保存数据文件中解析失败的数据行。若在数据文件解析的过程中解析失败,则该数据行追加记录到该文件。

DUPLICATE_BADFILE = PATH

指定一个文件路径(若指定路径的文件不存在则自动创建一个新文件),默认值与bulkload工具同目录,文件名为导入数据的文件名+”.dupbad”后缀的文件。若存在不能被写入到数据库的元组,则该元组对应的数据文件中的行追加记录到该文件。例如在数据导入过程中元组违背了约束(唯一,主键,非空,check)原则,则该元组不能写入+”.badf”后缀的文件路径。若在数据文件解析的过程中解析失败,则该数据行追加记录到该文件。

TRUNCATE = YES | NO

是否删除所有目标表中的数据,默认值为NO。多进程并行和TYPE为DB时不支持该选项。

VERBOSE = YES | NO

出错的元组是否写入到服务器日志中,默认值为NO。

DELIMITER = delimiter_character

间隔符,数据文件中列与列的间隔符,为单个字符,可以为任何可视化字符。默认值为逗号( , )。当需要一个TAB字符作为间隔符时,用双引号包裹TAB字符,如 DELIMITER = "" 。

QUOTE = quote_character

QUOTE在文件格式为CSV时有效,详情参考COPY语句。默认值为双引号( " )。

ESCAPE = escape_character

ESCAPE在文件格式为CSV时有效,详情参考COPY语句。默认值为反斜杠( \ )。

REINDEX = YES | NO

导入数据后是否重建索引。默认值为NO。

SKIP_LAST_EMPTY_VALUE = YES | NO

只对CSV格式有用,最后一列数据为空,是否把它当成一列数据,还是只是当分隔符。默认值为NO。用TPCH测试时生成的CSV文件在行末尾会加一个分隔符,指定该选项为YES,忽略最后一个分隔符。

SKIP = n

SKIP只在导入TEXT和CSV格式的数据文件时有效,TEXT和CSV格式的数据文件以行为单位进行导入,该选项可以设置跳过多少行数据,这些数据不导入数据库。默认值为0。

NULL = null_string

指定表示一个空值的字符串。默认值是一个没有引号的空字符串。

FORCE_NOT_NULL = column_name

该选项强制要求指定的列不为NULL值,默认情况下将空字符串按照NULL值处理,如果指定了该值,则空字符串不再按照NULL值处理,而是按照零长字符串处理。该选项不能与FILTER一起使用。

TRACKING_INTERVAL = n

指定导入过程中的时间间隔(单位为:秒),客户端反馈导入状况,防止在导入过程中因异常卡死,但用户不知道。默认为0,表示不反馈导入信息,其它非0整数为反馈时间间隔。

PROCESSOR_COUNT = n

指定服务器并行处理的进程数,具体参数值可根据用户服务器的CPU个数指定。默认值为1。TYPE为BIANRY方式不支持该参数,TYPE为DB方式时该参数恒为1。

ASYNC_WRITE = YES | NO

指定服务器的写文件是否独立的进程,默认值为NO。当WRITE为CSV_FILE时,如果PROCESSOR_COUNT大于1,则无论是否指定ASYNC_WRITE,其值始终为YES。

DUMP_PARAMS = YES | NO

是否将配置参数信息导入到日志文件中。默认值为YES。

SPECIFY_COLUMN = COLOUMNAME [FILTER | LLS],...

将数据加载到指定的列上, COLUMNAME为具体的列名; 列名之前使用“,”分隔, 如果列名包含逗号则需要使用单引号将列名括起来, 如果列名包含单引号则需要使用'\'进行转义, 例如列名为i,'d则写为'i,\'d'。FILTER表示跳过对应的列, LLS表示对应字段加载方式使用LOB location specify方式加载。

LLS方式,加载的内容不是文本本身所指的内容而是字段指定文件中的内容,对应的加载内容格式如下:

filename:offset:length

filename:为待加载的数据文件名,支持zip文件

offset:文件的偏移量

length:加载的数据量(字节数)

note:

如果加载的数据文件为zip等压缩文件,length长度一般为整个文件大小,否则会导致加载数据不完整,导出后无法正常解压缩。另外如果加载的对象为CLOB,zip等压缩文件是含有\0可能加载过程中会造成数据截断,所以CLOB不建议采用zip压缩文件进行加载。

LOB_DIR = PATH

LLS方式加载时,对应filename所对应文件所在的路径需要通过LOB_DIR指定。

CLIENT_LOB = TRUE | FALSE

远端LLS方式加载时,需要设置CLIENT_LOB = TRUE 默认值为FALSE。

SCHEMA_SAMEAS_USER = TRUE | FALSE

导入时INPUT参数可以指定[schema_name.] table_name, 如果对应用户只有一个与用户名相同的SCHEMA则可以设置SCHEMA_SAMEAS_USER=TRUE,这样可以不填写schema_name,bulkload会自动补全为username.table_name 这样做是为了兼容oracle。

REMOTE_FILE = PATH

远端加载导入时,INPUT填写为stdin,待加载的数据文件可以通过REMOTE_FILE指定。

其中配置文件中的选项不区分大小写,每个选项占用一行,选项和选项值之间通过等号进行连接,选项的值可以有引号也可以没有引号。如果字符串中有空格、等号等特殊值,则必须加引号。可以通过在正文内容前加入“#”表示注释该行后面的配置。具体格式如下:

PROCESSOR_COUNT =4
DELIMITER = ","                       # Delimiter
QUOTE = "\""                          # Quoting character
LOGFILE =/home/bulkload.log
DUPLICATE_BADFIL=/home/bad.dat
TYPE=CSV
INPUT ==/home/data.csv
OUTPUT=test_table

8.3. 支持的数据文件格式

KingbaseES支持CSV、TEXT和BINARY三种数据文件格式。数据文件可以通过Copy To语句生成,三种文件格式详见 COPY 中文件格式部分。

8.4. 支持的写入方式

KingbaseES提供了BUFFERED方式来写入数据库文件,如果导入的目标表已建立索引,要求加载完数据后索引仍然生效。

8.4.1. BUFFERED方式

BUFFERED同普通Insert语句相比,优势在于节省了语句解析过程中带来的时间损耗。BUFFERED方式,(与INSERT一样)在目标表上添加Row Exclusive锁,因此所有与Row Execlusive锁互斥的操作均会被阻塞。具体如下表(未罗列出来的SQL语句均可顺利执行):

表 8.4.2 BUFFERED方式下的阻塞语句

不会被阻塞的SQL

被阻塞的SQL

被间接阻塞的SQL(由于删除其他对象而导致表被删除或表定义被修改)

DML:SELECT、U PDATE、DELETE、MERGE INTO、COPY FROM、COPY TO 、VACUUM、ANALYZE、G RANT、REVOKE、Create Index、COMMENT ON TABLE、DBCC CHECKCATALOG、CREATE TA BLE…INHERITS、CREATE VIEW、ALTER INDEX RENAME TO、ALTER

ALTER TABLE、DROP TABLE、TRUNCATE TABLE、VACUUM FULL、apply_table _policy()、remove_ta ble_policy()、Create Index、DBCC CHECKDB、DBCC CHECKALLOCATE、DBCC CHE CKTABLESPACE、CREATE TRI GGER、REINDEX、ALTER TRIGGER

DROP SCHEMA(表所在的模式)、DROP OWNED(表对应的用户)、REASSIGN O WNED(表对应的用户)

INDEX SET(storag e_parameter)、ALTER IN DEX..UNUSABLE、ALTER SCHEMA、ALTER TABLESPACE、CREATE VIEW、ALTER INDEX、ALTER SCHEMA、CREATE ROLE、ALTER ROLE、DROP ROLE、ALTER SEQUENCE、 CHECKPOINT、INSERT、

CREATE RULE、ALTER INDEX SET TABLESPACE、DROP INDEX、CREATE INDEX、CLUSTER、LOCK

8.5. 支持的导出方式

KingbaseES支持将数据库的数据导出到一个CSV文件格式的文件中。其功能与COPY TO导出数据库数据到一个 CSV 格式文件相同。

8.6. 性能调优

使用sys_bulkload时,如对性能需求较高,可通过修改服务器配置(即修改kingbase.conf),来改变服务器的资源调度,以提高 sys_bulkload性能。但此类配置参数的修改会对服务器的相关资源调度产生影响,因此建议用户使用完成后还原成修改之前的配置。除了服务器参数,部分sys_bulkload的配置参数也会影响到传输速率。

8.6.1. 服务器参数配置

下表给出了会对sys_bulkload性能产生影响的服务器参数,以及它的默认值和建议修改值。在实际应用过程中,可以依据服务器的硬件环境适当调整各参数的值。

表 8.6.1 修改服务器配置参数

服务器配置参数

默认值

建议值

shared_buffers

128M

2GB

work_mem

4M

100MB

maintenance_work_mem

64M

1GB

autovacuum

on

off

fsync

on

off

full_page_writes

on

off

checkpoint_timeout

5min

1d

wal_buffers

-1

1GB

max_wal_size

1GB

150GB

track_activities

on

off

8.6.2. sys_bulkload 参数配置

LIMIT

在导入CSV文件并且已知文件行数的情况下,设置LIMIT参数为导入文件的行数可提升导入速度。

REINDEX

若导入数据不需要建立索引,则将REINDEX参数设置为NO(默认值),可提升导入速度

PROCESSOR_COUNT

使用BUFFERED方式导入,可以根据当前物理环境合理配置PROCESSOR_COUNT参数优化导入速度。

8.7. 实例

创建导入数据表

create table test(id int primary key, info text, crt_time timestamp);

数据文件示例:将下列数据以 test.csv 为文件名保存到KingbaseES服务器所在目录

1,29b35ff06c949e7e442c929e1df86396,2017-10-08 10:52:47.746062
2,06fde814525395de5ab85f6d92b04e87,2017-10-08 10:52:47.746573
3,c93f02e8677c9cd7c906c6ad5dbd450e,2017-10-08 10:52:47.746627
4,6541700070ae3d051f965fcef43baf45,2017-10-08 10:52:47.746835
5,3d7e7246016acaa842526b6614d0edf5,2017-10-08 10:52:47.746869
6,1d1ae5a03ef0bad3bc14cd5449ba0985,2017-10-08 10:52:47.746894
7,7745c57c54b97656bec80a502ec13ec7,2017-10-08 10:52:47.746918
8,3c377131f6ef82c3284dc77a3b4ffdf7,2017-10-08 10:52:47.746942
9,5ef98d40aeeadf65eb1f0d7fd86ed585,2017-10-08 10:52:47.746968
10,312c0a0188da9e34fe45aa19d0d07427,2017-10-08 10:52:47.746993

8.7.1. 导入数据

8.7.1.1. 以 BUFFERED 方式导入 TEXT 文件

配置文件示例(以test.ctl为名保存到服务器所在目录,也可自行指定其他目录。)

TABLE = test
INPUT = /home/kingbase/test.csv
TYPE = TEXT
SKIP = 2
LIMIT = 5
WRITER = BUFFERED
PROCESSOR_COUNT = 3

使用配置文件导入命令示例

./sys_bulkload -h localhost -d TEST /home/kingbase/test.ctl -U SYSTEM -W 123

使用配置文件导入结果

导入成功提示信息:
    NOTICE: BULK LOAD START
    NOTICE: BULK LOAD END
        2 Rows skipped.
        5 Rows successfully loaded.
        0 Rows not loaded due to parse errors.
        0 Rows not loaded due to duplicate errors.
        0 Rows replaced with new rows.
    log path: /home/test/test.log
    parse error path: /home/test/test.bad
    duplicate error path: /home/test/test.dupbad
    ctrl file path: /home/test/test.ctl
    data file path: /home/test/test.csv
    Run began on 2021-03-27 22:53:26.690476+08
    Run ended on 2021-03-27 22:53:27.496344+08

导入结果查询(配置指定跳过前2行,限制导入条数5条):
    test=# select * from test;
     id |               info               |          crt_time
    ----+----------------------------------+----------------------------
      3 | c93f02e8677c9cd7c906c6ad5dbd450e | 2017-10-08 10:52:47.746627
      4 | 6541700070ae3d051f965fcef43baf45 | 2017-10-08 10:52:47.746835
      5 | 3d7e7246016acaa842526b6614d0edf5 | 2017-10-08 10:52:47.746869
      6 | 1d1ae5a03ef0bad3bc14cd5449ba0985 | 2017-10-08 10:52:47.746894
      7 | 7745c57c54b97656bec80a502ec13ec7 | 2017-10-08 10:52:47.746918
    (5 行记录)
8.7.1.2. 导入二进制文件

利用 COPY TO 将数据库表中的数据导入到一个二进制文件中作为测试数据。

导入二进制文件数据命令示例

./sys_bulkload -i /home/kingbase/test.bin -O test -o "TYPE=BINARY"
-o "WRITER=BUFFERED" -h localhost -d TEST -U SYSTEM -W 123

二进制文件导入结果

导入成功提示信息:
    NOTICE: BULK LOAD START
    NOTICE: BULK LOAD END
        0 Rows skipped.
        10 Rows successfully loaded.
        0 Rows not loaded due to parse errors.
        0 Rows not loaded due to duplicate errors.
        0 Rows replaced with new rows.
    log path: /home/test/test.log
    parse error path: /home/test/test.bad
    duplicate error path: /home/test/test.dupbad
    ctrl file path: /home/test/test.ctl
    data file path: /home/test/test.csv
    Run began on 2021-03-27 22:53:26.690476+08
    Run ended on 2021-03-27 22:53:27.496344+08

导入结果查询:
    test=# select * from test;
     ID |               INFO               |          CRT_TIME
    ----+----------------------------------+----------------------------
      1 | 29b35ff06c949e7e442c929e1df86396 | 2017-10-08 10:52:47.746062
      2 | 06fde814525395de5ab85f6d92b04e87 | 2017-10-08 10:52:47.746573
      3 | c93f02e8677c9cd7c906c6ad5dbd450e | 2017-10-08 10:52:47.746627
      4 | 6541700070ae3d051f965fcef43baf45 | 2017-10-08 10:52:47.746835
      5 | 3d7e7246016acaa842526b6614d0edf5 | 2017-10-08 10:52:47.746869
      6 | 1d1ae5a03ef0bad3bc14cd5449ba0985 | 2017-10-08 10:52:47.746894
      7 | 7745c57c54b97656bec80a502ec13ec7 | 2017-10-08 10:52:47.746918
      8 | 3c377131f6ef82c3284dc77a3b4ffdf7 | 2017-10-08 10:52:47.746942
      9 | 5ef98d40aeeadf65eb1f0d7fd86ed585 | 2017-10-08 10:52:47.746968
     10 | 312c0a0188da9e34fe45aa19d0d07427 | 2017-10-08 10:52:47.746993
    (10 行记录)

8.7.2. 导出数据

将 text.csv 文件导入表 test 中作为测试数据。

导出数据命令示例

./sys_bulkload -d TEST -i TEST -O test_out.csv -o "TYPE=DB" -o
"WRITER=CSV_FILE" -o "DELIMITER=|" -h localhost -U SYSTEM -W 123

导出数据结果

导出成功提示信息:
    NOTICE: BULK LOAD START
    NOTICE: BULK LOAD END
        0 Rows skipped.
        10 Rows successfully loaded.
        0 Rows not loaded due to parse errors.
        0 Rows not loaded due to duplicate errors.
        0 Rows replaced with new rows.
导出结果查询:
    cat test_out.csv
    1|29b35ff06c949e7e442c929e1df86396|2017-10-08 10:52:47.746062
    2|06fde814525395de5ab85f6d92b04e87|2017-10-08 10:52:47.746573
    3|c93f02e8677c9cd7c906c6ad5dbd450e|2017-10-08 10:52:47.746627
    4|6541700070ae3d051f965fcef43baf45|2017-10-08 10:52:47.746835
    5|3d7e7246016acaa842526b6614d0edf5|2017-10-08 10:52:47.746869
    6|1d1ae5a03ef0bad3bc14cd5449ba0985|2017-10-08 10:52:47.746894
    7|7745c57c54b97656bec80a502ec13ec7|2017-10-08 10:52:47.746918
    8|3c377131f6ef82c3284dc77a3b4ffdf7|2017-10-08 10:52:47.746942
    9|5ef98d40aeeadf65eb1f0d7fd86ed585|2017-10-08 10:52:47.746968
    10|312c0a0188da9e34fe45aa19d0d07427|2017-10-08 10:52:47.746993
  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值