赞
踩
- SELECT file_hash -- stored ssdeep hash
- FROM file_system
- WHERE file_name = '.vimrc';
- /* Updating the file record after writing to the file */
- UPDATE file_system
- SET file_modified_date = '1980-02-22 13:19:01.00000',
- file_size = 209732
- WHERE file_name = '.vimrc';
关键字总是大写,如 SELECT 和 WHERE。AS
做为别名使用时,不可省略。
- SELECT model_num
- FROM phones AS p
- WHERE p.release_date > '2014-09-30';
下面的情形需要换行:
AND
或 OR
前通过换行保证一行只有一个类型的关键字
,除了AS
。如下所示:
- SELECT f.species_name,
- AVG(f.height) AS average_height, AVG(f.diameter) AS average_diameter
- FROM flora AS f
- WHERE f.species_name = 'Banksia'
- OR f.species_name = 'Sheoak'
- OR f.species_name = 'Wattle'
- GROUP BY f.species_name, f.observation_date);
对于条件类型
的关键字,如OR
,AND
,保证其后所跟列名与上一行对齐。
对于UNION ALL
等需要将两段SQL拼接在一起的关键字,其上下空一行。如下所示:
- (SELECT f.species_name,
- AVG(f.height) AS average_height, AVG(f.diameter) AS average_diameter
- FROM flora AS f
- WHERE f.species_name = 'Banksia'
- OR f.species_name = 'Sheoak'
- OR f.species_name = 'Wattle'
- GROUP BY f.species_name, f.observation_date)
-
- UNION ALL
-
- (SELECT b.species_name,
- AVG(b.height) AS average_height, AVG(b.diameter) AS average_diameter
- FROM botanic_garden_flora AS b
- WHERE b.species_name = 'Banksia'
- OR b.species_name = 'Sheoak'
- OR b.species_name = 'Wattle'
- GROUP BY b.species_name, b.observation_date);
注意下列情况总是加入空格:
- SELECT a.title, a.release_date, a.recording_date
- FROM albums AS a
- WHERE a.title = 'Charcoal Lane'
- OR a.title = 'The New Danger';
需要用到JOIN
时,应该进行缩进。如下所示:
- SELECT r.last_name
- FROM riders AS r
- INNER JOIN bikes AS b
- ON r.bike_vin_num = b.vin_num
- AND b.engine_tally > 2
-
- INNER JOIN crew AS c
- ON r.crew_chief_last_name = c.last_name
- AND c.chief = 'Y';
- SELECT r.last_name,
- (SELECT MAX(YEAR(championship_date))
- FROM champions AS c
- WHERE c.last_name = r.last_name
- AND c.confirmed = 'Y') AS last_championship_year
- FROM riders AS r
- WHERE r.last_name IN
- (SELECT c.last_name
- FROM champions AS c
- WHERE YEAR(championship_date) > '2008'
- AND c.confirmed = 'Y');
- SELECT CASE postcode
- WHEN 'BN1' THEN 'Brighton'
- WHEN 'EH1' THEN 'Edinburgh'
- END AS city
- FROM office_locations
- WHERE country = 'United Kingdom'
- AND opening_time BETWEEN 8 AND 9
- AND postcode IN ('EH1', 'BN1', 'NN1', 'KW1');
规范化数据分层逻辑,避免数据位置混乱;高内聚松耦合;便于project管理;模型规范适用于区域医疗和单院版本,最终做到统一。
数据层次划分为三层:业务层(ods)
、数据仓库中间层(dwd/dws/dim)
、应用层(adm)
,project
新建一个frdata
或者放到alijk_bigdata里面
。tmp临时表
作为辅助,用来存放临时结果。
建议不同区域的项目单独规划odps
项目。
ODS层,所有数据同步要求全部放入这个项目,推荐使用DATAX工具来操作。
中间层模型和公共指标层。新的中间层模型(DWD/DWS)请放入这个项目进行规范管理。
应用数据层,如果你要面对一个数据产品/应用或者有以前的工作,还是可以使用这个项目。
应用层优选调用DW公共层数据,已经存在中间层数据,不允许应用层跨过中间层从ODS层重复加工数据。一方面,中间层团队应该积极了解应用层数据的建设需求,将公用的数据沉淀到公共层,为其他团队提供数据服务;另一方面,应用层团队也需积极配合中间层团队进行持续的数据公共建设的改造和迁移。必须避免出现过度的ODS层引用和不合理的数据复制和子集合冗余。
目前ODS表统一落地在不同业务域的ods目录下,使用odps的datax工具进行操作,命名由工具自动制定。
目录格式根据业务域定义。
类型 | 表名格式 | 示例 |
每日全量分区 | s_<上游逻辑表名> | cnods.s_emr_xml |
每日增量分区 | s<上游逻辑表名>delta | cnods.s_mz_guahao_delta |
小时合并同步 | s<上游逻辑表名>hh | cnods.s_data_area_hh |
业务域中文名 | 业务域命名 | 业务域命名(缩写) | 命名示例 |
浙二 | 浙江省第二人民医院 | zher | |
余杭 | 余杭区卫健委 | yhwjw | |
桐庐 | 桐庐卫健委 | tlwjw | |
余杭区第一人民医院 | 余杭区第一人民医院 | yh1 |
数据域中文名 | 数据域命名 | 数据域命名(缩写) | 命名示例 |
门诊 | outpatient | outp | dwd_fr_opt_xxx_di/df |
住院 | inpatient | Inp | dwd_fr_ipt_xxx_di/df |
检验 | Lis | Lis | dwd_fr_lis_xxx_di/df |
检查 | ris | Ris | dwd_fr_ris_xxx_di/df |
病案 | Mrs | mrs | dwd_fr_mrs_xxx_di/df |
电子病历 | Emr | emr | dwd_fr_emr_xxx_di/df |
费用 | Fee | fee | dwd_fr_fee_xxx_di/df |
随访 | followup | followup | dwd_fr_followup_xxx_di/df |
财务&结算域 | finance & settlement | fin | dwd_fr_fin_xxx_di/df |
医保 | insurance | Ins | |
药品 | Drug | Drug | |
患者 | Patient | Patient | |
体检 | CheckUp | chp |
刷新周期 | 刷新周期命名 | 刷新周期命名(缩写) | 描述 |
天 | day | d | 每天更新数据 |
周 | week | w | 每周更新数据 |
月 | month | m | 每月更新数据 |
季度 | quarter | q | 每季度更新数据 |
年 | year | y | 每年更新数据 |
小时 | hour | h | 每小时更新数据 |
实时 | realtime | r | 实时更新数据 |
策略类型 | 后缀缩写 |
实时全量 | _rf |
实时增量 | _ri |
15分钟全量 | _qhf |
15分钟增量 | _qhi |
小时全量累计 | _hf |
小时当天累计 | _hh |
小时增量 | _hi |
小时月增量 | _hm |
每日全量 | _df |
每日增量 | _di |
每周全量 | _wf |
每周增量 | _wi |
每月全量 | _mf |
每月增量 | _mi |
每季度全量 | _qf |
每季度增量 | _qi |
每年全量 | _yf |
每年增量 | _yi |
注意:小时分区表,根据同步方式的选择,可以分为零点截止当前小时分区落盘(hh),每小时净增量分区落盘(hi),每小时存放全量数据(_hf)
中文名 | 时间维度命名 | 时间维度命名(缩写) | 描述 |
最近1天 | 1day | _1d | 最近1天 |
最近3天 | 3day | _3d | 最近3天 |
最近7天 | 1week | _1w | 最近7天 |
最近14天 | 2week | _2w | 最近14天 |
最近30天 | 1month | _1m | 最近30天 |
最近60天 | 2month | _2m | 最近60天 |
最近90天 | 3month | _3m | 最近90天 |
最近180天 | 6month | _6m | 最近180天 |
180天以前 | before 6month | _b6m | 180天以前 |
自然周 | calendar week | _cw | 自然周 |
自然月 | calendar month | _cm | 自然月 |
自然季度 | calendar quarter | _cq | 自然季度 |
自然年 | calendar year | _cy | 自然年 |
财年 | finance year | _fy | 财年 |
半财年 | half finance year | _hfy | 半财年 |
历史截至当日 | start to day | _std | 历史截至当日 |
自然年初截至当日 | year to day | _ytd | 自然年初截至当日 |
自然季度初截至当日 | quarter to day | _qtd | 自然季度初截至当日 |
自然月初截至当日 | month to day | _mtd | 自然月初截至当日 |
自然周初截至当日 | week to day | _wtd | 自然周初截至当日 |
财年年初截至当日 | finance to day | _ftd | 财年年初截至当日 |
最近1小时 | 1hour | _1h | 最近1小时 |
0点截至当前小时 | day to hour | _dth | 0点截至当前小时 |
0点截至当前 | day to realtime | _dtr | 0点截至当前 |
小时截至当前 | hour to realtime | _htr | 小时截至当前 |
分钟截至当前 | minute to realtime | _mtr | 分钟截至当前 |
未来7天 | predict 1week | _p1w | 未来7天 |
未来4周 | predict 1month | _p1m | 未来4周 |
混合多天 | nd | _nd | 混合多天 |
报表周 | report week | _rw | 上周四到本周三 |
15分钟 | quarter hour | qh | 一刻钟 |
原则上,除了一些约定的缩写以外,每个属性/列的名字均可自行确定,英文名应尽量是字段的全称,单词全部小写,单词间用下划线。一些特殊的约定如下:
属性字段指的是文本字段,比如患者姓名,患者年龄等。这些字段不加前缀和后缀
,尽可能使用通用的英文单词表示。 如果字段直接来自上游ODS表,则保持和源系统字段名称一致;与ODPS关键字冲突时加一个”col”后缀,即:源字段名col;一些有歧义的地方可以适当加上前后缀
示例:患者入院诊断编码,在frdata.dwd_fr_inp_diagnosis表中为diag_code,如果在设计下游表字段的时候,可以使用inp_diag_code与其他诊断code区分
定义:基础指标=修饰词(可选)+原子词+时间修饰
示例:最近7天无线端支付金额 修饰词(wl)+原子词(pay_ord_amt)+时间修饰(1w) wl_pay_ord_amt_1w
计数字段指的是单量、件数、用户数等整数值型信息字段,计数主体指计数运算的对象。字段命名格式为:<计数主体>_cnt
示例:门诊挂号人次,字段名为outp_ register_cnt;
比例字段指的是占比,百分率等double值型信息字段。字段命名格式为:<计数主体>_rate
示例:如果门诊专家挂号比例名为opt_register_expert_rate
各类费用,收入相关字段。命名格式为:<标识主体>_amt
示例:‘住院手术金额’字段名为 ipt_operate_amt
标识字段指的是取值为'Y/N'的二元值字段。字段命名格式为:is_<标识主体>
示例:‘是否活跃小件员’字段名为 is_active
时间字段是指数据类型为Sting,格式YYYY-MM-DD HH-MI-SS 带有小时分钟秒等精度的字段。字段命名格式为:<业务主体>_time
示例:手术时间,字段名为operation _time
日期字段是指数据类型为String,格式为YYYYMMDD的精确到天的时间字段。字段命名格式为:<业务主体>_date
示例:‘统计日期(天)’字段名为 stat_date
分区字段的含义需要在ODPS表的情况说明中进行明确。分区深度不建议超过3层。
类型 | 字段名 | 备注 |
日/报表周/周分区 | ds | 格式为yyyymmdd 默认业务运行日期(bizdate) |
月/季度/年分区 | ds | 格式为yyyymmdd 默认月最后一天,季度最后一天,年最后一天 |
小时分区 | hh | 格式为00..23 |
分钟分区 | mm | 格式为00,15,30,45 |
业务分区 | 例如:type | 按照业务需求进行分区。例如异常类型,约定为4位长度的字符串,以大写字母ABC等开头,后面接三位数字,如 |
ODS层的数据类型基于源系统数据类型转换,转换规则如下:
Odps数据类型 | |
TINYINT/SMALLINT/ MEDIUMINT/ INTEGER/ BIGINT | Bigint |
FLOAT/ DOUBLE/ DECIMAL | Double 有精度要求可用decimal |
LONGTEXT/TEXT/VARCHAR/ CHAR | String |
DATE | String(格式:YYYYMMDD) |
DATETIME | String(格式:YYYY-MM-DD HI24:MM:SS) |
TIMESTAMP | TIMESTAMP(格式:YYYY-MM-DD HI24:MM:SS.sss) |
Oracle数据类型 | Odps数据类型 |
Number | ID转换为bigint,根据实际数据,如果是浮点数则使用double,默认使用bigint。 |
VARCHAR2/VARCHAR | String(格式:YYYYMMDD) |
DATE | String(格式:YYYY-MM-DD HI24:MM:SS) |
CLOB | String |
TT日志解析前数据类型 | TT日志解析后数据类型 |
STRING大字段 | String 所有字段 |
CDM层及ADM层的数据类型按以下标准执行:
数据类型 | 场景 |
Bigint | 数字型关联字段,如会员ID、商品ID等;没有小数位的统计值 |
Double | 有小数位的统计值 |
String | 除上述情况 |
注意:所有度量字段必须使用bigint
或者double
类型,不允许使用string;上游数据库业务主键为bigint类型,中间层设计时也用bigint.
优先考虑物理化,视图命名规范如下:<源表名>_v
测试、数据分析、临时取数等临时表命名规范:tmp_[工号]_<表名>
周期性任务建议采用分区表tmp<目标表名>[n]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。