KA 接口表
一、建表
1、年日均销量表
drop table app.app_basic_dashboard_goods_avg_year_sellnum;
CREATE TABLE app.app_basic_dashboard_goods_avg_year_sellnum (
seller_id bigint COMMENT '商家id',
seller_name string COMMENT '商家名称',
dept_id bigint COMMENT '事业部门id',
dept_name string COMMENT '事业部名字',
warehouse_id bigint COMMENT '入仓id',
warehouse_name string COMMENT '入仓名称',
goods_id bigint COMMENT '商品id',
goods_no string COMMENT '商品序号',
goods_name string COMMENT '商品名称',
avg_year_sellnum float COMMENT '年日均销量',
yn int COMMENT '删除标识 1为没删,0为删除',
create_pin string COMMENT '创建人',
update_pin string COMMENT '更新人',
create_time timestamp COMMENT '创建时间',
update_time timestamp COMMENT '更新时间',
ts timestamp COMMENT '时间戳')
COMMENT 'KA商品销量预测年日均销量'
PARTITIONED BY (
dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
2、商家参数表
CREATE EXTERNAL TABLE `app_basic_dashboard_goods_seller`(
`seller_id` string COMMENT '商家id',
`seller_no` string COMMENT '商家编号',
`seller_name` string COMMENT '商家名称',
`dept_id` string COMMENT '部门id',
`dept_no` string COMMENT '部门编号',
`vlt` string COMMENT 'VLT',
`alt` string COMMENT 'ALT',
`satisfyAlpha` string COMMENT '出仓服务水平C',
`safetyDays` int COMMENT '安全库存天数',
`targetDays` int COMMENT '目标库存天数',
`bp` string COMMENT 'BP',
`task_exec_date` string COMMENT '任务执行时的时间,保存格式为:2018-03-31',
`yn` string COMMENT '删除标识 1为没删,0为删除',
`create_time` timestamp COMMENT '创建时间',
`create_pin` string COMMENT '创建人',
`update_pin` string COMMENT '更新人',
`update_time` timestamp COMMENT '更新时间',
`ts` timestamp COMMENT '时间戳')
COMMENT '商家表'
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
3、KA 临时中转表
drop table app.app_basic_dashboard_goods_sale_predict_daily_tem;
CREATE TABLE app.app_basic_dashboard_goods_sale_predict_daily_tem (
seller_id bigint COMMENT '商家id',
seller_name string COMMENT '商家名称',
dept_id bigint COMMENT '事业部门id',
dept_no string COMMENT '事业部门编号',
dept_name string COMMENT '事业部名字',
goods_id bigint COMMENT '商品id',
goods_no string COMMENT '商品序号',
goods_name string COMMENT '商品名称',
warehouse_id bigint COMMENT '入仓id',
warehouse_no string COMMENT '入仓编号',
warehouse_name string COMMENT '入仓名称',
in_warehouse_city string COMMENT '入仓城市',
satisfy_alpha string COMMENT '入仓服务水平C',
safe_stock_days string COMMENT '安全库存天数',
alt string COMMENT '出仓ALT',
vlt string COMMENT '出仓VLT',
in_stock_safety_num int COMMENT '安全库存',
target_stock_days string COMMENT '目标库存天数',
bp string COMMENT 'BP',
out_warehouse_no string COMMENT '出仓编号',
out_warehouse_name string COMMENT '出仓名称',
out_warehouse_city string COMMENT '出仓城市',
in_stock_max_num int COMMENT '目标库存',
bef_sales_1d string COMMENT 'T-1日销量',
bef_sales_2d string COMMENT 'T-2日销量',
bef_sales_3d string COMMENT 'T-3日销量',
bef_sales_4d string COMMENT 'T-4日销量',
bef_sales_5d string COMMENT 'T-5日销量',
bef_sales_6d string COMMENT 'T-6日销量',
bef_sales_7d string COMMENT 'T-7日销量',
in_stock_sales_14d string COMMENT '历史14日销量和',
in_stock_sales_28d string COMMENT '历史28日销量和',
predict_sales_1d string COMMENT 'T+1日预测销量',
predict_sales_2d string COMMENT 'T+2日预测销量',
predict_sales_3d string COMMENT 'T+3日预测销量',
predict_sales_4d string COMMENT 'T+4日预测销量',
predict_sales_5d string COMMENT 'T+5日预测销量',
predict_sales_6d string COMMENT 'T+6日预测销量',
predict_sales_7d string COMMENT 'T+7日预测销量',
in_stock_predict_sales_14d string COMMENT '14日预测销量和',
in_stock_predict_sales_28d string COMMENT '28日预测销量和',
yn int COMMENT '删除标识 1为没删,0为删除',
create_pin string COMMENT '创建人',
update_pin string COMMENT '更新人',
create_time timestamp COMMENT '创建时间',
update_time timestamp COMMENT '更新时间',
ts timestamp COMMENT '时间戳')
COMMENT 'KA商品销量预测接口中转表'
PARTITIONED BY (
dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
4、KA 接口表
drop table app.app_basic_dashboard_goods_sale_predict_daily;
CREATE TABLE app.app_basic_dashboard_goods_sale_predict_daily (
seller_id bigint COMMENT '商家id',
seller_name string COMMENT '商家名称',
dept_id bigint COMMENT '事业部门id',
dept_no string COMMENT '事业部门编号',
dept_name string COMMENT '事业部名字',
goods_id bigint COMMENT '商品id',
goods_no string COMMENT '商品序号',
goods_name string COMMENT '商品名称',
warehouse_id bigint COMMENT '入仓id',
warehouse_no string COMMENT '入仓编号',
warehouse_name string COMMENT '入仓名称',
in_warehouse_city string COMMENT '入仓城市',
satisfy_alpha string COMMENT '入仓服务水平C',
safe_stock_days string COMMENT '安全库存天数',
alt string COMMENT '出仓ALT',
vlt string COMMENT '出仓VLT',
in_stock_safety_num int COMMENT '安全库存',
target_stock_days string COMMENT '目标库存天数',
bp string COMMENT 'BP',
out_warehouse_no string COMMENT '出仓编号',
out_warehouse_name string COMMENT '出仓名称',
out_warehouse_city string COMMENT '出仓城市',
in_stock_max_num int COMMENT '目标库存',
bef_sales_1d string COMMENT 'T-1日销量',
bef_sales_2d string COMMENT 'T-2日销量',
bef_sales_3d string COMMENT 'T-3日销量',
bef_sales_4d string COMMENT 'T-4日销量',
bef_sales_5d string COMMENT 'T-5日销量',
bef_sales_6d string COMMENT 'T-6日销量',
bef_sales_7d string COMMENT 'T-7日销量',
in_stock_sales_14d string COMMENT '历史14日销量和',
in_stock_sales_28d string COMMENT '历史28日销量和',
predict_sales_1d string COMMENT 'T+1日预测销量',
predict_sales_2d string COMMENT 'T+2日预测销量',
predict_sales_3d string COMMENT 'T+3日预测销量',
predict_sales_4d string COMMENT 'T+4日预测销量',
predict_sales_5d string COMMENT 'T+5日预测销量',
predict_sales_6d string COMMENT 'T+6日预测销量',
predict_sales_7d string COMMENT 'T+7日预测销量',
in_stock_predict_sales_14d string COMMENT '14日预测销量和',
in_stock_predict_sales_28d string COMMENT '28日预测销量和',
yn int COMMENT '删除标识 1为没删,0为删除',
create_pin string COMMENT '创建人',
update_pin string COMMENT '更新人',
create_time timestamp COMMENT '创建时间',
update_time timestamp COMMENT '更新时间',
ts timestamp COMMENT '时间戳')
COMMENT 'KA商品销量预测接口表'
PARTITIONED BY (
dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
二、插值
1、商家参数表
insert overwrite table app.app_basic_dashboard_goods_seller
select distinct
seller_id,
seller_no,
seller_name,
dept_id,
dept_no,
'36' as vlt, --VLT
'10' as alt, --ALT
'0.8' as satisfyAlpha, --出仓服务水平C
case
when seller_no = 'ECP0020000003619' --安利
then 32
when seller_no = 'ECP0020000014466' --住友
then 120
else 0
end as safetyDays, --安全库存天数
case
when seller_no = 'ECP0020000003619'
then 40
when seller_no = 'ECP0020000014466'
then 132
else 0
end as targetDays, --目标库存天数
'20' as bp, --BP
'"""+yesterday+"""' AS task_exec_date,
1 AS yn,
current_timestamp AS create_time,
'plumber' AS create_pin,
'plumber' AS update_pin,
current_timestamp AS update_time,
current_timestamp AS ts
from
fdm.fdm_eclp_so1_so_main_chain
WHERE
start_date <= '"""+yesterday+"""'
and end_date > '"""+yesterday+"""'
and seller_no in('ECP0020000003619', 'ECP0020000014466') ;
2、年日均销量表
#!/usr/bin/env python3
################################################################
# AUTHOR: wn
# CREATED TIME: 2018-08-09
# MODIFIED BY:
# MODIFTED TIME:
# REVIEWED BY:
# REVIEWED TIME:
# COMMENTS: goods ################################################################
#===============================================================================
# FILE: exe_app_basic_dashboard_goods_avg_year_sellnum.py
# USAGE: ./exe_app_basic_dashboard_goods_avg_year_sellnum.py
# SRC_TABLE:
# TGT_TABLE: app.app_basic_dashboard_goods_avg_year_sellnum
#===============================================================================
import sys
import os
import time
import datetime
import logging
import calendar sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
ht = HiveTask()
today = ht.oneday(1)[0:10]
yesterday = ht.oneday(0)[0:10] sql1 = """
use app;
insert overwrite table app.app_basic_dashboard_goods_avg_year_sellnum partition
(
dt = '"""+yesterday+"""'
)
SELECT
seller_id, --商家id
seller_name,
dept_id,
dept_name,
warehouse_id,
warehouse_name,
goods_id,
goods_no,
goods_name,
round((
case
WHEN saletime >= 365
THEN yreal_outtore_qty / 365
WHEN saletime < 365
THEN real_outtore_qty / datediff(sysdate( - 1), oldsaletime)
ELSE 0
end), 2) AS avg_year_sellnum, --年日均销量
1 AS yn, --删除标识 1为没删,0为删除
'plumber' AS create_pin, --创建人
'plumber' AS update_pin, --更新人
current_timestamp AS create_time, --创建时间
current_timestamp AS update_time, --更新时间
current_timestamp AS ts --时间戳
FROM
(
SELECT
seller_id,
seller_name,
dept_id,
dept_name,
warehouse_id,
warehouse_name,
goods_id,
goods_no,
goods_name,
datediff(sysdate( - 1), min(to_date(create_time))) AS saletime, --
min(to_date(create_time)) AS oldsaletime, --
sum(real_outtore_qty) AS real_outtore_qty, --
sum(
case
WHEN create_time >= date_sub(sysdate( - 1), 365)
THEN real_outtore_qty
ELSE 0
end) AS yreal_outtore_qty --
FROM
(
SELECT
main.seller_id,
main.seller_name,
main.dept_id,
main.dept_name,
main.warehouse_id,
case
when warehouse.warehouse_name is not null
then warehouse.warehouse_name
else main.warehouse_name
end warehouse_name,
item.create_time, --
item.goods_id,
item.goods_no,
item.goods_name,
item.real_outtore_qty AS real_outtore_qty
FROM
(
SELECT
so_no,
seller_id,
seller_no,
seller_name,
dept_id,
dept_no,
trim(dept_name) as dept_name,
warehouse_id,
warehouse_no,
warehouse_name
FROM
fdm.fdm_eclp_so1_so_main_chain
WHERE
start_date <= sysdate( - 1)
and end_date > sysdate( - 1)
AND seller_no in
(
select seller_no from app.app_basic_dashboard_goods_seller
)
AND
(
parent_id = cast(substring(so_no, 4) AS bigint)
OR parent_id is NULL
)
AND so_status <> '10056'
AND so_status <> '10009'
AND so_status <> '10028'
AND so_status <> '10060'
)
main
JOIN
(
SELECT
so_id,
goods_id,
goods_no,
goods_name,
dept_id,
sum(nvl(apply_outstore_qty, 0)) AS apply_outstore_qty,
sum(
case
WHEN nvl(real_outtore_qty, 0) = 0
and nvl(apply_outstore_qty, 0) > 0
THEN nvl(apply_outstore_qty, 0)
ELSE nvl(real_outtore_qty, 0)
end) AS real_outtore_qty,
min(create_time) as create_time
FROM
fdm.fdm_eclp_so1_so_item_chain
WHERE
dt >= date_sub(sysdate( - 1), 365)
GROUP BY
so_id,
goods_id,
goods_no,
goods_name,
dept_id
)
item
ON
substring(main.so_no, 4) = item.so_id
LEFT JOIN
(
SELECT
warehouse_no,
warehouse_name
from
app.app_log_scm_ka_warehouse wh1
left join
(
select distinct
dim_area_id,
dim_area_name
from
dim.dim_supp_report_area_province
)
wh2
on
trim(wh1.org_name) = trim(wh2.dim_area_name)
GROUP BY
org_id,
wh2.dim_area_id,
org_name,
warehouse_no,
warehouse_name,
province_id,
province_name,
city_id,
city_name
)
warehouse ON main.warehouse_no = warehouse.warehouse_no
)
p
GROUP BY
seller_id,
seller_name,
dept_id,
dept_name,
warehouse_id,
warehouse_name,
goods_id,
goods_no,
goods_name
)
q """ ht.exec_sql(schema_name = 'app', table_name = 'app_basic_dashboard_goods_avg_year_sellnum', sql = sql1, merge_flag = True)
3、中转表
#!/usr/bin/env python3
################################################################
# AUTHOR: wn
# CREATED TIME: 2018-08-09
# MODIFIED BY:
# MODIFTED TIME:
# REVIEWED BY:
# REVIEWED TIME:
# COMMENTS: goods ################################################################
#===============================================================================
# FILE: exe_app_basic_goods_stock_num_daily_da_d.py
# USAGE: ./exe_app_basic_goods_stock_num_daily_da_d.py
# SRC_TABLE:
# TGT_TABLE: app_basic_goods_stock_num_daily_da
#===============================================================================
import sys
import os
import time
import datetime
import logging
import calendar sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
ht = HiveTask()
today = ht.oneday(1)[0:10]
yesterday = ht.oneday(0)[0:10] sql1 = """
use app;
insert overwrite table app.app_basic_dashboard_goods_sale_predict_daily_tem partition
(
dt = '"""+yesterday+"""'
)
select
c.seller_id, --商家编号
c.seller_name, --商家名称
c.dept_id, --事业部id
c.dept_no, --事业部编号
c.dept_name, --事业部名称
c.goods_id, --商品id
c.goods_no, --商品编号
c.goods_name, --商品名称
c.warehouse_id, --入仓id
c.warehouse_no, --入仓编号
c.warehouse_name, --入仓名称
h.loc_city_name as in_warehouse_city, --入仓城市
case
when d.satisfy_alpha is null
then n.satisfyalpha
else d.satisfy_alpha
end as satisfy_alpha, -- 出仓服务水平c (basis)
case
when d.safe_stock_days is null
then n.safetydays
else d.safe_stock_days
end as safe_stock_days, -- 安全库存天数(basis)
case
when d.alt is null
then n.alt
else d.alt
end as alt, -- 出仓alt(小时)(basis)
case
when j.totaltime is null
then n.vlt
else j.totaltime
end as vlt, --运输时间(basis)
f.in_stock_safety_num as in_stock_safety_num, --安全库存(计划调拨表取数)
case
when d.target_stock_days is null
then n.targetdays
else d.target_stock_days
end as target_stock_days, -- 目标库存天数(basis)
case
when d.bp is null
then n.bp
else d.bp
end as BP, -- BP
f.out_warehouse_no as out_warehouse_no, --配出仓编码
f.out_warehouse_name as out_warehouse_name, --配出仓名称
i.loc_city_name as out_warehouse_city, --入仓城市
f.in_stock_max_num as in_stock_max_num, --目标库存(计划调拨表取数)
case
when split(g.sales_week_detail, ',') [6] is NULL
then '0'
else split(g.sales_week_detail, ',') [6]
end as bef_sales_1d, --T-1日销量(逆向)
case
when split(g.sales_week_detail, ',') [5] is NULL
then '0'
else split(g.sales_week_detail, ',') [5]
end as bef_sales_2d, --T-2日销量
case
when split(g.sales_week_detail, ',') [4] is NULL
then '0'
else split(g.sales_week_detail, ',') [4]
end as bef_sales_3d, --T-3日销量
case
when split(g.sales_week_detail, ',') [3] is NULL
then '0'
else split(g.sales_week_detail, ',') [3]
end as bef_sales_4d, --T-4日销量
case
when split(g.sales_week_detail, ',') [2] is NULL
then '0'
else split(g.sales_week_detail, ',') [2]
end as bef_sales_5d, --T-5日销量
case
when split(g.sales_week_detail, ',') [1] is NULL
then '0'
else split(g.sales_week_detail, ',') [1]
end as bef_sales_6d, --T-6日销量
case
when split(g.sales_week_detail, ',') [0] is NULL
then '0'
else split(g.sales_week_detail, ',') [0]
end as bef_sales_7d, --T-7日销量
case
when g.sales_14d is NULL
then '0'
else g.sales_14d
end as in_stock_sales_14d, --14日销量
case
when g.sales_28d is NULL
then '0'
else g.sales_28d
end as in_stock_sales_28d, --28日销量
case
when split(g.predict_sales_week_detail, ',') [0] is NULL
and m.avg_year_sellnum is NULL --都空为0
then '0'
when split(g.predict_sales_week_detail, ',') [0] is NULL
and m.avg_year_sellnum is not NULL --没有预测值,按销量平均值计
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [0] --预测值计
end as predict_sales_1d, --T+1日预测销量(正向)
case
when split(g.predict_sales_week_detail, ',') [1] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [1] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [1]
end as predict_sales_2d, --T+2日预测销量
case
when split(g.predict_sales_week_detail, ',') [2] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [2] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [2]
end as predict_sales_3d, --T+3日预测销量
case
when split(g.predict_sales_week_detail, ',') [3] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [3] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [3]
end as predict_sales_4d, --T+4日预测销量
case
when split(g.predict_sales_week_detail, ',') [4] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [4] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [4]
end as predict_sales_5d, --T+5日预测销量
case
when split(g.predict_sales_week_detail, ',') [5] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [5] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [5]
end as predict_sales_6d, --T+6日预测销量
case
when split(g.predict_sales_week_detail, ',') [6] is NULL
and m.avg_year_sellnum is NULL
then '0'
when split(g.predict_sales_week_detail, ',') [6] is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum)
else split(g.predict_sales_week_detail, ',') [6]
end as predict_sales_7d, --T+7日预测销量
case
when g.predict_sales_14d is NULL
and m.avg_year_sellnum is NULL
then '0'
when g.predict_sales_14d is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum * 14)
else g.predict_sales_14d
end as in_stock_predict_sales_14d, --14日预测销量
case
when g.predict_sales_28d is NULL
and m.avg_year_sellnum is NULL
then '0'
when g.predict_sales_28d is NULL
and m.avg_year_sellnum is not NULL
then round(m.avg_year_sellnum * 28)
else g.predict_sales_28d
end as in_stock_predict_sales_28d, --28日预测销量
1 AS yn, --删除标识 1为没删,0为删除
'plumber' AS create_pin, --创建人
'plumber' AS update_pin, --更新人
current_timestamp AS create_time, --创建时间
current_timestamp AS update_time, --更新时间
current_timestamp AS ts --时间戳
from
(
SELECT
*
FROM
(
SELECT
id,
goods_id,
goods_no,
goods_name,
seller_id,
seller_no,
trim(seller_name) as seller_name, --去除空格
dept_id,
dept_no,
trim(dept_name) as dept_name,
warehouse_no,
warehouse_id,
warehouse_name,
update_time,
create_time,
row_number() over(partition by goods_id, seller_no, warehouse_no ORDER BY update_time desc, create_time desc) AS num --去重
FROM
fdm.fdm_eclp_stock1_saleable_warehouse_stock_chain
WHERE
dp = 'ACTIVE'
AND yn = 1
AND seller_no in
(
select seller_no from app.app_basic_dashboard_goods_seller
)
)
s1
WHERE
s1.num = 1
)
c
left join fdm.fdm_log_scm_ka_allot_sys_pre_allot d --参数表
on
c.dept_no = d.dept_no
and c.warehouse_no = d.warehouse_no
and c.goods_no = d.goods_id
and d.yn = 1
and d.dt = sysdate( - 1)
left join
(
select
*
from
fdm.fdm_log_scm_ka_allot_allot_plan --调拨计划表 (注意去重)
where
id in
(
select
max(e.id)
from
fdm.fdm_log_scm_ka_allot_allot_plan e
where
e.dt = sysdate( - 1)
group by
e.dept_name,
e.in_warehouse_no,
e.goods_no
)
and dt = sysdate( - 1)
)
f
on
f.dept_no = c.dept_no
and f.in_warehouse_no = c.warehouse_no
and f.goods_no = c.goods_no
left join app.app_ka_predict_sales_da g ---线下门店销量预测表
on
c.dept_no = g.dept_no
and c.goods_no = g.goods_no
and c.warehouse_no = g.warehouse_no
and g.dt = sysdate( - 1)
left join dim.dim_wms_store h --库房维表,取出入仓所属城市
on
c.warehouse_name = h.dim_store_name
left join dim.dim_wms_store i --库房维表,取出仓所属城市
on
f.out_warehouse_name = i.dim_store_name
left join
(
select
startcityid,
startcityname,
endcityid,
endcityname,
totalaging,
totaltime,
yn
from
(
select
case
when
(
startprovinceid in(1, 2, 3, 4)
)
then startprovinceid
else startcityid
end as startcityid,
case
when
(
startprovinceid in(1, 2, 3, 4)
)
then concat(startprovincename, '市')
else startcityname
end as startcityname,
case
when
(
endprovinceid in(1, 2, 3, 4)
)
then endprovinceid
else endcityid
end as endcityid,
case
when
(
endprovinceid in(1, 2, 3, 4)
)
then concat(endprovincename, '市')
else endcityname
end as endcityname,
ceil(avg(totalaging)) as totalaging,
ceil(avg(totaltime)) as totaltime,
max(1) as yn
from
fdm.fdm_staticroutebatchgenerate_staticroutebatchgenerate_chain
where
dp = 'ACTIVE'
and yn = 1
group by
case
when
(
startprovinceid in(1, 2, 3, 4)
)
then startprovinceid
else startcityid
end,
case
when
(
startprovinceid in(1, 2, 3, 4)
)
then concat(startprovincename, '市')
else startcityname
end,
case
when
(
endprovinceid in(1, 2, 3, 4)
)
then endprovinceid
else endcityid
end,
case
when
(
endprovinceid in(1, 2, 3, 4)
)
then concat(endprovincename, '市')
else endcityname
end
)
route
)
j --vlt (青龙路由,通过城市名称,获取vlt)
on
h.loc_city_name = j.startcityname
and i.loc_city_name = j.endcityname
left join
(
select
*
from
(
SELECT
seller_id,
warehouse_id,
goods_id,
avg_year_sellnum,
dt,
row_number() over(partition by goods_id, seller_id, warehouse_id ORDER BY avg_year_sellnum desc) AS num
FROM
app.app_basic_dashboard_goods_avg_year_sellnum --KA商品销量年日均值(去重)
WHERE
dt = sysdate( - 1)
)
s2
where
s2.num = 1
)
m --获取销量年日均值
on
c.seller_id = m.seller_id
and c.warehouse_id = m.warehouse_id
and c.goods_id = m.goods_id
and m.dt = sysdate( - 1)
join app.app_basic_dashboard_goods_seller n
on
c.seller_id = n.seller_id """ ht.exec_sql(schema_name = 'app', table_name = 'app_basic_dashboard_goods_sale_predict_daily_tem', sql = sql1, merge_flag = True)
4、KA接口表
#!/usr/bin/env python3
################################################################
# AUTHOR: wn
# CREATED TIME: 2018-08-09
# MODIFIED BY:
# MODIFTED TIME:
# REVIEWED BY:
# REVIEWED TIME:
# COMMENTS: goods ################################################################
#===============================================================================
# FILE: exe_app_basic_dashboard_goods_sale_predict_daily.py
# USAGE: ./exe_app_basic_dashboard_goods_sale_predict_daily.py
# SRC_TABLE:
# TGT_TABLE: app.app_basic_dashboard_goods_sale_predict_daily
#===============================================================================
import sys
import os
import time
import datetime
import logging
import calendar sys.path.append(os.getenv('HIVE_TASK'))
from HiveTask import HiveTask
ht = HiveTask()
today = ht.oneday(1)[0:10]
yesterday = ht.oneday(0)[0:10] sql1 = """
use app;
insert overwrite table app.app_basic_dashboard_goods_sale_predict_daily partition
(
dt = '"""+yesterday+"""'
)
select
k.seller_id, --商家编号
k.seller_name, --商家名称
k.dept_id, --事业部id
k.dept_no, --事业部编号
k.dept_name, --事业部名称
k.goods_id, --商品id
k.goods_no, --商品编号
k.goods_name, --商品名称
k.warehouse_id, --入仓id
k.warehouse_no, --入仓编号
k.warehouse_name, --入仓名称
k.in_warehouse_city, --入仓城市
k.satisfy_alpha, -- 出仓服务水平c (basis)
k.safe_stock_days, -- 安全库存天数(basis)
k.alt, -- 出仓alt(小时)(basis)
k.vlt, --运输时间
case
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
>= 0
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 1
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) * m.predict_sales_1d)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 1
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 2
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d) / 2)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 2
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 3
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d) / 3)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 3
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 4
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d) / 4)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 4
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 5
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d) / 5)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 5
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 6
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d + m.predict_sales_6d) / 6)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 6
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 7
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.predict_sales_1d + m.predict_sales_2d + m.predict_sales_3d + m.predict_sales_4d + m.predict_sales_5d + m.predict_sales_6d + m.predict_sales_7d) / 7)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 7
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
<= 14
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.in_stock_predict_sales_14d) / 14)
when k.in_stock_safety_num is null
and
(
m.safe_stock_days + m.alt / 24 + m.vlt / 24
)
> 14
then round(m.satisfy_alpha *(m.safe_stock_days + m.alt / 24 + m.vlt / 24) *(m.in_stock_predict_sales_28d) / 28)
else round(k.in_stock_safety_num)
end as in_stock_safety_num, --安全库存(复杂公式见prd)
k.target_stock_days, -- 目标库存天数
k.BP, -- BP
k.out_warehouse_no, --配出仓编码
k.out_warehouse_name, --配出仓名称
k.out_warehouse_city, --出仓城市
case
when k.in_stock_max_num is null
then round(m.satisfy_alpha * m.target_stock_days * m.in_stock_predict_sales_14d / 14 + m.BP) --目标库存天数10,所以没有判断条件
else round(k.in_stock_max_num)
end as in_stock_max_num, --目标库存
k.bef_sales_1d, --T-1日销量(逆向)
k.bef_sales_2d, --T-2日销量
k.bef_sales_3d, --T-3日销量
k.bef_sales_4d, --T-4日销量
k.bef_sales_5d, --T-5日销量
k.bef_sales_6d, --T-6日销量
k.bef_sales_7d, --T-7日销量
k.in_stock_sales_14d, --14日销量
k.in_stock_sales_28d, --28日销量
k.predict_sales_1d, --T+1日预测销量(正向)
k.predict_sales_2d, --T+2日预测销量
k.predict_sales_3d, --T+3日预测销量
k.predict_sales_4d, --T+4日预测销量
k.predict_sales_5d, --T+5日预测销量
k.predict_sales_6d, --T+6日预测销量
k.predict_sales_7d, --T+7日预测销量
k.in_stock_predict_sales_14d, --14日预测销量
k.in_stock_predict_sales_28d, --28日预测销量
1 AS yn, --删除标识 1为没删,0为删除
'plumber' AS create_pin, --创建人
'plumber' AS update_pin, --更新人
current_timestamp AS create_time, --创建时间
current_timestamp AS update_time, --更新时间
current_timestamp AS ts --时间戳
from
(
select
*
from
app.app_basic_dashboard_goods_sale_predict_daily_tem
where
dt = sysdate( - 1)
)
k
join
(
select
*
from
app.app_basic_dashboard_goods_sale_predict_daily_tem
where
dt = sysdate( - 1)
)
m
on
k.dept_no = m.dept_no
and k.goods_no = m.goods_no
and k.warehouse_no = m.warehouse_no """ ht.exec_sql(schema_name = 'app', table_name = 'app_basic_dashboard_goods_sale_predict_daily', sql = sql1, merge_flag = True)
KA 接口表的更多相关文章
- 物料事务处理接口表 MTL_TRANSACTIONS_INTERFACE 账户别名使用 及 提示无效的分配账户字段
实例: PROCEDURE MAIN(P_ORGANIZATION_ID NUMBER, P_PERIOD_NAME VARCHAR2, XV_STATUS OUT VARCHAR, XV_MESG ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang
Ka Chang 思路: dfs序+树状数组+分块 先dfs处理好每个节点的时间戳 对于每一层,如果这一层的节点数小于sqrt(n),那么直接按照时间戳在树状数组上更新 如果这一层节点个数大于sqrt ...
- 补交第二周作业:学习ka li
在老师给的虚拟机上安装,试了n次都没有安装成功,百度上的说法也是众说纷纭. 之后重新安装了另一个版本的虚拟机,按照教程成功装上了ka li. 一. 安装VMtools:是为了方便宿主机与虚拟机间的文件 ...
- R12 AR INVOICE 接口表导入
http://blog.csdn.net/fangz0615/article/details/38677085 Purpose 本文介绍了如何通过AR接口表进行AR事务处理(亦称AR发票)导入. Ap ...
- EBS R12使用接口表往已存在的供应商地址下创建新的地点
在供应商 "测试供应商A" 下已经有了两个地址,分别为 "地址A","地址B",现在由于某些原因,需要在地址A下面创建新的地点. 由于业务需 ...
- EBS常用接口表
AP接口表: AP_INVOICES_INTERFACE AP_INVOICE_LINES_INTERFACE 涉及的请求: 应付款管理系统开放接口导入 涉及案例: 运费导AP.费用导AP PO接口表 ...
- KA,连接池居然这么简单? 原创: 58沈剑 架构师之路 3月20日
KA,连接池居然这么简单? 原创: 58沈剑 架构师之路 3月20日
- 五、Hive-HBase接口表性能分析
设想: Hbase不支持join,不能做复杂统计类: Hive可以. Hive-hbase接口表岂不两全其美? 用户画像表有300个字段,每天都使用: 1.在业务系统里实时根据uid调取用户的画像信息 ...
- Ka/ Ks|同义替换的三种路径|kaks_Calculator|
生命组学 研究old gene 和 young gene CAI选择信号:CGmutation信号 Neutrality plot:CG3与GC1.GC2的关系:平:mutation:正相关:sele ...
随机推荐
- 我的webpack学习笔记(二)
前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...
- 用vue + leancloud开发一个免费的博客
项目地址 https://github.com/Fee-ing/Fe... 在线预览 在线预览地址: 搭建免费博客
- js获取当前日期是一年中的第几天
js获取当前日期为一年中的第几天 const currentYear = new Date().getFullYear().toString(); // 今天减今年的第一天(xxxx年01月01日) ...
- HTML5历史管理状态机制
前言:想要不刷新页面同时改变url 可以用HTML5 window对象的 hashChange 事件.同时介绍两个相关的api 和 1个事件. 两个API:1.history.pushState({n ...
- JS基础入门篇(十二)—JSON和Math
1.JSON JSON: 对象格式的字符串 轻量的数据传输格式 注意事项: 键名 需要 使用 双引号 包起来 JOSN有两个方法:JSON.parse和 JSON.stringify. JSON.pa ...
- Docker部署LAMP项目
前言 之前我们学习了如何在Linux部署LAMP项目,今天我们来学习一下如何在Docker下部署LAMP项项目吧! Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条 ...
- Redis(十一):哨兵模式架构设计分析
业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行. 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题.这些都是许多互联网应用经常会遇到的问题,也基本上都 ...
- mysql的锁与事务
1. MySQL中的事物 1.InnoDB事务原理 1. 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 2. 在数据库提交 ...
- plsql乱码问题
1,问题:在plsql 中执行sql语句,查询结果带有中文,出现乱码,即" ??? ":如下: 2,解决: 1)输入sql语句 select * from V$NLS_PARAME ...
- linux 读取 USB HID鼠标坐标和点击 在 LCD上显示
首先要,编译内核时启用了 USB HID 设备.启用了 鼠标 . 在开发板上插入usb 时会有如下提示. 可以看到,多了一个 mouse0 和 eventX 打出来的是我的 联想鼠标. 1, 在 终端 ...