sequoiadb sdbexprt 导入工具进阶使用

在做sdb 导入操作时,通过more 查看数据,格式是比较正常的,样例数据如下:

CB20160630968101173208||0160630|73208|2|_*|3903|BZ|B3412|04347||1||09664.8900|
                                                                              |0000|6968|6968|BI968101|BI579101|BI913101|BI579001|BI579101|00|N9|_9|X00|_0|N9||N9|N9||0010101|0010101|||016-06-30 09:47:44|001-01-01 00:00:00||N9|N9||N9|EST|111111|111111|||1||||10110000|05_FIN_EVT_DTL_CB0_A2|B_JBPF10|0160630
 
但是一旦做数据导入,导入命令如下
/data/sdbadmin/bin/sdbimprt --ignorenull true -j 18 --trim both -e "|" -r "\n" --type csv \
-s jushantest02 -p 11810 \
-c foo -l bar \
--file  /data/testdata/test.txt \
--fields "COL1 string,COL2 string,COL3 string,COL4 string,COL5 string,COL6 string,COL7 string,COL8 string,COL9 string,COL10 string,COL11 string,COL12 string,COL13 string,COL14 string,COL15 string,COL16 string,COL17 string,COL18 string,COL19 string,COL20 string,COL21 string,COL22 string,COL23 string,COL24 string,COL25 string,COL26 string,COL27 string,COL28 string,COL29 string,COL30 string,COL31 string,COL32 string,COL33 string,COL34 string,COL35 string,COL36 string,COL37 string,COL38 string,COL39 string,COL40 string,COL41 string,COL42 string,COL43 string,COL44 string,COL45 string,COL46 string,COL47 string,COL48 string,COL49 string,COL50 string,COL51 string,COL52 string,COL53 string,COL54 string,COL55 string,COL56 string,COL57 string,COL58 string,COL59 string,COL60 string,COL61 string,COL62 string,COL63 string,COL64 string,COL65 string,COL66 string,COL67 string"
 
发现导入数据库中的数据格式有问题
db.foo.bar.find()
{
  "_id": {
    "$oid": "57bc0f8a5dbe8e1f31000000"
  },
  "COL1": "CB20160630968101173208",
  "COL2": "?5",
  "COL3": "?20160630",
  "COL4": "?173208",
  "COL5": "?02",
  "COL6": "?@_*",
...
  "COL64": "?CB_JBPF10",
  "COL65": "?20160630\r"
}
 
 
大家可以发现,每个字段前面都出现了一个"?" 符号,证明这个字段切分符肯定不止"|"符号,并且在记录分割符上,应该是"\r\n",而不是"\n"
 
解决方法,首先通过tail 命令截取少量的样例数据
tail -1 test.txt > test2.txt
 
然后通过 od 命令将不可见字符打印出来,给大家一个od 的使用例子
echo "A" | tr -d "\n" | od -An -t dC
   65
A 字符对应的ascii 表就是65,所以我们可以通过这个命令来抓取不可见字符
执行
cat test2.txt  | tr -d "\n" | od -An -t dC

打印的结果如下

   67   66   50   48   49   48   49   49   50   57   57   57   56   49   48   49
   52   57   50   53   53   57  124   27   53  124   27   50   48   49   48   49
   49   50   57  124   27   52   57   50   53   53   57  124   27   48   51  124
   27   64   95   42  124   27   50   48   49   48   57  124   27  124   27   67
   66   87  124   27   67   66   51   55   49   48  124   27   32  124   27   49
   56   55   55   56   55   54   51  124   27   48  124   27   48   49  124   27
   50  124   27   57   57   55   46   53   48   48   48  124   27   68  124   27
   57   57   56   57   57  124   27   57   57   56   57   57  124   27   57   57
   56   57   57  124   27   67   66   73   57   57   56   49   48   49  124   27
  124   27   67   66   73   48   53   54   49   48   49  124   27   67   66   73
   48   53   54   49   48   49  124   27   67   66   73   48   53   54   49   48
   49  124   27   67   66   73   48   53   54   49   48   49  124   27   48   48
   48  124   27   49   49   48  124   27   64   95   57  124   27   74   88   50
   48  124   27   64   95   48  124   27  124   27   90   78   57  124   27   48
  124   27   57   57   57   57   57   57   57   57   57   57   57   57   57   57
   57   57  124   27   57   57  124   27  124   27   90   78   57  124   27   50
  124   27   48   48   48   49   48   49   48   49  124   27   48   48   48   49
   48   49   48   49  124   27   49  124   27   48  124   27   50   48   49   48
   45   49   49   45   50   57   32   49   48   58   50   52   58   49   53  124
   27   48   48   48   49   45   48   49   45   48   49   32   48   48   58   48
   48   58   48   48  124   27   48  124   27   90   78   57  124   27   90   78
   57  124   27   48  124   27  124   27  116  116  121   97   97  124   27   64
   95   87   89  124   27   84   69   83   84  124   27   49   49   49   49   49
   49   49  124   27   49   49   49   49   49   49   49  124   27   48  124   27
   48  124   27   49   49  124   27   49  124   27   48  124   27   48  124   27
  124   27   84   48   53   95   70   73   78   95   69   86   84   95   68   84
   76   95   67   66   48   95   65   50  124   27   67   66   95   74   66   80
   70   49   48  124   27   50   48   49   48   49   49   50   57   13

 

通过仔细观察,可以发现字段分隔符应该为  124 27 两个字符
所以在使用sdbimprt 导入工具时,应该调整为以下命令
/data/sdbadmin/bin/sdbimprt --ignorenull true -j 18 --trim both -e "\124\27" -r "\r\n" --type csv \
-s jushantest02 -p 11810 \
-c foo-l bar\
--file  /data/testdata/test.txt \
--fields "COL1 string,COL2 string,COL3 string,COL4 string,COL5 string,COL6 string,COL7 string,COL8 string,COL9 string,COL10 string,COL11 string,COL12 string,COL13 string,COL14 string,COL15 string,COL16 string,COL17 string,COL18 string,COL19 string,COL20 string,COL21 string,COL22 string,COL23 string,COL24 string,COL25 string,COL26 string,COL27 string,COL28 string,COL29 string,COL30 string,COL31 string,COL32 string,COL33 string,COL34 string,COL35 string,COL36 string,COL37 string,COL38 string,COL39 string,COL40 string,COL41 string,COL42 string,COL43 string,COL44 string,COL45 string,COL46 string,COL47 string,COL48 string,COL49 string,COL50 string,COL51 string,COL52 string,COL53 string,COL54 string,COL55 string,COL56 string,COL57 string,COL58 string,COL59 string,COL60 string,COL61 string,COL62 string,COL63 string,COL64 string,COL65 string,COL66 string,COL67 string"

 

 
总结
一般开发者在做数据迁移时,最头疼的事情就是做数据格式的整理,所以在导入过程中遇到数据乱码或者是导入失败,首先应该通过od 命令检查数据真实的字符,是否存在不可见字符,如果是,则需要在导入时指定不同的切分符来完成数据的加载。
posted @ 2016-09-01 14:18  chenfool  阅读(563)  评论(0编辑  收藏  举报