暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hive实战

数据与共享 2023-06-25
198
问题描述:

从基础用户表中随机取出10万基础用户的id和phone号码,然后关联大数据中心的十几张表,取出其匹配数据,每一个表对应一个文件,并且将文件从hdfs导出到本地系统,很简单的一个提数操作,做的时候却遇到许多坑。

问题处理:

1.创建临时表 temp_users
    create table temp_users(
    id string
    phone string ) row format dellimited fields terminated by ',' stored as textfile;
    2. 从基础用户表随机取出10万用户
      insert  into table temp_users 
      select id,phone from userinfos where partion_flag= '201218' order by rand() limit 100000;
      3.在hdfs系统创建目录
        # 列出hadoop所有的文件目录:
        hadoop fs -ls /


        # 选择一个有权限的目录
        hadoop fs -mkdir /tom/jerry

        4.sql语句的方式导入到hdfs文件系统

          # 将执行结果存放到tom/jerry目录下
          # 数据表:message_info1(系统自动生成) 


          insert overwrite directory '/tom/jerry/message_info1'
          row format delimited fieldss terminated by ','
          selet a.id ,b.* from temp_users a
          left join message_info1 b on a.id=b.id;

          5.将文件导出到本地文件系统

            # 格式:
            hadoop fs -cat  hdfs文件目录   本地目录
            hadoop fs -cat /tom/jerry/message_info1/*  /glove/message/msg_info1
            # 注意:msg_info1目录自动生成。

            6.批量执行十几张表

              1.将要操作的所有表名写入文件:/temp/tab_name.txt


              2.执行下列脚本:test.sh


              cat /temp/tab_name.txt |  while read i
              do
              beeline -e "
              insert overwrite directory '/tom/jerry/${i}'
              row format delimited fieldss terminated by ','
              selet a.id, b.* from temp_users a
              left join (sleect *from ${i} where partion_flag= '201218') b
              on a.id=b.id;"
              sleep 2
              hadoop fs -cat /tom/jerry/s{i}/* > /glove/message/s{i}
              wait
              done


              ##  '>'重定向符号,将${i}/*下的文件进行整合


              *欢迎关注*




              文章转载自数据与共享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论