4.5. 数据操作

4.5.1 数据导入

1. 生成数据

图 4.5.1.1伪造数据

2. 追加数据

./load.sh  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

-f 的路径表示在hdfs的文件路径

3. 覆盖数据

./load.sh -ov  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

4. 按条件删除

./load.sh  -cond "s1='1'"  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

5. 按指定的k列进行更新

./load.sh  -k s1  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

6. 按照指定k列进行更新,并按照k列进行排重

  1. 按照-k指定的字段 进行覆盖更新;
  2. 通过-dist 会将传入的数据按照-k指定的字段进行排重,排重规则为:根据文件偏移量选择最大偏移量的数据(要求相同的key在同一个文件内)
./load.sh  -k s1 -dist  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

7. 按照指定k列进行删除

./load.sh  -k s1 -delete  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2

8. 按指定的k列进行部分数据更新,部分数据删除

(1) 使用样例
./load.sh  -k s1 -dist -deletemark i1 -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2
(2) 具体方法

本功能解决通过ogg传入过来的数据,导入到lsql里的方法,里面有新增,有删除,有更新操作,为了保证数据一致性。

注意,可以一次执行多个文件,但切记,同一个ID只能出现在一个文件内,会根据文件偏移量计算那条数据时最新的,最终只会保留在当前文件内偏移量最大的那个。

  • 导入命令说明:

    -k                 表示唯一id,这里写uniqkey
    -dist             表示按照key导入的时候进行数据排重,相同的key只保留在文件内偏移量最大的那个值
    -deletemark     表示该条记录是否是被删除的记录,如果其值为 D or delete 会被删除,区分大小写,如果不是这两个值,会覆盖
    
    ./load.sh  -t ogg_test -p 20191231  -k uniqkey -dist -deletemark datastatus -tp txt  -f a.txt -local -sp , -fl uniqkey,dataname,datapos,dataversion,datastatus
    
  • 建表语句

    create table ogg_test(
        uniqkey y_string_id,
        dataname y_string_id,
        datapos  y_string_id,
        dataversion y_string_id,
        datastatus y_string_id
    )
    
  • 第一次导入数据

    代码框内味导入数据内容:

    数据id,数据名称,文件内位置(我们自己校验用),数据版本,删除标记

    1,数据1,第1条,0001,-
    2,数据2,第2条,0001,-
    3,数据3,第3条,0001,-
    4,数据4,第4条,0001,-
    5,数据5,第5条,0001,-
    6,数据6,第6条,0001,-
    7,数据7,第7条,0001,-
    8,数据8,第8条,0001,-
    9,数据9,第9条,0001,-
    9,数据9,第10条,0001,
    

    入库脚本如下:

    ./load.sh  -t ogg_test -p 20191231  -k uniqkey -dist -deletemark datastatus -tp txt  -f a.txt -local -sp , -fl uniqkey,dataname,datapos,dataversion,datastatus
    

    入库结果为:

    select * from ogg_test where partition like '20191231'  order by uniqkey asc  limit 20;
    

  • 第二次导入,部分数据更新,部分数据删除

    数据内容:

    1,数据1,第1条,0002,U
    2,数据2,第2条,0002,D
    3,数据3,第3条,0002,D
    3,数据3,第4条,0002,A
    4,数据4,第5条,0002,U
    5,数据5,第6条,0002,D
    6,数据6,第7条,0002,U
    7,数据7,第8条,0002,U
    7,数据7,第9条,0002,U
    7,数据7,第10条,0002,U
    

    入库脚本如下:

    ./load.sh  -t ogg_test -p 20191231  -k uniqkey -dist -deletemark datastatus -tp txt  -f b.txt -local -sp , -fl uniqkey,dataname,datapos,dataversion,datastatus
    

    入库结果为:

9. load统计工具

./load.sh  -t common_example001 -p data_operate -tp txt  -f /data/test/test_001.log -sp , -fl s1,i1,f1,l1,d1,ti1,tf1,tl1,td1,wc4_1,wc4_2 -isp /result/test

注:-isp后所跟参数为指定的数据入库统计结果存放路径(保存在hdfs内),用于记录错误数据及入库过程记录信息,该目录可由用户自定义,无需事先创建。

10. 导入脚本参数详解

参数 说明
-t (必选)LSQL中的表名。
-f (必选)HDFS的文件路径,与-local参数联合使用代表访问Linux本地文件路径。
-tp (必选)文件类型,目前支持txt和json。
-fl (txt格式必选)txt文件对应的表的列名字。
-sp (txt格式必选)txt文件对应分隔符,支持正则,不可见字符,可以通过urlencode编码。
-p (可选)LSQL中的分区名,如果不写,则导入到表的默认分区
-local (可选)Linux本地文件路径。
-ov (可选)导入前是否清空当前分区的数据。
-k (可选)按照该字段进行update覆盖,只支持不分词的索引列
-ck (可选)多个列做为主键,在导入数据时需预先通过-ck参数,将多个列的值生成联合值。参见“-kk -ck”用法。
-kk -ck (可选)当需要更新复合主键的时候通过-kk就可以根据-ck指定的多个列进行更新了,如果之前的数据没有根据-ck生成联合值,则不能进行多列更新。参见“-ck”用法。
-kn (可选)在使用-k更新数据时,可以选择-kn此条件,增加更新的并发度,设置更新的并发度可以提高更新的效率;一般设置2的倍数: -kn 4, -kn 8, -kn 10, -kn 16等。
-cond (可选)在追加数据前,先根据条件删除旧的数据。
-delete (可选)按照指定k列进行删除。
-dist (可选)表示按照key导入的时候进行数据排重,相同的key只保留在文件内偏移量最大的那个值。
-deletemark (可选)表示该条记录是否是被删除的记录,如果其值为 D or delete,会被删除,区分大小写,如果不是这两个值,会覆盖。
-mvsplit SYS_TABLE_SPLITER_DEFAULT \%19 utf-8 (可选)多值列数据分割符(\%19,支持其他的分割符)替换成LSQL支持的多值分隔符。对所有字段作用。
-mvsplit 字段名字 \%19 utf-8 (可选)多值列数据分割符(\%19,支持其他的分割符)替换成LSQL支持的多值分隔符。对指定字段作用。
-isp (可选)在导入数据时设置错误数据及入库过程记录信息路径。
Copyright © lucene.xin 2020 all right reserved修改时间: 2021-07-09 17:01:00

results matching ""

    No results matching ""