Несоответствие типов аргументов в действии улья через OOZIE - PullRequest
1 голос
/ 07 июня 2019

Я запускаю действие улья в oozie, где скрипт hive.sql имеет нижеупомянутый запрос улья.

Повестка дня:

  1. Цель - вставить результатэтот запрос в hive интегрированную таблицу hbase, где основной целью является получение последней метки времени через столбец транзакции.

  2. Однако, когда я выполняю тот же запрос с помощью действия куста в OOZIE, он завершается с

сообщение об ошибке:

org.apache.hadoop.hive.ql.parse.SemanticException: Строка 0: -1 Несоответствие типа аргумента 'строки': 1-йожидается, что аргумент EQUAL относится к примитивному типу, но список найден

Похоже, переменная, определенная в UDF, здесь не ожидается, однако ожидается примитивный тип.

Когда я запускаю этот запрос вручную в оболочке куста, он отлично работает.

    insert overwrite table hive_lookup_hbase

    Select lookup.card_id, lookup.UCL, lookup.postcode, lookup.transaction_dt,lookup.score
    from
    (
    SELECT ct.card_id, row_number() over ( partition by ct.card_id order by ct.transaction_dt desc ) rows,
    ct.postcode , ct.member_id, ct.transaction_dt, ms.score, c_u_look.UCL
    FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look 
         join member_score ms on c_u_look.card_id=ct.card_id and ms.member_id=ct.member_id
    )lookup

    where rows=1;

Поскольку он работает с оболочкой улья, необходимо знать, какие изменения я могу внести, чтобы он работал с oozie.

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Проблема была исправлена ​​установкой set hive.auto.convert.join = false в скрипте улья. Это в основном отключает оптимизацию, выполненную OOZIE, я думал, эта опция была отключена по умолчанию.

0 голосов
/ 08 июня 2019

Я не уверен, что это ответственность за исключение, но очевидно, что соединение без условия ON - это плохо, потому что это CROSS JOIN.Кажется, условие ON для первого соединения не там, где оно должно быть.Так должно быть, не так ли?

FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look on c_u_look.card_id=ct.card_id
         join member_score   ms       on ms.member_id=ct.member_id

не так:

FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look 
         join member_score   ms on c_u_look.card_id=ct.card_id and ms.member_id=ct.member_id
...