analyse du champ JSON de la ruche

        Lors de l'écriture de Hive SQL, vous devez analyser plusieurs informations clés à partir d'une colonne json. Vous pouvez utiliser get_json_object ou json_tuple.

1. get_json_object()

        Il s'agit d'un UDF. L'opération d'obtention et d'analyse de json est complétée lors de la projection de colonnes dans l'étape Mapper. Si plusieurs clés doivent être obtenues, le champ json doit être analysé plusieurs fois ! Mais il est plus couramment utilisé .

select get_json_object(msg, '$.A') as A
,get_json_object(msg, '$.B') as B
,get_json_object(msg, '$.C') as C
,dt
from test.table_name
where dt='2023-03-01'
and tag='msg_info'
;

2. json_tuple()

        Dans Hive, il est implémenté en utilisant UDTF, c'est-à-dire qu'une ligne ordinaire est convertie en plusieurs lignes . Il générera deux opérations de sélection d'opérateur, l'une analyse les données qui n'ont pas besoin d'être analysées et génère une ligne, et l'autre analyse les données qui doivent être analysées et les analyse , puis utilise l'opération d'opérateur de jointure de vue latérale pour rejoindre les deux parties des données. Mais la jointure ici ne déclenche pas réellement la jointure de Shuffle, elle connecte simplement les champs non UDTF et UDTF ensemble via addAll() d'ArrayList.

select A,B,C,dt
from (
    select *
    from test.table_name t1
    lateral view json_tuple(message, 'A','B','C') t2 as A,B,C
    where dt='2023-03-01'
    and tag='msg_info'
) t
;

Conclusion du test personnel :

Lorsque json_tuple analyse un grand nombre de clés         du champ json (plus de 50 clés), les performances sont supérieures à celles de get_json_object ! Sinon, les performances ne sont pas optimistes. 

Guess you like

Origin blog.csdn.net/MusicDancing/article/details/130080093