openGauss这么多工具?到底要选哪个?(68)

99 阅读3分钟

#openGauss #入门 #安装 #数据库 #开源

知识来源:docs-opengauss.osinfra.cn/zh/

  • RAW:

    会把每个字符解析成ASCII码值保存,转义字符“\”不执行转义操作。

    限制:RAW不能使用分隔符。

    示例:

    // 建表
    create table t_raw(col raw(50));
    // 数据文件
    cat t_raw.txt
    12\n\x78!<~?'k^(%s)>/c[$50]
    // 控制文件
    cat t_raw.ctl
    Load Data
    TRUNCATE INTO TABLE t_raw
    TRAILING NULLCOLS(
    col position(1:50) raw
    )
    // guc_param file
    cat test_guc.txt
    set a_format_copy_version='s1';
    set a_format_dev_version='s2';
    set a_format_version='10c';
    // 执行导入
    gs_loader -p xxx host=xxx control=t_raw.ctl data=t_raw.txt -d testdb -W xxx guc_param=test_guc.txt
    // 导入结果:导入成功
    select * from t_raw;
                              col
    --------------------------------------------------------
     31325C6E5C783738213C7E3F276B5E282573293E2F635B2435305D
    (1 row)
    

注意:

  • 在多列导入场景中,不指定guc参数时,部分position与分隔符不能同时使用。

  • 在多列导入场景中,SYSDATE和CONSTANT运算不能和POSITION运算同时使用。

  • 指定数据类型导入时,包含普通数据类型需要通过guc_param设置a_format_copy_version参数,包含特殊数据类型则需要通过guc_param设置a_format_copy_version和a_format_dev_version及a_format_version参数。

  • 列表达式涉及到系统函数时,需要根据对应功能通过guc_param设置合适的a_format_dev_version及a_format_version参数。

  • 带length数据类型的使用,length需指定为大于0的整数;RAW数据类型作为特殊类型,RAW(length)的使用区别于普通类型的使用,如INTEGER EXTERNAL(length)的使用,当不指定position时,INTEGER EXTERNAL(length)表现为,当length小于文本文件 (.csv/.txt等)中对应列数据长度时报错;当length大于文本文件 (.txt)中对应列数据长度时,输出INTEGER EXTERNAL类型的结果。RAW(length)当不指定position时表现为读取length个字符。

  • POSITION使用时,POSITION(start:end),start需设置为大于0的整数,且end值应大于等于start的值。

  • 指定POSITION时,在处理字段内容时不会省略尾部的空格;不指定POSITION时,处理字段内容时会省略尾部的空格,如果需要保留空格,需要在guc_param所指定的文件中,已设置好a_format_version的前提下,添加 set behavior_compat_options='char_coerce_compat'; 详细内容请参考管理员指南中behavior_compat_options的设置。

  • 并发导入时,若多个gs_loader的discard文件名或bad文件名指向同一目录同名文件,则后一个执行的gs_loader会中止报错。若前一个已经导入完成,则文件被覆盖。 报错如下:

    ERROR: An error occurred. Please check logfile.

log文件中:

lock failed: Resource temporarily unavailable…
  • 控制文件中对于字段值的部分若不为空且不使用本字段内容,则不占用数据文件的位置。 比如控制文件如下:

    Load Data TRUNCATE INTO TABLE gsloader fields terminated by ',' TRAILING NULLCOLS( id "trim(:id)", text "to_char(SYSDATE,'yyyymmdd')", gmt_create "trim(:gmt_create)", create_str "trim(:create_str)" )

数据文件如下:

11,22你好,33,

导入结果为:

loader=# select * from gsloader;
id |  text  |     gmt_create      | create_str
----+--------+---------------------+------------
11 | 2023-02-08 16:00:54 | 22你好 |  33

#openGauss #入门 #安装 #数据库 #开源

知识来源:docs-opengauss.osinfra.cn/zh/