Невозможно привести создание поля к bigint. - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь объединить несколько таблиц, и некоторые из этих полей имеют тип массива bigint.Когда я пытаюсь привести их в Hive, он продолжает выдавать мне «Выражение не в ключе GROUP BY 'field_name'.

Мой код выглядит следующим образом:

    CREATE TABLE sample_table stored AS avro AS 
    SELECT cast(cast(rand()* 1000000000000000000 AS BIGINT) AS string)        id, 
           'PERSON'AS person, 
           name AS name, 
           age AS age, 
           gender AS gender
FROM   table_a
UNION ALL 
SELECT cast(cast(rand()* 1000000000000000000 AS BIGINT) AS string)    id,  
          'PERSON'AS person, 
           name AS name, 
           collect_list(
    CAST(NULL AS BIGINT)
  ) AS age, 
           null AS gender
FROM   table_b

Генерируемая ошибкавыглядит следующим образом:

Ошибка SQL [500051] [HY000]: [Cloudera] HiveJDBCDriver Ошибка обработки запроса / оператора. Код ошибки: 10025, состояние SQL: TStatus (statusCode: ERROR_STATUS, infoMessages: [*org.apache.hive.service.cli.HiveSQLException: ошибка при компиляции оператора: СБОЙ: SemanticException [Ошибка 10025]: Строка 4: 7 Выражение отсутствует в ключе GROUP BY 'age': 28: 27, org.apache.hive.service.cli.operation.Operation: toSQLException: Operation.java: 400, org.apache.hive.service.cli.operation.SQLOperation: prepare: SQLOperation.java: 187

1 Ответ

1 голос
/ 24 июня 2019

collect_list - функция агрегирования.Вам нужно group by каждое непостоянное поле.

SELECT cast(cast(rand()* 1000000000000000000 AS BIGINT) AS string)    id,  
          'PERSON'AS person, 
           name, 
           collect_list(CAST(NULL AS BIGINT)) AS age, 
           null AS gender
FROM   table_b
group by cast(cast(rand()* 1000000000000000000 AS BIGINT) AS string), name 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...