Hive数据导入、sqoop数据导入导出

在进行数据统计的时候经常会遇到把HIVE中的表数据进行导入导出处理,或者是将查询结果导入到另外一个地方,一般是通过Sqoop来进行Mysql和Hdfs进行数据交互。

1、通过一个sql把算出来的结果导入到一张数据表里面,一般的做法是把数据导入到Hdfs中,然后通过和目标表建立分区,把数据load到目标表中;

如:

  

beeline -u "jdbc:hive2://test.com:10000?mapreduce.job.queuename=test" -n media-sns -e "insert overwrite directory '/user/media-sns/hive/warehouse/test/oper/$time/ac'
select concat(count(a.id),'\t','qq')  
from (select id,collect_set(stat_time) as t from t_user_timeline where stat_time<='$time' group by passport_id) as a 
where size(a.t)=1 and a.t[0]='$time' and a.passport_id like '%@qq.com';" --silent=true --outputformat=tsv --showHeader=false

上面的sql可以把计算的记过导入到hdfs中,然后通过创建关联分区联系到目标表中:

<pre name="code" class="java">beeline -u "jdbc:hive2://test.com:10000?mapreduce.job.queuename=test" -n media-sns -e"
alter table t_report  add if not exists partition(stat_time =$time,termby='qq') location '/user/media-sns/hive/warehouse/sns/operationdate/$time/qq'
" --silent=true --outputformat=tsv --showHeader=false;

这样的话就可以将查出来的记过导入到目标表中。

2、通过sqoop将Mysql中的数据导入到Hive中

方式一:

 

/opt/sqoop-1.4.4.bin__hadoop-2.0.4-alpha/bin/sqoop-import -D mapred.job.queue.name=test --connect jdbc:mysql://10.16.41.127:3306/test --username root --password root --table users --columns "id,name,age" --where "time>='$timeotherformat 00:00:00' and time<='$timeotherformat 23:59:59' and age= 24" --target-dir /user/media-sns/hive/warehouse/user/data/ -m1 --fields-terminated-by '\t' ;
将数据从mysql中导入到HDFS中
或者:

<pre name="code" class="java">/opt/sqoop-1.4.4.bin__hadoop-2.0.4-alpha/bin/sqoop-import -D mapred.job.queue.name=test --connect jdbc:mysql://10.16.41.127:3306/test --username root --password root --query "select id,name,age from users where age= 24   and time >= '$timeotherformat 00:00:00' and time <= '$timeotherformat 23:59:59' and \$CONDITIONS" --target-dir <pre name="code" class="java">/user/media-sns/hive/warehouse/user/data/ -m1 --fields-terminated-by '\t' ;

这种事通过sql在mysql中查询得到的结果导入到Hdfs中,主要在wher后面要加上\$CONDITIONS,其中的\,是如果加""转义的。

在正常开放使用的过程中, 我们一般是建一个外表,然后指定导入数据的那个文件夹,即定时往该文件夹中导入数据,这样Hive表可以及时的查阅到最新的数据。


转载于:https://my.oschina.net/u/580135/blog/612252

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sqoop是一种用于在Hadoop和关系型数据库之间传输数据的工具。要将Hive数据导入MySQL,可以使用以下步骤: 1. 确保已经安装了sqoop和MySQL驱动程序。 2. 在Hive中创建一个表,并将其导出为一个文件。例如,可以使用以下命令将Hive导出为一个CSV文件: ``` hive -e 'SELECT * FROM my_table' | sed 's/[\t]/,/g' > my_table.csv ``` 3. 使用sqoop将CSV文件导入MySQL。例如,可以使用以下命令将CSV文件导入MySQL中的一个表: ``` sqoop import --connect jdbc:mysql://localhost/my_database --username my_username --password my_password --table my_table --fields-terminated-by ',' --lines-terminated-by '\n' --input-null-string '\\N' --input-null-non-string '\\N' --delete-target-dir --target-dir /tmp/my_table --bindir /tmp/my_table/bin --outdir /tmp/my_table/out --input-fields-terminated-by ',' ``` 其中,--connect指定MySQL连接字符串,--username和--password指定MySQL用户名和密码,--table指定要导入的MySQL表名,--fields-terminated-by指定CSV文件中字段之间的分隔符,--lines-terminated-by指定CSV文件中行之间的分隔符,--input-null-string和--input-null-non-string指定CSV文件中的空值表示方式,--delete-target-dir指定在导入之前删除目标目录,--target-dir指定HDFS中的目标目录,--bindir、--outdir和--input-fields-terminated-by指定生成的Java类的位置和属性分隔符。 4. 确认数据已经成功导入MySQL中的表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值