精华内容
下载资源
问答
  • Hive分隔符

    千次阅读 2019-02-13 17:16:53
    然而,这两种文件格式有一个共同的缺点,那就是用户需要对文本文件中那些不需要作为分隔符处理的逗号或者制表符格外小心。也因此,Hive默认使用了几个控制字符,这些字符很少出现在字段值中。Hive使用术语field来...

      下面我们一起来研究文件格式。用户应该很熟悉以逗号或者制表符分隔的文本文件,也就是所谓的逗号分隔值(CSV)或者制表符分隔值(TSV)。只要用户需要,Hive是支持这些文件格式的。然而,这两种文件格式有一个共同的缺点,那就是用户需要对文本文件中那些不需要作为分隔符处理的逗号或者制表符格外小心。也因此,Hive默认使用了几个控制字符,这些字符很少出现在字段值中。Hive使用术语field来表示替换默认分隔符的字符。下表列举了Hive中默认的记录和字段分隔符:

    分隔符 描述
    \n 对于文本文件来说,每行都是一条记录,因此换行符可以分隔记录
    ^A(Ctrl+A) 用于分隔字段(列)。在CREATE TABLE语句中可以使用八进制编码\001表示
    ^B 用于分隔ARRAY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE语句中可以使用八进制编码\002表示
    ^C 用于MAP中键和值之间的分隔。在CREATE TABLE语句中可以使用八进制编码\003表示

    下面这个表结构声明展示了如何明确地指定分隔符:

    CREATE TABLE employees (
        name STRING,
        salary FLOAT,
        subordinates ARRAY<STRING>,
        deductions MAP<STRING, FLOAT>,
        address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\001'
    COLLECTION ITEMS TERMINATED BY '\002'
    MAP KEYS TERMINATED BY '\003'
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE;
    

      ROW FORMAT DELIMITED这组关键字必须要写在其他子句(除了STORED AS…)子句之前。

      字符\001是^A的八进制数。ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001’这个子句表明hive将使用^A字符作为列分隔符。

      同样的,字符\002是^B的八进制数。ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY '\002’这个子句表明hive将使用^B字符作为集合元素间的分隔符。

      最后,字符\003是^C的八进制数。ROW FORMAT DELIMITED MAP KEYS TERMINATED BY '\003’这个子句表明hive将使用^C字符作为map的键和值之间的分隔符。

      子句LINES TERMINATED BY '…'和STORED AS …不需要ROW FORMAT DELIMITED关键字。

      事实上,Hive目前为止对于LINES TERMINATED BY…仅支持字符’\n’,也就是说行与行之间的分隔符只能为’\n’。

    展开全文
  • hive 分隔符问题

    2021-03-12 15:10:57
    hive 分隔符问题 数据 [hadoop@hadoop001 data]$ cat people.txt csz$%#18 fy$%#19 hive创表 create table multidelimit( name string, age int) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2....

    hive 分隔符问题

    数据

    [hadoop@hadoop001 data]$ cat people.txt
    csz$%#18
    fy$%#19
    

    hive创表

    create table multidelimit(
    name string,
    age int)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
    WITH SERDEPROPERTIES("field.delim"="$%#");
    

    导入数据

    load data local inpath "/home/hadoop/data/people.txt" overwrite into table multidelimit;
    

    查看

    hive (test)> select * from multidelimit;
    OK
    multidelimit.name       multidelimit.age
    csz     18
    fy      19
    
    展开全文
  • hive分隔符引发的坑

    2021-04-07 15:14:03
    hive分隔符引发的坑 ​ 这两天在做公司 BPM 系统数据分析的工作,前期需要将 BPM 系统的数据导入到 HDFS 上,BPM 系统数据存储在 SQL Server 上,导入数据工具选择 Sqoop ,按照 Sqoop 操作惯例,需要先下载相应的...

    hive分隔符引发的坑

    ​ 这两天在做公司 BPM 系统数据分析的工作,前期需要将 BPM 系统的数据导入到 HDFS 上,BPM 系统数据存储在 SQL Server 上,导入数据工具选择 Sqoop ,按照 Sqoop 操作惯例,需要先下载相应的驱动 jar 包,这里是网上下载的 mssql-jdbc-7.4.1.jre8.jar(图示上为 sql server 的驱动 jar 包,下为 mysql 的驱动 jar 包);
    在这里插入图片描述

    ​ 然后将下好的 jar 包上传到 Sqoop 的 lib 目录下;

    ​ 打开Hadoop相关进程,就可以执行数据的导入和导出操作了;

    #App_K3Flow表数据同步(全量)
     /opt/module/sqoop/bin/sqoop import \
    --connect "jdbc:sqlserver://172.31.xxx.xxx:1433;DatabaseName=kcpm" \
    --username xx \
    --password xxxxxx \
    --target-dir /warehouse/data/App_K3Flow_test \
    --delete-target-dir \
    --query "SELECT * from App_K3Flow where 1 = 1 and \$CONDITIONS" \
    --num-mappers 4 \
    --split-by FlowID \
    --fields-terminated-by "\t" \
    --null-string '\\N' \
    --null-non-string '\\N'
    

    ​ 看似很标准的流程,正常情况下,这种是没有问题的,等待数据同步完成。。。

    ​ 数据同步到 HDFS 上之后,将其加载到 hive 里面去,在 hive 客户端执行如下命令

    load data inpath '/warehouse/data/App_K3Flow_test' OVERWRITE into table ods_App_K3Flow;
    

    ​ 执行完成之后,核对数目条数

    select count(*)
    from ods_App_K3Flow_test;
    

    ​ 执行结果如下:
    在这里插入图片描述

    ​ 在 BPM 系统中核对数目条目

    select
    count(*)
    from App_K3Flow;
    

    ​ 执行结果如下:

    在这里插入图片描述

    ​ 二者执行结果发现不一致,在 hive 数仓的 ods 层的数据比 BPM 系统的原始数据多出了几千条,查看 ods 层的数据,发现多出来很多空值,如下所示:
    在这里插入图片描述

    ​ 而且每个 空值的下面都有非空但数据错乱的一行

    ​ 尝试到 BPM 系统里面去找一下 id = 202436 的数据

    在这里插入图片描述

    ​ 上图是查找出来的数据,显然可见,string2 这一列的字段包含了 hive 默认的分隔符 ’ \t ',而在 sqoop 执行数据同步的时候,我们指定的是 hive 默认的分隔符 ’ \t ',导致行数据切分出现了问题。网上查找帖子,发现 sqoop 还有一个参数:–hive-drop-import-delims ,添加这个参数,可以删除掉行内包含的 hive 的默认分隔符 ’ \t ’ ,尝试添加该参数,修改后的 sqoop 脚本:

     /opt/module/sqoop/bin/sqoop import \
    --connect "jdbc:sqlserver://172.31.xxx.xxx:1433;DatabaseName=kcpm" \
    --username xx \
    --password xxxxxx \
    --target-dir /warehouse/data/App_K3Flow_test \
    --delete-target-dir \
    --query "SELECT * from App_K3Flow where 1 = 1 and \$CONDITIONS" \
    --num-mappers 4 \
    --split-by FlowID \
    --fields-terminated-by "\t" \
    --hive-drop-import-delims \
    --null-string '\\N' \
    --null-non-string '\\N' 
    

    ​ 然后执行数据导入 hive 的 ods 层操作,执行完之后再次查询数据条数

    select count(*)
    from ods_App_K3Flow_test;
    

    ​ 执行结果如下:

    在这里插入图片描述

    ​ 在 BPM 系统中核对数目条目

    select
    count(*)
    from App_K3Flow;
    

    ​ 执行结果如下:

    在这里插入图片描述

    这样,原始数据条目与通过过后的数据条目就一致了。

    展开全文
  • hive 分隔符替换

    2018-01-09 16:22:00
    Hive建表的时候虽然可以指定字段分隔符,不过用insert overwrite local directory这种方式导出文件时,字段的分割符会被默认置为\001,一般都需要将字段分隔符转换为其它字符, 可以使用下面的命令:sed -e 's/\x01/|...

    Hive建表的时候虽然可以指定字段分隔符,不过用insert overwrite local directory这种方式导出文件时,字段的分割符会被默认置为\001,一般都需要将字段分隔符转换为其它字符,

    可以使用下面的命令:sed -e 's/\x01/|/g' file

    可以将|替换成自己需要的分隔符,file为hive导出的文件。

    sed -i 's/\x01/\t/g' file
    
    for f in `ls 98*`; do 
    
    sed -i 's/\x01/\t/g' $f 
    
    done 

     

    展开全文
  • I have 2 tables in Hive - first is external, the second one is managed. Managed table is populated from external using INSERT OVERWRITE...SELECT FROM external_table. Both tables are created with row d...
  • 分隔符前后字段截取 Tips: mysql的3种字段截取; 1、`SUBSTR(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:`SELECT SUBSTR("RUNOOB", 2, ...
  • hive分隔符总结

    2017-11-23 23:56:00
    €的unicode码是0x80,它对应的二进制是10000000,这个二进制如果是表示负数的话对应-128,我就用‘\-128’作为分隔符  \x 使用 十六进制数 指定的Unicode 字符,如\xc8 \u 使用数字指定的Unicode 字符,如\...
  • Sqoop导入hive分隔符问题

    千次阅读 2016-11-29 14:33:02
    Sqoop从Oracle导入数据到Hive,示例: [plain] view plain copy sqoop import --connect jdbc:oracle:thin:@oracle-host:port:orcl --username name--password passwd --hive-...
  • hive 分隔符 ^A

    千次阅读 2015-07-27 18:19:03
    0.hive 去重 select * from (select *,row_number() over (partition by id order by name asc) num from table) t where t.num=1;  id ,name 为列名 0 hive排序 select pin,pro,row...
  • hive导出数据,想找一个分隔符hive默认分隔符是“\001”。想换个其他的。在ASCII码对照表中找了下,决定用“\0011”。 然后Hive能正常数据,到notepad++里面显示的字符和ASCII码对照表里的是一样的。 但是在用...
  • 详解hive的列分隔符和行分隔符的使用

    万次阅读 多人点赞 2018-05-13 10:42:40
    hive中在创建表时,一般会根据导入的数据格式来指定字段分隔符和列分隔符。一般导入的文本数据字段分隔符多为逗号分隔符或者制表符(但是实际开发中一般不用着这种容易在文本内容中出现的的符号作为分隔符),当然也...
  • hive的列分隔符和行分隔符的使用

    千次阅读 2020-10-25 22:33:43
    目录 一、Hive中默认的分割符如下 二、分隔符的指定与使用 三、建好表之后更改字段分隔符 ...hive中在创建表时,一般会根据导入的数据格式来指定字段分隔符和列分隔符。一般导入的文本数据字段分隔...
  • 文章目录HIVE 特殊分隔符处理1. 使用 RegexSerDe 通过正则表达式来抽取字段2. 通过自定义 InputFormat 解决特殊分隔符问题 HIVE 特殊分隔符处理 补充:hive 读取数据的机制: 首先用 InputFormat<默认是:org....
  • Hive的列分隔符和行分隔符

    千次阅读 2020-04-13 12:14:05
    在创建Hive表时,默认行分隔符"^A",列分隔符"\n",这两项也是可以设置的。在实际开发中,一般默认使用默认的分隔符,当然有些场景下也会自定义分隔符。 创建表1: spark-hive use test_db; # 创建外部表 CREATE...
  • hive分隔符问题

    千次阅读 2017-05-26 16:32:25
     大数据维稳需求中,客户提供的测试数据为多个字符做分隔符('|#'),在pig中会直接报错,hive中只认第一个分隔符。 由于数据量比较大(160G),在文本中替换成单个字符分隔符已不现实,以下提供两个方案解决这一...
  • hive分隔符问题

    2020-06-05 09:28:32
    在使用hive的时候,分隔符是必不可少的,当学习的时候使用的都是常规分隔符,比如:逗号“,”、竖线“|”等,这些键盘上都可以直接输入的字符,但是这些字符只要是键盘上的,在针对复杂的业务逻辑的时候,都会失效。...
  • hive 自定义分隔符Before I proceed, I should point out that I've always heard and used the term "line 在继续之前,我应该指出,我一直都听到并使用“线路”一词。 terminator" to refer to the characters ...
  • hive建表分隔符问题

    2020-08-30 15:31:58
    hive 默认的字段分隔符为ascii码的控制符\001,建表的时候用fields terminated by ‘\001’,如果要测试的话,造数据在vi 打开文件里面,用ctrl+v然后再ctrl+a可以输入这个控制符\001。按顺序,\002的输入方式为ctrl+v...
  • Hive 高级操作(五)之 HIVE 特殊分隔符处理1、hive 读取数据的机制2、使用 RegexSerDe 通过正则表达式来抽取字段3、通过自定义 InputFormat 解决特殊分隔符问题 1、hive 读取数据的机制 hive 读取数据的机制: (1...
  • Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法。由于在加载数据的过程中,不...
  • hive默认分隔符

    2018-08-01 11:05:00
    默认分隔符‘\001',对应ascii码SOH; 通过cat -A filename可以查看分隔符: 转载于:https://www.cnblogs.com/mryangbo/p/9400110.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,972
精华内容 5,188
关键字:

hive分隔符