使用变量替代在配置单元中创建表名

jxct1oxe  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(291)

我想使用变量替换在配置单元中创建一个表名。例如

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

但它失败了。你知道怎样才能做到吗?

bqjvbblv

bqjvbblv1#

应取消资格
您使用了错误的变量名

SET market=AUS; create table ${hiveconf:market}_active as select 1;
mbjcgjjk

mbjcgjjk2#

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

SET market=AUS;

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

DESCRIBE `${hiveconf:market}_active`;

从beeline运行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/
bcs8qyzn

bcs8qyzn3#

马尔科维茨的批评是正确的,但没有产生一个正确的解决办法。总之,可以使用变量替换来进行字符串比较,但不能用于命名变量和表。如果你对语言编译器和解析器了解很多,你就会明白为什么这是真的。你可以用java这样的语言来构造这样的行为,但是sql太粗糙了。
运行该代码会产生一个错误,“无法识别表名中'$'{''hiveconf'附近的输入”。(我正在运行hortonworks,hive 1.2.1000.2.5.3.0-37)。
我花了几个小时在google上搜索和试验标点符号的不同组合,以及命令行、ambari和db visualizer等各种工具,但我从未找到任何方法来构造具有可变值的表名或字段名。我认为在需要字符串文字的地方使用变量是很困难的,比如比较,但是如果有意义的话,就不能用它们来代替保留字或现有的数据结构。举例来说:
--作品
删除表(如果存在)用户\u rgksp0.foo;
--不起作用:
设置myu file\u name=user\u rgksp0.foo--删除表(如果存在)${hiveconf:my_file_name};
--作品
设置报告年=2018年;
从aaetl\u dms\u pub.dms\u stational\u events\u pub中选择count(1)作为stational\u event\u count、day、zip\u code、route\u id
其中第${hiveconf:report_year}'
--不起作用:
设置我的\u var\u name='zip\u code'
选择“计数(1)”作为“事件计数,天”${hiveconf:my_var_name}'的路由id,来自aaetl\u dms\u pub.dms\u stational\u events\u pub
其中part_year=2018年

相关问题