是否可以选择从 Hive 中的哪个数据库中选择
Posted
技术标签:
【中文标题】是否可以选择从 Hive 中的哪个数据库中选择【英文标题】:Is it possible to choose to select from which database in Hive 【发布时间】:2019-11-25 19:47:42 【问题描述】:我有一个表,但在两个不同的数据库中。如何根据某些标志查询以仅从其中一个中选择?
例如:
insert into db2.table2
select * from db1.table1 if flag is true else select * from db2.table
这个 sudo 查询对应的查询(有效)是什么?
【问题讨论】:
该标志应该通过两个布尔标志的按位与来计算。 HiveQL 不是过程语言。使用shell/python/Java等。也看看这个:hplsql.org/doc 我找到的解决方案是在 hive 中使用 IF THEN;在 IF 语句中,我可以检查在运行时通过某些配置/属性设置的标志。 【参考方案1】:你可以使用shell传递数据库参数
#!/bin/bash
#calculate database as you want here
db=db1
#substitute variable and execute
hive -e "insert into db2.table2
select * from $db.table1"
你可以在 Hive 中使用 UNION ALL 做类似的事情,虽然它不是有效的方法:
INSERT OVERWRITE TABLE OUTPUT_TABLE
SELECT * FROM DB1.TABLE1 WHERE ($FLAG_one = TRUE) --any boolean condition
UNION ALL
SELECT * FROM DB2.TABLE1 WHERE ($FLAG_one = FALSE) --any boolean condition
【讨论】:
我希望在 hive 查询本身内部具有这种灵活性,然后从外部设置一个标志来决定从哪个数据库中进行选择。【参考方案2】: INPUT_DATABASE = db1
IF FLAG_one = TRUE and FLAG_two = FALSE THEN INPUT_DATABASE = db2
INSERT OVERWRITE TABLE OUTPUT_DATABASE.TABLE_ONE
SELECT * FROM INPUT_DATABASE.TABLE_TWO
【讨论】:
是 hpl/sql 还是什么? INPUT_DATABASE、OUTPUT_DATABASE、FLAG_one 和 FLAG_two 都在属性文件中。我们不能使用 IF THEN 或 CASE 语句吗? folkstalk.com/2011/11/conditional-functions-in-hive.html 这在 Hive 中不起作用。条件函数可以用在select中,可惜不像你贴的。 HiveQL 不是过程语言 我明白了。我会改写成条件语句在select中的方式? 现在我明白你想要什么了。在我的回答中使用 UNION ALL + WHERE 条件(它可以是你的标志检查)以上是关于是否可以选择从 Hive 中的哪个数据库中选择的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在选择完成之前设置列别名,使用 Linq to SQL
HIVE SQL:从庞大的数据库中仅选择一个值的最快方法是啥