Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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配置单元:基于3列的组合选择(*)限制1,R中的union,RODBC_R_Hive_Impala - Fatal编程技术网

SQL配置单元:基于3列的组合选择(*)限制1,R中的union,RODBC

SQL配置单元:基于3列的组合选择(*)限制1,R中的union,RODBC,r,hive,impala,R,Hive,Impala,我是一名大数据实习生,这是我的第一个问题。如果我问得不好,请让我知道如何改进 我有一个非常大的表,我正在通过Hive通过R的RODBC包查询它 假设表中有名为A:ZZZ的列 我想为3列的每一个唯一组合提取一行和所有列,比如说B、F和G 我运行了下面的查询,以获得B、F和G的所有唯一组合,并得出了略多于7000个: select B, F, G, count(*) from DB.tableName group by B, F, G; 我做了很多研究,发现: 目前,我将B、F和G的所有组合存储

我是一名大数据实习生,这是我的第一个问题。如果我问得不好,请让我知道如何改进

我有一个非常大的表,我正在通过Hive通过R的RODBC包查询它

假设表中有名为
A:ZZZ
的列

我想为3列的每一个唯一组合提取一行和所有列,比如说BFG

我运行了下面的查询,以获得B、F和G的所有唯一组合,并得出了略多于7000个:

select B, F, G, count(*)
from DB.tableName
group by B, F, G; 
我做了很多研究,发现:

目前,我将BFG的所有组合存储为R中的数据帧。我认为,如果我可以将组合的数据帧转换为我命名为
TestVector
的向量,我可以尝试以下方法:

SELECT * FROM DB.Table WHERE (B,F,G) IN TestVector LIMIT 1; 
但我遇到了这些错误,不知道如何修复语法:

[1] "HY000 110 [Cloudera][ImpalaODBC] (110) Error while executing a query in Impala: [HY000] : AnalysisException: Syntax error in line 5:\n              (B, F, G)\n                    ^\nEncountered: COMMA\nExpected: AND, BETWEEN, DIV, IN, IS, LIKE, NOT, OR, REGEXP, RLIKE\n\nCAUSED BY: Exception: Syntax error\n"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select *\n              from \n              DB.table \n              WHERE \n              (B, F, G)\n              IN (vectorTest)\n              LIMIT 1;'" 
请帮忙

谢谢你的时间和耐心

我想为每一个独特的元素提取一行,所有列 三列的组合,比如B、F和G

这样的查询通常使用
row\u number
枚举组中的每一行并选择具有特定行号的行来解决

select * from (
  select * , 
    row_number() over (partition by B, F, G order by id) rn
  from DB.tableName
) t where rn = 1
上面的查询将为每个
B、F、G
组选择
id
最低的行

select * from (
  select * , 
    row_number() over (partition by B, F, G order by id) rn
  from DB.tableName
) t where rn = 1