Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 配置单元:根据特定列中的唯一值填充其他列_Sql_Hive - Fatal编程技术网

Sql 配置单元:根据特定列中的唯一值填充其他列

Sql 配置单元:根据特定列中的唯一值填充其他列,sql,hive,Sql,Hive,我在蜂箱中有两张桌子,如下所述 表1: id name value 1 abc stack 3 abc overflow 4 abc foo 6 abc bar 表2: id name value 5 xyz overflow 9 xyz stackoverflow 3 xyz foo 23 xyz bar 我需要在不考虑id和name列的情况下计算count of value列 预期产量为

我在蜂箱中有两张桌子,如下所述

表1:

id   name value
1    abc  stack
3    abc  overflow
4    abc  foo
6    abc  bar
表2:

id   name value       
5    xyz  overflow       
9    xyz  stackoverflow 
3    xyz  foo
23   xyz  bar
我需要在不考虑id和name列的情况下计算count of value列

预期产量为

id name value
1  abc  stack
9  xyz  stackoverflow
我试过了,在其他数据库中也能用,但在hive中不行

select id,name,value from
 (SELECT id,name,value FROM table1  
   UNION ALL 
  SELECT id,name,value FROM table2) t 
 group by value having count(value) = 1;
Hive需要下面提到的GROUPBY子句

select id,name,value from
  (SELECT id,name,value FROM table1  
    UNION ALL 
  SELECT id,name,value FROM table2) t 
 group by id,name,value having count(value) = 1;
并给出了输出

id   name value
1    abc  stack
3    abc  overflow
4    abc  foo
6    abc  bar
5    xyz  overflow       
9    xyz  stackoverflow 
3    xyz  foo
23   xyz  bar
我们必须给出在select子句中使用的组中的所有列。但当我给出时,它考虑了所有列,结果与预期不同。

您可以在下面尝试-

seELECT id,name,value FROM table1 a left join table2 b on a.value=b.value
where b.value is null
UNION ALL SELECT 
seELECT id,name,value FROM table2 a left join table1 b on a.value=b.value
where b.value is null

计算(按值分区)上的分析计数(*)。 使用数据示例进行测试:

with 

table1 as (
select stack (4,
              1,'abc','stack',
              3,'abc','overflow',
              4,'abc','foo',
              6,'abc','bar'
             ) as (id, name, value)
),

table2 as (
select stack (4,
              5,  'xyz','overflow',      
              9,  'xyz','stackoverflow',
              3,  'xyz','foo',
              23, 'xyz','bar'
             ) as (id, name, value)
)

select id, name, value
from(
select id, name, value, count(*) over(partition by value) value_cnt
 from
(SELECT id,name,value FROM table1  
  UNION ALL 
 SELECT id,name,value FROM table2) s
)s where value_cnt=1;
结果:

OK
id      name    value
1       abc     stack
9       xyz     stackoverflow
Time taken: 55.423 seconds, Fetched: 2 row(s)

工作,但如果我们是动态形成任何列,那么它是失败的。