3.2.9 LOAD DATA

3.2.9.1 Syntax

LOAD DATA
    [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    CHARACTER SET 'charset_name'
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
   [IGNORE number {LINES }]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]

3.2.9.2 与MySQL语法区别

下文中红色表示不支持的语法或关键字,红绿两色表示稍微不相同的地方

LOAD DATA
-   [LOW_PRIORITY | CONCURRENT] 
    [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
-   [PARTITION (partition_name [, partition_name] ...)]
-   [CHARACTER SET charset_name]
+   CHARACTER SET 'charset_name'
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {
        LINES 
-     | ROWS
        }]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]

3.2.9.3 举例

load data infile 'data.txt' into table test_table CHARACTER SET 'utf8mb4' FIELDS  TERMINATED by ',';

3.2.9.4 原理

dble解析MySQL协议之后,会根据数据路由拆分文件,每满足maxRowSizeToFile(可通过bootstrap.cnf配置)就写到文件中,再通过 load data local infile 的方式导入到后端结点。
所以,这里local_infile这个参数会影响到load data的正确性.
可参考#1085

3.2.9.5 限制

  • 存在BUG导致在dble中CHARACTER SET charset_name必填
  • 由于 dble 依赖的 druid 解析器的限制,charset_name必须单引号包括。比如 CHARACTER SET 'utf8mb4' ,不可使用CHARACTER SET "utf8mb4" 或者 CHARACTER SET utf8mb4
  • 在mysql中如果插入的数据不符合规范会插入部分数据,相对来说dble的load data对正确性有更高的要求,一个错误的发生会导致整体操作的回滚
  • 在ENCLOSED BY的时候存在BUG,使用的的时候会导致转义的数据无法被正确转义存储到数据库中
  • 由于当前解析设定的限制,loaddata默认每列最大字节数65535,可通过bootstrap.cnf中的maxCharsPerColumn配置修改
  • 使用load data导入数据时,若导入表是分片表,应保证导入文件中分片键数据符合分片规则的要求,否则dble将会报错.详细参考issue:https://github.com/actiontech/dble/issues/770
  • load data语句需要严格按照语法书写,由于druid解析器的缘故,若语法或关键字错误,druid会解析出错误的语句,从而导致结果错误.详细请参照issue:https://github.com/actiontech/dble/issues/1248
  • load data语句读字段的时候,如果遇到行结束符,会认为是本行结束了,需要注意:https://github.com/actiontech/dble/issues/1507
  • load data中使用用户变量后,再次查询用户变量的值是不正确的,可参考issue:https://github.com/actiontech/dble/issues/1761

results matching ""

    No results matching ""