Я стажер, работающий с большими данными, и это мой первый вопрос. Если я не прошу об этом, сообщите мне, как улучшить.SQL Hive: выберите (*) LIMIT 1 на основе комбинации из 3 столбцов, объединение в R, RODBC
У меня очень большая таблица, которую я просматриваю через Hive через RODBC-пакет R.
Предположим, что таблица имеет столбцы с именем A:ZZZ
.
Я хотел бы, чтобы вытащить одну строку, со всеми столбцами, для каждой уникальной комбинации 3-х колонок, скажем B, F и G.
Я побежал ниже запрос, чтобы получить все уникальные комбинации B, F и G, и пришел с чуть более 7000:
select B, F, G, count(*)
from DB.tableName
group by B, F, G;
Я сделал много исследований и обнаружил this:
SELECT * FROM T WHERE (A,B) IN (('1', '1'),('2', '2'));
я в настоящее время есть все мои комбинации B, F и G хранится в виде кадра данных в 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;'"
Пожалуйста, помогите!
Спасибо за ваше время и терпение.