使用变量替换在Hive中创建表名

时间:2017-09-21 08:20:34

标签: hive

我想使用变量替换在Hive中创建表名。 E.g。

SET market = "AUS";
create table ${hiveconf:market_cd}_active as ... ;

但它失败了。知道如何实现它吗?

3 个答案:

答案 0 :(得分:0)

  1. 应删除资格
  2. 您使用了错误的变量名称
  3. SET market=AUS; create table ${hiveconf:market}_active as select 1;
    

答案 1 :(得分:0)

马尔科维茨的批评是正确的,但没有提出正确的解决方案。总之,可以将变量替换用于字符串比较之类的操作,但不能用于变量和表的命名之类的操作。如果您对语言编译器和解析器了解很多,那么您就会了解为什么这是正确的。您可以使用Java之类的语言来构造这种行为,但是SQL太粗糙了。

运行该代码会产生错误,“无法识别表名中'$''{''hiveconf'附近的输入”。(我正在运行Hortonworks,Hive 1.2.1000.2.5.3.0-37)。

我花了几个小时在Google上进行搜索,并尝试使用标点符号的不同组合,命令行,Ambari和DB Visualizer等不同的工具,但我从未找到用表名或字段名构建表的方法。可变值。我认为您一直在需要字符串文字的地方使用变量,例如比较,但是如果可以的话,您不能在保留字或现有数据结构的地方使用变量。例如:

-工作

删除表(如果存在)user_rgksp0.foo;

-不起作用:

设置MY_FILE_NAME = user_rgksp0.foo; --drop表是否存在$ {hiveconf:MY_FILE_NAME};

-有效

设置REPORT_YEAR = 2018;

从aaetl_dms_pub.dms_stationary_events_pub中选择count(1)作为static_event_count,日期,邮政编码,route_id

其中part_year ='$ {hiveconf:REPORT_YEAR}'

-不起作用:

设置MY_VAR_NAME =“邮政编码”

从aaetl_dms_pub.dms_stationary_events_pub中选择count(1)作为“ static_event_count”,“ day”,“ $ {hiveconf:MY_VAR_NAME}”,route_id

其中part_year = 2018

答案 2 :(得分:0)

您应该使用backtric(``)作为名称,例如:

SET market=AUS;

CREATE TABLE `${hiveconf:market}_active` AS SELECT 1;

DESCRIBE `${hiveconf:market}_active`;

示例从直线上运行script.sql:

$ beeline -u jdbc:hive2://localhost:10000/ -n hadoop -f script.sql
Connecting to jdbc:hive2://localhost:10000/
...
0: jdbc:hive2://localhost:10000/> SET market=AUS;
No rows affected (0.057 seconds)
0: jdbc:hive2://localhost:10000/> CREATE TABLE `${hiveconf:market}_active` AS SELECT 1;
...
INFO  : Dag name: CREATE TABLE `AUS_active` AS SELECT 1(Stage-1)
...
INFO  : OK
No rows affected (12.402 seconds)
0: jdbc:hive2://localhost:10000/> DESCRIBE `${hiveconf:market}_active`;
...
INFO  : Executing command(queryId=hive_20190801194250_1a57e6ec-25e7-474d-b31d-24026f171089): DESCRIBE `AUS_active`
...
INFO  : OK
+-----------+------------+----------+
| col_name  | data_type  | comment  |
+-----------+------------+----------+
| _c0       | int        |          |
+-----------+------------+----------+
1 row selected (0.132 seconds)
0: jdbc:hive2://localhost:10000/> Closing: 0: jdbc:hive2://localhost:10000/