use emr_doppler_v1;

set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.memory.mb=3072;
set hive.map.aggr = true;
set hive.optimize.skewjoin=true;

DROP TABLE IF EXISTS player_checkpoint_${date_str_undline};
CREATE external TABLE IF NOT EXISTS player_checkpoint_${date_str_undline}
(
    game_id                int,
    checkpoint             date,
    player_id              string,
    user_id                string,
    is_payer               boolean,
    is_day_payer           boolean,
    first_payed            date,
    installed              date,
    install_publisher      string,
    install_site           string,
    install_campaign       string,
    install_adgroup        string,
    install_ad             string,
    install_keyword        string,
    is_acquired            boolean,
    revenue                float,
    count_transaction_num  int,
    min_transaction_num    int,
    max_transaction_num    int,
    country_code           string,
    facebook_id            string,
    ios_id                 string,
    ios_idfa               string,
    ios_idfv               string,
    android_id             string,
    google_aid             string,
    googleplus_id          string,
    is_ad_tracking_limited boolean,
    is_logged_gamecenter   boolean,
    is_logged_googleplay   boolean,
    gender                 string,
    birth_year             string,
    sdk_version            string,
    engine_version         string,
    os_version             string,
    manufacturer           string,
    device                 string,
    platform               string,
    build                  string,
    connection_type        string,
    is_jailbroken          boolean,
    count_session_length   int,
    min_session_length     int,
    max_session_length     int,
    sum_session_length     int,
    sum2_session_length    bigint,
    min_session_num        int,
    max_session_num        int,
    count_event            int,
    count_transaction      int,
    count_debug_error      int,
    count_info_error       int,
    count_warning_error    int,
    count_error_error      int,
    count_critical_error   int
) row format delimited fields terminated by '|'
    location 's3://mob-emr-test/dataplatform/emr/${prefix}/player_checkpoint/';

INSERT overwrite table tmp_full
select coalesce(a.game_id, b.game_id, c.game_id, d.game_id, e.game_id)           as game_id,
       coalesce(a.player_id, b.player_id, c.player_id, d.player_id, e.player_id) as player_id,
       a.count_transaction                                                       as count_transaction,
       a.is_day_payer                                                            as is_day_payer,
       b.count_transaction_num                                                   as count_transaction_num,
       c.min_transaction_num                                                     as min_transaction_num,
       c.max_transaction_num                                                     as max_transaction_num,
       c.first_payed                                                             as first_payed,
       d.is_payer                                                                as is_payer,
       e.count_debug_error                                                       as count_debug_error,
       e.count_info_error                                                        as count_info_error,
       e.count_warning_error                                                     as count_warning_error,
       e.count_error_error                                                       as count_error_error,
       e.count_critical_error                                                    as count_critical_error
from dim_player_count_transaction a
         full join dim_player_count_transaction_num b on (a.game_id = b.game_id and a.player_id = b.player_id)
         full join dim_player_min_transaction_num c
                   on (coalesce(a.game_id, b.game_id) = c.game_id and coalesce(a.player_id, b.player_id) = c.player_id)
         full join dim_player_is_payer d on (coalesce(a.game_id, b.game_id, c.game_id) = d.game_id and
                                             coalesce(a.player_id, b.player_id, c.player_id) = d.player_id)
         full join dim_player_error_counts e on (coalesce(a.game_id, b.game_id, c.game_id, d.game_id) = e.game_id and
                                                 coalesce(a.player_id, b.player_id, c.player_id, d.player_id) =
                                                 e.player_id);

insert overwrite table player_checkpoint_${date_str_undline}
select pc.game_id,
       pc.checkpoint,
       pc.player_id,
       pc.user_id,
       x.is_payer,
       x.is_day_payer,
       x.first_payed,
       pc.installed,
       pc.install_publisher,
       pc.install_site,
       pc.install_campaign,
       pc.install_adgroup,
       pc.install_ad,
       pc.install_keyword,
       pc.is_acquired,
       z.revenue,
       x.count_transaction_num,
       x.min_transaction_num,
       x.max_transaction_num,
       pc.country_code,
       pc.facebook_id,
       pc.ios_id,
       pc.ios_idfa,
       pc.ios_idfv,
       pc.android_id,
       pc.google_aid,
       pc.googleplus_id,
       pc.is_ad_tracking_limited,
       pc.is_logged_gamecenter,
       pc.is_logged_googleplay,
       pc.gender,
       pc.birth_year,
       pc.sdk_version,
       pc.engine_version,
       substr(pc.os_version, 1, 30) os_version,
       pc.manufacturer,
       substr(pc.device, 1, 64)     device,
       pc.platform,
       substr(pc.build, 1, 64)      build,
       pc.connection_type,
       pc.is_jailbroken,
       y.count_session_length,
       y.min_session_length,
       y.max_session_length,
       y.sum_session_length,
       y.sum2_session_length,
       y.min_session_num,
       y.max_session_num,
       pc.count_event,
       x.count_transaction,
       x.count_debug_error,
       x.count_info_error,
       x.count_warning_error,
       x.count_error_error,
       x.count_critical_error
FROM dim_pc_more_tmp pc
         full join tmp_full x on (pc.game_id = x.game_id and pc.player_id = x.player_id)
         full join dim_player_session y on (coalesce(pc.game_id, x.game_id) = y.game_id and
                                            coalesce(pc.player_id, x.player_id) = y.player_id)
         full join dim_player_revenue z on (coalesce(pc.game_id, x.game_id, y.game_id) = z.game_id
    and coalesce(pc.player_id, x.player_id, y.player_id) = z.player_id and pc.checkpoint = z.checkpoint);

DROP TABLE IF EXISTS revenue_${date_str_undline_old};
DROP TABLE IF EXISTS player_checkpoint_${date_str_undline_old};
DROP TABLE IF EXISTS payment_checkpoint_${date_str_undline_old};
DROP TABLE IF EXISTS progression_checkpoint_${date_str_undline_old};
DROP TABLE IF EXISTS session_checkpoint_${date_str_undline_old};
DROP table IF EXISTS mv_export_${date_str_undline_old};
drop table IF EXISTS exchange_rate_${date_str_undline_old};
drop table IF EXISTS payment_checkpoint_${date_str_undline}_tmp;
DROP table IF EXISTS emr_doppler_v1.event_${date_str_undline_old};