• hive建表,与插入数据


    思路,hive导入分区表,只能通过临时表导入。

    固建立临时表(不分区),导入数据到临时表,创建分区表,通过【insert 分区表 select 临时表】 导入分区表

    打开hue或者直接hive

    -----------------------------

    创建分区表

    -----------------------------

    外部表external
    以日期进行分区partitioned
    数据是以,切分的 row format
    存储格式用parquet,压缩数据,比orc差,查询一致,但是插入快(数据是textfile格式,需要通过insert parquet格式的表 select * textfile格式的表)


    CREATE external TABLE  default.ods_custom_data(
    msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string
    )
    partitioned by (data_time string)
    row format delimited fields terminated by ','
    STORED AS parquet

     

    创建临时表

    CREATE external TABLE  default.tmp_ods_custom_data(
    msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string,data_time string
    )
    row format delimited fields terminated by ','
    STORED AS textfile

    导入数据

    ----------------------------

    准备数据,这种数据是textfile格式

     这是解压后的,实际上的数据是.gz的

    1) 本地导入

     hdfs dfs -put ./000000_0.gz /user/hive/warehouse/ods_custom_data

     他就会自动识别,与下面2种方法的原理是一样,都是copy到hdfs的hive表目录下,自动识别

    进入hive命令行

    2) 本地copy

    load data local inpath '/home/hdfs/data/test.txt' into table test;

    3) hdfs上的copy

    load data inpath '/user/hive/warehouse/tmp_ods_custom_data3/000000_0.gz' overwrite into table tmp_ods_custom_data;

    检测是否导入临时表成功

    ----------------------

     

    导入分区表(静态分区方式)

    ----------------------------------

    INSERT OVERWRITE TABLE ods_custom_data partition(data_time='20220601') 

     SELECT

    msgid string,sn string,dv string,vin string,tm_c string,tm_u string,s_ac string,at_ac string,op string,ml_r string

    FROM tmp_ods_custom_data where data_time='20220601'

    注意,上面的表,有一个字段是分区字段(特殊字段),下面的表没有分区字段,所以除去分区字段,比上面的表少1个字段,不要*,否则会出现字段不匹配。select 的时候写好除了分区字段的所有字段

    补充:data_time是数据中的data_time字段具体的内容值,我导入的一批次的数据全是这个时间,防止存在脏数据,要使用查询字段限定范围。

     

    查看是否成功

    -----------------------

     

    性能对比

    -----------------------

    但是,他这个数据,压缩后,比textfile .gz的还要大一点

    parquet格式

     

    textfile的gz格式

    我不知道gz格式能不能写,因为他是gz不能分割。我觉得他比parquet慢,于是做了聚合

    parquet表,36秒

     gz,24秒反而更快

     

     我不知道gz文件能不能写,但是从查询上来看的确更快,通过mr的话.

  • 相关阅读:
    【开发工具的那些故事】Git跨代码仓库合并代码
    springboot自定义参数解析器
    idea启动tomcat报错404
    多线程怎么共用一个事务
    关于C/C++指针星号 * 的写法问题
    JVM知识总结(性能调优)
    C++ 基础与深度分析 Chapter9 序列与关联容器(容器的概述、序列容器)
    动态规划--完全背包问题1
    【ICCV】PointDC,基于深度聚类的无监督3D场景语义分割,FaceChain团队联合出品
    北理工嵩天Python语言程序设计笔记(目录)
  • 原文地址:https://blog.csdn.net/qq_38403590/article/details/126483165