Hive使用中のよくある質問のまとめ(五)


尊敬する読者こんにちは:筆者は自分の文章が読めることを喜んでいますが、オリジナルと編集は容易ではありませんので、転載は本文の出所を明記し、本文の住所のハイパーリンクとブロガーのブログの住所を添付しなければなりません.https://blog.csdn.net/vensmallzeng.もし本文があなたに利益があると思ったら、またほめて励ましてください.筆者はここで読者一人一人に感謝します.筆者に連絡する必要がある場合は、メールボックスをメモしてください[email protected]あ、ご協力ありがとうございます!
 
 
 
1、hiveを利用して自分のmapを構築する
select 
mid,
hotel_type_map['1303'] as hotel_type,
    from(
    select 
    mid,str_to_map(concat_ws(',',collect_list(concat(key,":",value)))) as hotel_type_map
            from (
            select
            mid,
            key,
            concat_ws('-',collect_list(value))as value
            from
                (
                select 1 as mid,'1303' as key,'    ' as value
                union ALL
                select 1 as mid,'1305' as key,'  ' as value 
                union ALL
                select 1 as mid,'1304' as key,'   ' as value
                union ALL
                select 1 as mid,'1306' as key,'  ' as value 
                union ALL
                select 1 as mid,'682' as key,'   ' as value 
                union ALL
                select 1 as mid,'681' as key,'  ' as value 
                union ALL
                select 1 as mid,'680' as key,'  ' as value 
                union ALL
                select 1 as mid,'679' as key,'  ' as value
                ) a
            group by mid,key)t1
    group by mid) t2

2、データの傾きによる原因
①:空き値が多い(nvlでの処理も考えられる)
②:大時計join小時計ある種類のkey値が多すぎる(sparkを交換して走ることが考えられる)
③: group byの場合、あるkeyに対応するvalueが多すぎる(group byを分けてjoinで考えることができる)
3、SQLコードが走って原因を報告する
①:メモリが小さすぎる
コードの先頭に追加する必要があります
set mapreduce.reduce.memory.mb=30064;
set mapreduce.map.memory.mb=20064;
set mapred.map.child.java.opts="-Xmx10240M";
set mapred.reduce.child.java.opts="-Xmx10240M";
set mapred.child.java.opts="-Xmx10240m";
set mapred.reduce.shuffle.memory.limit.percent = 0.06;
set mapred.reduce.shuffle.input.buffer.percent = 0.1;

②:データの傾きの問題
③:コード自体に潜在的なエラーがあるか、冗長なネストが書かれている場合、このエラーが必要であり、最適化が最適化される.
④:コードは簡略化されていますが、長いので、仮表を作る考え方で計算量を減らしてみることをお勧めします.
⑤:空の値が多いフィールドには、「dense_rank()over(partition by t 3.card_number order by t 3.execute_time desc」t 3.execute_timeフィールドの空の値が多く、where条件(where executetime is not null and executetime<>')で空の値を事前にフィルタリングしてから機能関数を使用する機能関数があります.
4、「LATERAL VIEW explode」の使用
「LATERAL VIEW explode」を使用したクエリー文は、単独で書くことが望ましい.他のフィールドクエリー文と混在しないでください.そうしないと、あるフィールドが空である場合に相当します.例えば、LATERAL VIEW explode(split(substring(hotel_brand_id,2,length(hotel_brand_id)−2),',')ids as brand_id、ここにはhotelを取り除くことが含まれています.brand_idフィールドが空の場合.
 
 
 
日がたつにつれて、君と共に進み、小結を増やし、未完に続く.