2015-04-22 11 views
14

Ho aggiornato la versione hive da 0.20 a 0.13.1.Errore durante l'utilizzo della sintassi json_tuple nello script hive

Sto usando la seguente tabella e le query per estrarre JSON da S3.

Tabella:

> CREATE EXTERNAL TABLE in_app_logs (
    > event string, 
    > app_id string, 
    > idfa string, 
    > idfv string 
    >)ROW FORMAT DELIMITED 
    > FIELDS TERMINATED BY '\t' 
    > LOCATION 's3://test/in_app_logs/ds=2015-04-20/'; 

mia domanda Osserva i simili il seguente per la versione 0.20 e che sta funzionando bene con la vecchia versione.

SELECT 
     get_json_object(in_app_logs.event, '$.ev') as event_type, 
     get_json_object(in_app_logs.event, '$.global.app_id') as app_id, 
     get_json_object(in_app_logs.event, '$.global.ios.idfa') as idfa, 
     get_json_object(in_app_logs.event, '$.global.ios.idfv') as idfv 
    FROM in_app_logs; 

Nella nuova versione è cambiato a json_tuple. Ho provato questa query nella versione aggiornata. Trovato errore.

SELECT b.event_type, c.app_id, d.idfa, d.idfv 
FROM in_app_logs a 
LATERAL VIEW json_tuple(a.event, 'ev') b as event_type, 
LATERAL VIEW json_tuple(a.event.global, 'app_id') c as app_id, 
LATERAL VIEW json_tuple(a.event.global.ios, 'idfa', 'idfv') d as idfa, idfv 

registri S3:

{ 
     "installed_at": "2015-04-17T12:10:24Z", 
     "ev": "event_install", 
     "global": { 
     "ios": { 
      "idfv": "887DF776-C1FC-4567-DESF-741AC72197D1", 
      "time_zone": "EDT", 
      "model": "iPhone7,2", 
      "screen_size": "320x568", 
      "carrier": "AT&T", 
      "language": "en", 
      "idfa": "CD04291C-0D80-4377-6CS9-B46089A05F15", 
      "os_version": "8.2.0", 
      "country": "US" 
     } 

qualcuno mi può aiutare per estrarre i dati JSON?

+1

Avete un esempio di output da vecchia versione. Puoi condividere l'errore/log che stai ottenendo? Qual è il formato del file, è il file .json. –

+0

Quale errore? Pls aggiungere al post. – javadba

risposta

1

Il "." l'operatore è supportato solo per le strutture o l'elenco di strutture. Stai provando ad applicarlo su un tipo STRING.

probabilmente avete bisogno di qualcosa di simile:

SELECT x.event_type, x.app_id, x.idfa, x.idfv 
FROM in_app_logs a 
LATERAL VIEW JSON_TUPLE(
    a.event, 
    'ev', 
    'global.app_id', 
    'global.ios.idfa', 
    'global.ios.idfv' 
) x AS event_type, app_id, idfa, idfv 
Problemi correlati