【SQL】常用SQL

MaxComputer常用SQL

建表

CREATE TABLE dwd_tfc_ctl_signal_phasedir (
    cust_inter_id STRING COMMENT '客户路口ID',
    inter_id STRING COMMENT '高德路口Id',
    inter_name STRING COMMENT '高德路口名称',
    phase_plan_no STRING COMMENT '方案号',
    phase_name STRING COMMENT '相位名称,相位阶段',
    cust_dir_name STRING COMMENT '通行方向,如东-直行',
    f_link_id STRING COMMENT '进口道id',
    f_dir_4_no STRING COMMENT '方向的4方位编码,详见编码表',
    f_dir_8_no STRING COMMENT '方向的8方位编码,详见编码表',
    turn_dir_no STRING COMMENT '转向,详见编码表',
    modified_date STRING COMMENT '修改时间',
    source STRING COMMENT '数据来源,SCATS或者人工录入等'
)partitioned by (data_version STRING COMMENT 'data_version',
    adcode STRING COMMENT '城市编码')
LIFECYCLE 100000;

CASE..WHEN

case
when (_condition1) then result1
when (_condition2) then result2
when (_condition3) then result3
...
else resultn
end

  示例:(对应编程语句中的if/else)

select
case
when shop_name is null then 'default_region'
when shop_name like 'hang%' then 'zj_region'
end as region
from sale_detail;

改变时间格式——TO_CHAR

  语法:

string to_char(datetime date, string format)

  若输入为 string 类型会隐式
  转换为 datetime 类型后参与运算

  示例:

to_char('2010-12-03 00:00:00', ' 阿里金融 yyyy-mm*dd') = ' 阿里金融 2010-12*03' 
to_char('2008-07-18 00:00:00', 'yyyymmdd') = '20080718'
--获取指定格式的当前时间:
  to_char(getdate(),'yyyymmddhhmiss')

 查看分区

ls partitions tableName
list partitions tableName

 抽取T-1数据

  --抽取ODS T-1的增量数据
