`
ruishen
  • 浏览: 49882 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

hive指定行分割符和列分隔符

 
阅读更多
指定行分割符和列分隔符

由于默认的是能指定列分隔符,但是不可以指定行分隔符,所以这个时候,我们存在hdfs上的数据有的可能是\001是列分隔符,和\002是分隔符这个时候就得重写一下inputformat来使用了。(当然还有其他的方式,比如书上说serDe 来做)

package com.hcr.hadoop.hive;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
 
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.InputSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.JobConfigurable;
import org.apache.hadoop.mapred.LineRecordReader;
import org.apache.hadoop.mapred.RecordReader;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
 
public class MyHiveInputFormat extends TextInputFormat implements
      JobConfigurable {
 
   public RecordReader<LongWritable, Text> getRecordReader(
        InputSplit genericSplit, JobConf job, Reporter reporter)
        throws IOException {
      reporter.setStatus(genericSplit.toString());
//    return new LineRecordReader(job, (FileSplit) genericSplit, decode(job.get("temp.line.record.delimiter")).getBytes("UTF-8"));
      return new LineRecordReader(job, (FileSplit) genericSplit, "\002".getBytes("UTF-8"));
   }
  
   /**
    * 工作流传过来的列分隔符,有可能是特殊字符,用八进制或者十六进制表示
    *
    * @throws IOException
    */
   public static String decode(String str) throws IOException {
      String re = str;
      if (str != null && str.startsWith("\\")) {
        str = str.substring(1, str.length());
        String[] chars = str.split("\\\\");
        byte[] bytes = new byte[chars.length];
        for (int i = 0; i < chars.length; i++) {
           if (chars[i].equals("t")) {
              bytes[i] = 9;
           } else if (chars[i].equals("r")) {
              bytes[i] = 13;
           } else if (chars[i].equals("n")) {
              bytes[i] = 10;
           } else if (chars[i].equals("b")) {
              bytes[i] = 8;
           } else {
              bytes[i] = Byte.decode(chars[i]);
           }
        }
        try {
           re = new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
           throw new IOException(str, e);
        }
      }
      return re;
   }
}
 


我上边是\002是写死的上边,为了测试用。其实可以写在配置文件中(hive-site.xml)中一个变量来读取比如"temp.line.record.delimiter"

<property>
  <name>temp.line.record.delimiter</name>
  <value>\002</value>
</property>

这样的行分隔符可以来直接使用配置文件取就可以。就是上边的注释掉的代码。

由于没有放入环境变量,先add jar 一下了。

hive> add jar /root/hcr/tmp/hcr.jar;
Added /root/hcr/tmp/hcr.jar to class path
Added resource: /root/hcr/tmp/hcr.jar
hive> create table m_t3( mark string,
   >   keyValue string,
   >   batchNo string) row formatdelimited fields terminated by '\001'
    >  stored as INPUTFORMAT 'com.hcr.hadoop.hive.MyHiveInputFormat'
   >   OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
OK
Time taken: 2.111 seconds
hive> load  data local inpath'/root/hcr/tmp/sss.txt'overwrite into table m_t3;
Copying data fromfile:/root/hcr/tmp/sss.txt
Copying file: file:/root/hcr/tmp/sss.txt
Loading data to table default.m_t3
Moved to trash: hdfs://hadoop-master.TB.com:8020/user/hive/warehouse/m_t3
OK
Time taken: 0.296 seconds
 
hive> select * from m_t3;
keyData XXZXZZ:YSZTZXS:618888:AFS:3853864      d_20131220170748-1600299142
keyData XXZXZZ:YSZTZXS:618914:AFS:3853923      d_20131220170748-1600299142
hive>

可以在hive-site.xml文件中配置hive.aux.jars.path 参数,让本地jar 只要一启动就注册进去。
<property>
<name>hive.aux.jars.path</name>
<value>file:///root/hcr/tmp/hcr.jar</value>
</property>




其实\001不用指定,hive默认的列分隔符就是\001。不过如果你的数据列之前不是\001可以换成其他的。

分享到:
评论

相关推荐

    Hive多字节分隔符解决方案.docx

    Hive多字节分隔符解决方案.docx

    0738-6.2.0-如何在Hive中使用多分隔符

    文档编写目的 Hive在0.14及以后版本支持字段的多分隔符,参考: ... 而Fayson在以前的文章中也基于C5...如何将多个字符作为字段分割符的数据文件加载到Hive表中,示例数据如下: 字段分隔符为“@#$” test1@#$test1name@#$t

    hive窗口函数

    hive窗口系列函数

    HIVE多行转多列 和 多列转多行

    1、HIVE多行转多列 源数据样式 把CAMERA_NO,RESULT_DATA两列转换为CAMERA_NO字段的数据为列名,RESULT_DATA字段对应CAMERA_NO的数据为值 方法一:利用str_to_map函数 alter table ods.iot.iot_5060_iotdaq.5060_...

    大数据实验六实验报告:熟悉Hive的基本操作

    “大数据技术原理与应用”课程实验报告 题目:实验六:熟悉Hive的基本操作 姓名:小猪猪 日期:2022/5/15 1、实验环境: ...1.创建一个内部表 stocks,字段分隔符为英文逗号,表结构如下所示: stocks 表结构:

    hive-笔记--hive常用用法

    内部表和外部表,导入数据,导出数据,将数据从hive的表中导出到本地磁盘目录中,HIVE的存储文件格式,修改表的分区,多重插入,HIVE的自定义函数功能,使用explode —— 行转列,配合lateral view 列转行方便统计,...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    据格式需要指定三个属性:列分隔符(通常为空格、” t ”、” x001″)、行分隔符 (” n”)以及读取文件数据的方法( Hive 中默认有三个文件格式 TextFile , SequenceFile 以及 RCFile )。由于在加载数据的...

    hive

    hive hive hive hive hive hive hive hive hive hive hive hive

    Hive3.1.2编译源码

    使用hive3.1.2和spark3.0.0配置hive on spark的时候,发现官方下载的hive3.1.2和spark3.0.0不兼容,hive3.1.2对应的版本是spark2.3.0,而spark3.0.0对应的hadoop版本是hadoop2.6或hadoop2.7。 所以,如果想要使用高...

    hive介绍和hive环境搭建

    hive介绍和hive环境搭建。。一、 安装mysql 1. 使用root用户: su root 2. 安装 yum install mysql yum install mysql-server yum install mysql-devel(可选) 3. 修改配置信息,添加: vim /etc/my.cnf ...

    hive-jdbc hive jdbc驱动

    hive-jdbc

    Hive和Hase配置

    配置hive-0.9.0和hbase-0.94.1结合使用,部分内容如下: 1.拷贝hbase-0.94.1.jar和zookeeper-3.4.3.jar到hive/lib下。 注意:如hive/lib下已经存在这两个文件的其他版本,建议删除后使用hbase下的相关版本。 //...

    Hive使用手册Hive使用手册

    1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 3.2 删除数据库: 3 4 Hive 表相关语句 3 4.1 Hive ...

    Hive表生成工具,Hive表生成工具Hive表生成工具

    Hive表生成工具,Hive表生成工具Hive表生成工具

    presto和hive的使用区别

    Hive是把一个查询转化成多个MapReduce任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步。然而,Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中...

    hive学习和习题集

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST...

    hive练习数据和练习题及答案

    hive练习数据和hive练习题包含了hive练习数据,hive数据的建表ddl和hive练习题,非常适合做hive练习,新手培训,快速入门等; 包含以下练习: hive的group by 和集合函数 hive的Order By/Sort By/Distribute By Join...

    Hive总结.docx

    Hive原理/Hive SQL/Hive 函数/数据仓库分层和建模/Hive sql优化/数据倾斜

    Hive学习记录

    Hive学习记录,一些关于hive分桶、分区的知识。有需要自己下载。

    Hive.sql,hive的元数据

    Hive.sql

Global site tag (gtag.js) - Google Analytics