在创建表/文件迁移作业时,对简单CSV格式的文件,CDM可以使用字段分隔符进行字段分隔。但是对于一些复杂的半结构化文本,由于字段值也包含了分隔符,所以无法使用分隔符进行字段分隔,此时可以使用正则表达式分隔。
正则表达式参数在源端作业参数中配置,要求源连接为对象存储或者文件系统,且“文件格式”必须选择“CSV格式”。
图 正则表达式参数
在迁移CSV格式的文件时,CDM支持使用正则表达式分隔字段,并按照解析后的结果写入目的端。正则表达式语法请参考对应的相关资料,这里举例下面几种日志文件的正则表达式的写法:
- Log4J日志
- Log4J审计日志
- Tomcat日志
- Django日志
- Apache server日志
Log4J日志
- 日志样例:
2018-01-11 08:50:59,001 INFO
[org.apache.sqoop.core.SqoopConfiguration.configureClassLoader(SqoopConfigurati
on.java:251)] Adding jars to current classloader from property:
- 正则表达式为:
^(\d. \d)(\w ) [(. )] (\w. ).*
- 解析出的结果如下:
表 Log4J日志解析结果
列号 | 样值 |
---|---|
1 | 2018-01-11 08:50:59,001 |
2 | INFO |
3 | org.apache.sqoop.core.SqoopConfiguration.configureClassLoader(SqoopConfiguration.java:251) |
4 | Adding jars to current classloader from property: org.apache.sqoop.classpath.extra |
Log4J审计日志
- 日志样例:
2018-01-11 08:51:06,156 INFO
[org.apache.sqoop.audit.FileAuditLogger.logAuditEvent(FileAuditLogger.java:61)]
user=sqoop.anonymous.user ip=189.xxx.xxx.75 op=show obj=version
objId=x
- 正则表达式为:
^(\d. \d)(\w ) [(. )] user=(\w. ) ip=(\w. )op=(\w. ) obj=(\w. )objId=(. ).*
- 解析结果如下:
表 Log4J审计日志解析结果
列号 | 样值 |
---|---|
1 | 2018-01-11 08:51:06,156 |
2 | INFO |
3 | org.apache.sqoop.audit.FileAuditLogger.logAuditEvent(FileAuditLogger.java:61) |
4 | sqoop.anonymous.user |
5 | 189.xxx.xxx.75 |
6 | show |
7 | version |
8 | x |
Tomcat日志
- 日志样例:
11-Jan-2018 09:00:06.907 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log OS Name:
Linux
- 正则表达式为:
^(\d. \d)(\w ) [(. )] ([\w.] ) (\w.).
- 解析结果如下:
表 Tomcat日志解析结果
列号 | 样值 |
---|---|
1 | 11-Jan-2018 09:00:06.907 |
2 | INFO |
3 | main |
4 | org.apache.catalina.startup.VersionLoggerListener.log |
5 | OS Name:Linux |
Django日志
- 日志样例:
[08/Jan/2018 20:59:07 ] settings INFO Welcome to Hue 3.9.0
- 正则表达式为:
^(. ) (\w ) (.).
- 解析结果如下:
表 Django日志解析结果
列号 | 样值 |
---|---|
1 | 08/Jan/2018 20:59:07 |
2 | settings |
3 | INFO |
4 | Welcome to Hue 3.9.0 |
Apache server日志
- 日志样例:
[Mon Jan 08 20:43:51.854334 2018] [mpm_event:notice] [pid 36465:tid 140557517657856]
AH00489: Apache/2.4.12 (Unix) OpenSSL/1.0.1t configured -- resuming normal operations
- 正则表达式为:
^[(. )][(. )] [(. )] (. ).*
- 解析结果如下:
表 Apache server日志解析结果
列号 | 样值 |
---|---|
1 | Mon Jan 08 20:43:51.854334 2018 |
2 | mpm_event:notice |
3 | pid 36465:tid 140557517657856 |
4 | AH00489: Apache/2.4.12 (Unix) OpenSSL/1.0.1t configured -- resuming normal operations |