如何在变量中获得蜂巢输出?

Posted

技术标签:

【中文标题】如何在变量中获得蜂巢输出?【英文标题】:how to get hive output in variable? 【发布时间】:2015-03-28 09:06:52 【问题描述】:

如何将 hive 查询结果放入一个变量中?在 SQL 中,我们使用以下查询。

Declare @cnt as int Select @cnt= count(*) from tabname

@cnt 将在整个过程中使用。 我不知道如何在 HIVE 中实现相同的目标。有人可以告诉我如何在 hive 提示和 Shell 提示中实现这一点吗?

【问题讨论】:

【参考方案1】:

last_processed_time=`hive -S -e "USE db; select MAX(processed_time) from job_details where event_id = 'XXXX'"`

`echo $last_processed_time
pig -useHCatalog -Dmapred.job.queue.name=highPriority -Dtez.queue.name=highPriority -x tez -param last_processed_time=$last_processed_time test.pig`

> After executing above shell , It displays the required MAX value as
> well as pass the same value to Pig as external parameter for internal
> use within pig. Hope this will be helpful to make the same case with
> hive call using 'hiveconf'

【讨论】:

【参考方案2】:

嗯,这很简单。 在你的外壳中,

countinfo=$(hdfs dfs -cat <-directory location->) 

**hive -hivevar countNum="$countinfo" \
     -f '/Filepath/file.hql' **

在您的 file.hql 中,在您的查询中使用 $countNum

【讨论】:

你能详细说明一下语法吗?执行包含countinfo=$(hdfs dfs -cat /user/tmp) 的脚本下一行脚本hive -hivevar countNum="$countinfo" \ -f '/user/tmp/file.hql' THEN in .hql $countNum = select max(idCol) from myTable ??【参考方案3】:

没有直接的方法可以做到这一点......

    通过 shell 的一种天真的方式是:

    catchData=$(beeline/hive -u jdbc:hive2://$hiveServer2:10000 -n $userName -e "select count(*) from table")

但这并不有效,因为它甚至会打印 hive 连接语句、信息和警告语句以及数据

2。最好的方法是..

INSERT OVERWRITE DIRECTORY <-directory location->
SELECT COUNT(*) FROM TABLE

countinfo=$(hdfs dfs -cat <-directory location->)

希望这点 2 有所帮助...

【讨论】:

感谢您的回答。抱歉,我仍然不明白如何在 hiveconf 变量中获取 countinfo 值。 countinfo=$(hdfs dfs -cat ) 如何将此命令放入我的源文件(.hql)文件中。 嗯,这很简单......在你的shell中, countinfo=$(hdfs dfs -cat ) hive -hivevar countNum="$countinfo" \ -f '/ Filepath/file.hql' 在你的 file.hql 中使用这个 $countNum 在你的查询中【参考方案4】:
#!/bin/bash -e
hive -e "use schema_name; INSERT OVERWRITE DIRECTORY '/tmp/ank' row format delimited 
FIELDS TERMINATED BY ',' select * from table_name limit 1;"

a=$(hdfs dfs -cat /tmp/ank/000000_0)
echo $a

这将给出变量 a 中表的第一行的逗号分隔输出

【讨论】:

【参考方案5】:

shell脚本做起来有点难。

我可以建议你使用 Perl 脚本吗? 因为在 Perl 中它相当容易。

您可以在 Perl 脚本中这样做。

$query_total_recs ="SELECT COUNT(*) FROM table";

【讨论】:

以上是关于如何在变量中获得蜂巢输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何将猪输出存储到蜂巢表?

如何获得蜂巢中时间戳的平均差异

如何找到路径流并使用猪或蜂巢对它们进行排名?

蜂巢:如何在不更新的情况下处理 scd 类型 2

蜂巢句子功能如何打破每个句子

蜂巢解释计划生成