sql配置单元:基于3列的组合选择(*)限制1、r中的并集、rodbc

5f0d552i  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(274)

我是一名从事大数据工作的实习生,这是我的第一个问题。如果我问得不好,请告诉我如何改进。
我有一个非常大的表,我正在通过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;

我做了很多研究发现:

SELECT * FROM T WHERE (A,B) IN (('1', '1'),('2', '2'));

我现在把所有的b,f和g的组合作为一个Dataframe存储在r中。我想如果我能把组合的Dataframe转换成一个我命名的向量 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;'"

请帮帮我!
谢谢你的时间和耐心。

ax6ht2ek

ax6ht2ek1#

我想为3列的每一个唯一组合,比如b、f和g,拉一行,所有列。
这样的查询通常使用 row_number 枚举组中的每一行并选择具有特定行号的行。

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

上面的查询将选取具有最低值的行 id 对于每个 B,F,G 组。

相关问题