Syntax 蜂巢语法:花括号和美元符号的用途

Syntax 蜂巢语法:花括号和美元符号的用途,syntax,hive,Syntax,Hive,我正在阅读我公司另一个团队的一些配置单元脚本,但很难理解其中的特定部分。所讨论的部分是:其中dt='${product_dt}',可以在下面代码块底部的第三行找到 我以前从未见过这种语法,也无法通过谷歌搜索找到任何东西(可能是因为我不知道要使用的正确搜索词)。如能深入了解行过滤器步骤的作用,将不胜感激 set hive.security.authorization.enabled=false; add jar /opt/mobiletl/prod_workflow_dir/lib/hiveudf

我正在阅读我公司另一个团队的一些配置单元脚本,但很难理解其中的特定部分。所讨论的部分是:
其中dt='${product_dt}'
,可以在下面代码块底部的第三行找到

我以前从未见过这种语法,也无法通过谷歌搜索找到任何东西(可能是因为我不知道要使用的正确搜索词)。如能深入了解
行过滤器步骤的作用,将不胜感激

set hive.security.authorization.enabled=false;
add jar /opt/mobiletl/prod_workflow_dir/lib/hiveudf_hash.jar;
create temporary function hash_string as 'HashString';

drop table 00_truthset_product_email_uid_pid;
create table 00_truthset_product_email_uid_pid as
select distinct email,        
       concat_ws('|', hash_string(lower(email), "SHA-1"),
                      hash_string(lower(email), "MD5"),
                      hash_string(upper(email), "SHA-1"),
                      hash_string(upper(email), "MD5")) as hashed_email,
       uid, address_id, confidencescore
from product.prod_vintages
where dt='${product_dt}'
      and email is not null and email != ''
      and address_id is not null and address_id != '';
我试过
set product\u dt=2014-12,但似乎不起作用:

hive> SELECT dt FROM enabilink.prod_vintages GROUP BY dt LIMIT 10;
. . .
dt
2014-12
2015-01
2015-02
2015-03
2015-05
2015-07
2015-10
2016-01
2016-02
2016-03

hive> set product_dt = 2014-12;

hive> SELECT email FROM product.prod_vintages WHERE dt='${product_dt}';
. . .
Total MapReduce CPU Time Spent: 2 seconds 570 msec
OK
email
Time taken: 25.801 seconds

这些是配置单元中设置的变量。如果在查询之前(在同一会话中)设置了变量,配置单元将用指定的值替换它

比如说

set product_dt=03-11-2012
编辑
确保删除dt字段中的空格(使用trim UDF)。另外,设置不带空格的变量。

我试过了(如上面更新的帖子所示),但是查询结果显示为空,尽管确实有行满足
product\u dt
的要求。我做错什么了吗?你能试一下设置产品吗;我不确定蜂巢是否移除了枕边的空间,或者在两侧都应用了修剪版本,它应该会起作用:pDidn不起作用。我尝试了许多排列,包括一个前后没有空格的排列。从product.prod_vintages中选择电子邮件,${product_dt},其中dt='2014-12'限制为2。运行它并让我们知道结果。请记住,您已在同一配置单元会话中运行set命令。..
${product_dt}
是脚本中使用的变量。您可以使用!echo${product_dt}打印其值。尝试使用TO_DATE(“DATE”)进行比较。@AshishSingh好的,我确实
显示表格
,并查看表格:
产品\u 20161029
。我尝试:
设置prod_dt=20161029
然后
描述产品${prod_dt}
,但什么也得不到。我试试
!echo${prod_dt}
并获取
${prod_dt}
。尝试使用
dt=(从unix\u unixtime(unix\u timestamp(${product\u dt},'yyyyymmdd'),'yyyyy-MM'))
进行比较。我的问题实际上是上面的代码如何工作,而不是如何更改它。