三种传参:
1 hiveconf
hive --hiveconf varage=‘19’ --database test -e ‘select * from person where age=${hiveconf:varage}’;
1.1 可以传参必须用加前缀的方式取值;
1.2 可覆盖hive-site.xml(hive-default.xml)中的参数值,设置参数,会话级别:
hive --hiveconf “mapred.job.queue.name=root.default”
2 hivevar
hive --hivevar varage=‘19’ --database test -e ‘select * from person where age=${hivevar:varage}’;
取值可加前缀也可不加;
3 define
hive --define varage=‘19’ --database test -e ‘select * from person where age=${varage}’;
可简写为 -d或–d,此时不可用前缀取值如
d
e
f
i
n
e
:
v
a
r
a
g
e
;
h
i
v
e
−
−
d
v
a
r
a
g
e
=
′
1
9
′
−
−
d
a
t
a
b
a
s
e
t
e
s
t
−
e
′
s
e
l
e
c
t
∗
f
r
o
m
p
e
r
s
o
n
w
h
e
r
e
a
g
e
=
{define:varage}; hive --d varage='19' --database test -e 'select * from person where age=
define:varage;hive−−dvarage=′19′−−databasetest−e′select∗frompersonwhereage={varage}’;
两种执行命令:
hive -e
使用方法如上;
hive -f
可以跟文件,扩展名可以是.txt .sql .log .hql 。使用与-e类似,在传多个参数时,每个参数前都要加上-hiveconf,或-d,-hivevar;
hive -d name=‘tom’ -d age=‘9’ -f insert.sql
insert.sql 内容如下*,执行前可设置些参数*:
set mapreduce.job.queuename=etl;
set mapreduce.map.java.opts=-Xmx1640m -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit;
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.java.opts=-Xmx1640m -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit;
set mapreduce.reduce.memory.mb=2048;
set yarn.app.mapreduce.am.resource.mb=2048;
set yarn.app.mapreduce.am.command-opts=-Xmx1640m;
set mapred.max.split.size=1024000000;
set mapred.min.split.size.per.node=512000000;
set mapred.min.split.size.per.rack=512000000;
set mapreduce.task.io.sort.mb=200;
set hive.exec.parallel.thread.number=10;
set mapred.reduce.tasks = 314;
set mapreduce.map.memory.mb=1024;
set mapreduce.task.io.sort.factor=50;
insert into table test.person1 values(’
n
a
m
e
′
,
′
{name}','
name′,′{age}’);