insert overwrite table dwd_wp_jj_road_place_delta partition (fq_day='${bizday}') 
select /*+mapjoin(t1,t2,t3,t4,t5,t6,t7,t8)*/
      t.jkdbh as jkdbh,--监控点编号(按ga408.3)
      t.mc as mc,--监控点名称
      t.sm as sm,--俗称
      t.dwdm as dwdm,--单位代码(前6位为行政区划)
      t.gxsj as gxsj,--更新时间(精确到天)
      t.js as js,--介绍
      t.bz as bz,--备注
      t.jllx as jllxdm,--记录类型(0正常,1禁用,2删除)代码
      null as jllx ,--记录类型(0正常,1禁用,2删除)
      t.jfbh as jfbh,--机房编号
      t.jkdlx as jkdlxdm,--监控点类型 0-省际 1-市际 2-其它代码
      null  as jkdlx ,--监控点类型 0-省际 1-市际 2-其它
      t.jkdjb as jkdjbdm,--监控点级别 0-一级 1-二级 2-三级代码
      null as jkdjb ,--监控点级别 0-一级 1-二级 2-三级
      t.flag as flagdm,--监控点图标状态 0-图标已存在 1-图标不存在代码
      null as flag ,--监控点图标状态 0-图标已存在 1-图标不存在
      t.jkdz as jkdztdm,--监控点故障状态 0-正常 1- 故障 2-未知代码
      null as jkdzt ,--监控点故障状态 0-正常 1- 故障 2-未知
      t.pyjx as pyjx,--拼音简写
      t.dym1 as dym1,--对应码1
      t.dym2 as dym2,--
      t.dym3 as dym3,--
      t.dym4 as dym4,--
      t.dym5 as dym5,--
      t.ddlx as ddlxdm,--01:单条道路点位 02:多条道路点位代码
      null as ddlx ,--01:单条道路点位 02:多条道路点位
      t.xzqh as xzqh,--行政区划
      t.jstz as jstz,--建设投资(1-自建 2-租用)
      t.dwlx as dwlx,--点位类别
      t.jrqgjcbk as jrqgjcbkdm,--接入全国缉查布控(0-需接入 1-不接入 2-已接入代码
      null as jrqgjcbk ,--接入全国缉查布控(0-需接入 1-不接入 2-已接入
      t.fxctq as fxctqdm,--非现场监控点停启专用 0启用 1停用代码
      null as fxctq ,--非现场监控点停启专用 0启用 1停用
      t.ssxm as ssxm,--监控点所属项目
      t.kms as kms,--千米数(监控点编号第6到9位)
      t.zms as zms,--米数(监控点编号第10到12位)
      t.pgis_jd as  pgis_jd, --pgis经度
      t.pgis_wd as  pgis_wd, --pgis纬度
      t.pgis_geohash as  pgis_geohash, --pgisgeohash
      substr(t.pgis_geohash, 1,4) as pgis_geohash4, --pgis geohash4位
      substr(t.pgis_geohash, 1,5) as pgis_geohash5, --pgis geohash5位
      substr(t.pgis_geohash, 1,6) as pgis_geohash6, --pgis geohash6位
      t.gd_jd as  gd_jd, --gd经度
      t.gd_wd as  gd_wd, --gd纬度
      dwd_sp_dev:geohash_encode(t.gd_jd, t.gd_wd) as gd_geohash,--gd geohash
      substr(dwd_sp_dev:geohash_encode(t.gd_jd, t.gd_wd),1,4) as gd_geohash4, --gd geohash4位
      substr(dwd_sp_dev:geohash_encode(t.gd_jd, t.gd_wd),1,5) as gd_geohash5, --gd geohash5位
      substr(dwd_sp_dev:geohash_encode(t.gd_jd, t.gd_wd),1,6) as gd_geohash6, --gd geohash6位
      to_char(getdate(),'yyyymmddhhmiss') as dwd_loadtime, --DWD新增时间
      to_char(getdate(),'yyyymmddhhmiss') as dwd_updatetime, --DWD更新时间
      '1' as dwd_yxbz --DWD有效标志
from(
      select 
            dwd_sp_dev:bcconvert(t0.jkdbh) as jkdbh,--监控点编号(按ga408.3)
            dwd_sp_dev:bcconvert(t0.mc) as mc,--监控点名称
            dwd_sp_dev:bcconvert(t0.sm) as sm,--俗称
            dwd_sp_dev:bcconvert(t0.dwdm) as dwdm,--单位代码(前6位为行政区划)
            dwd_sp_dev:bcconvert(t0.gxsj) as gxsj,--更新时间(精确到天)
            dwd_sp_dev:bcconvert(t0.js) as js,--介绍
            dwd_sp_dev:bcconvert(t0.bz) as bz,--备注
            dwd_sp_dev:bcconvert(t0.jllx) as jllx,--记录类型(0正常,1禁用,2删除)
            dwd_sp_dev:bcconvert(t0.jfbh) as jfbh,--机房编号
            dwd_sp_dev:bcconvert(t0.jkdlx) as jkdlx,--监控点类型 0-省际 1-市际 2-其它
            dwd_sp_dev:bcconvert(t0.jkdjb) as jkdjb,--监控点级别 0-一级 1-二级 2-三级
            dwd_sp_dev:bcconvert(t0.flag) as flag,--监控点图标状态 0-图标已存在 1-图标不存在
            dwd_sp_dev:bcconvert(t0.jkdzt) as jkdzt,--监控点故障状态 0-正常 1- 故障 2-未知
            dwd_sp_dev:bcconvert(t0.pyjx) as pyjx,--拼音简写
            dwd_sp_dev:bcconvert(t0.dym1) as dym1,--对应码1
            dwd_sp_dev:bcconvert(t0.dym2) as dym2,--
            dwd_sp_dev:bcconvert(t0.dym3) as dym3,--
            dwd_sp_dev:bcconvert(t0.dym4) as dym4,--
            dwd_sp_dev:bcconvert(t0.dym5) as dym5,--
            dwd_sp_dev:bcconvert(t0.ddlx) as ddlx,--01:单条道路点位 02:多条道路点位
            dwd_sp_dev:bcconvert(t0.xzqh) as xzqh,--行政区划
            dwd_sp_dev:bcconvert(t0.jstz) as jstz,--建设投资(1-自建 2-租用)
            dwd_sp_dev:bcconvert(t0.dwlx) as dwlx,--点位类别
            dwd_sp_dev:bcconvert(t0.jrqgjcbk) as jrqgjcbk,--接入全国缉查布控(0-需接入 1-不接入 2-已接入
            dwd_sp_dev:bcconvert(t0.fxctq) as fxctq,--非现场监控点停启专用 0启用 1停用
            dwd_sp_dev:bcconvert(t0.ssxm) as ssxm,--监控点所属项目
            dwd_sp_dev:bcconvert(t0.kms) as kms,--千米数(监控点编号第6到9位)
            dwd_sp_dev:bcconvert(t0.zms) as zms,--米数(监控点编号第10到12位)
            dwd_sp_dev:bcconvert(t0.jd) as pgis_jd, --pgis经度
            dwd_sp_dev:bcconvert(t0.wd) as pgis_wd, --pgis纬度
            dwd_sp_dev:geohash_encode(cast(dwd_sp_dev:bcconvert(t0.jd) as double),cast(dwd_sp_dev:bcconvert(t0.wd) as double)) as pgis_geohash, --pgis geohash
            get_gd_jd(cast(dwd_sp_dev:bcconvert(t0.wd) as double),cast(dwd_sp_dev:bcconvert(t0.jd) as double)) as gd_jd, -- 高德经度
            get_gd_wd(cast(dwd_sp_dev:bcconvert(t0.wd) as double),cast(dwd_sp_dev:bcconvert(t0.jd) as double)) as gd_wd, -- 高德纬度
            row_number() over (partition by t0.jkdbh order by  desc) as rn 
      from ods_wp_jj_road_place_dd t0 
      where fq_day='${bizday}'
      ) t
where t.rn = 1
SQL

 更新删除数据 

a)如果需要更新(UPDATE)数据:

只能把源分区/表数据导入到新分区/表,在导入过程中执行相应的更新逻辑。新分区/表可以与源相同,即就地更新;

b) 如果需要删除(DELETE)的数据:

可以通过删除“DROPTABLE table_name;”表达到数据删除目的;
非分区表可以通过 “TRUNCATE TABLE table_name;”语句清空表数据;
分区表可以通过“ALTER TABLE table_name DROP IF EXISTS PARTITION(分区名=‘具体分区值’)”删除分区达到删除整个分区数据的目的;
也可以通过INSERT+WHERE条件把需要的数据导入到另一张新分区/表中或就地更新,INSERT语句支持源和目的表是同一张表:
例如insert overwrite table sale_detail select * from sale_detail where name=”mengyonghui”。

猜你喜欢

转载自www.cnblogs.com/jiangbei/p/9332516.html