医疗数据仓库ETL (python版本)

优化医疗数据管理:Kettle ETL 数据采集方案详解 **多源数据整合:** Kettle ETL能够从不同的医疗信息系统中提取数据,并进行有效的整合和转换,确保数据的一致性和完整性。- **数据清洗与预处理:** 在数据抽取过程中,Kettle ETL可以进行数据清洗、去重、格式化等预处理步骤,提高数据质量。- **数据安全性保障:** Kettle ETL提供了多种安全措施,如数据加密、访问控制等,保障医疗数据的安全性和隐私保护。- **数据格式和标准的差异:** 不同系统生成的数据格式和标准可能不同,需要进行统一和标准化处理。 阅读详情

2.6.1 方案的选择

总结:
1)Spark定位于内存计算框架:分布式计算RDD、实时计算spark stream、结构化查询saprkSQL、数据挖掘spark.ML
2)类比hadoop生态:分布式存储hdfs、数据仓库hive(meta、数据存储基于hdfs)、yarn分布式资源调度、nosql数据库hbase
3)综合优化方案:sparkSQL做多数据源IO接入,RDD做数据清理、转换、抽取,sparkSQL做数据结构化加载,hive提供meta和数据仓库操作,数据根本存储在hdfs

2.6.2 hive meta模式

1)内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)
2)本地模式(本地安装mysql 替代derby存储元数据)
3)远程模式(远程安装mysql 替代derby存储元数据)

2.6.3 remote集群安装

1)下载:apache-hive-2.3.4

2)Metastore server端 hive-site配置:

<configuration>

<!--hive数据库的数据文件-->
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>hdfs://hadoop01:9000/hadoop/hive/warehouse</value>
</property>

<!--metastore service: hive连接mysql,mysql存储hive meta信息-->
<property>
    <name>javax.jdo.option.ConnectionURL</name>    	<value>jdbc:mysql://192.168.0.252:3306/hivemeta?createDatabaseIfNotExist=true&amp;ch	aracterEncoding=UTF-8&amp;useSSL=false</value>
</property>

<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
</property>
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
</property>
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value></value>
</property>

</configuration>

3)Hive客户端配置:

<configuration>

<!--hive数据库的数据文件-->
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>hdfs://hadoop01:9000/hadoop/hive/warehouse</value>
</property>

<property> 
	<name>hive.metastore.local</name> 
	<value>false</value> 
</property> 

<property> 
	<name>hive.metastore.uris</name>
	<value>thrift://192.168.0.101:9083</value> 
</property>

</configuration>[Hive on spark 只需要meta store server不需要hive客户端,spark已经集成hiveCONTEXT到sqlCONTEXT中?]

4)Hive环境变量:hive-env.sh(服务端与客户端都需要)

JAVA_HOME=/data/software/jdk1.8.0_191

HADOOP_HOME=/data/app/hadoop/hadoop-2.7.7
HADOOP_CONF_DIR=/data/app/hadoop/hadoop-2.7.7/etc/hadoop

HIVE_HOME=/data/app/hadoop/apache-hive-2.3.4
HIVE_CONF_DIR=/data/app/hadoop/apache-hive-2.3.4/conf

备注最终/etc/profile:
export JAVA_HOME=/data/software/jdk1.8.0_191
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export HADOOP_HOME=/data/app/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export SPARK_HOME=/data/app/hadoop/spark-2.4.0-bin-hadoop2.7
export YARN_HOME=${HADOOP_HOME}
export YARN_CONF_DIR=${YARN_HOME}/etc/hadoop
export HIVE_HOME=/data/app/hadoop/apache-hive-2.3.4
export HIVE_CONF_DIR=/data/app/hadoop/apache-hive-2.3.4/conf

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HIVE_HOME/bin[/etc/profile全局配置,其他env.sh使用可export或者]

5)Hive on spark

客户端hive-site.xml copy到spark节点conf/

6)SparkSQL启动数据仓库

./spark-2.4.0-bin-hadoop2.7/bin/spark-sql --master spark://hadoop01:7077 --conf  spark.sql.warehouse.dir=hdfs://hadoop01:9000:/hadoop/hive/warehouse

2.6.4 数据仓库ETL
1)extract

sql_str = "(select a.*, ROWNUM rownum__rn from his_test.op_patient_cost a) b"
ct = 58475050

# extract
  '''
  extract操作:oracle数据类型与hive数据类型对照:
    oracle ----- hive
    VARCHAR2     string
    VARCHAR      string
    NUMBER       decimal/int
    DATE         timestamp
    DATETIME     timestamp
    CLOB         string
    BLOB         binary
    OTHER        string    
    '''
    df = spark.read \
        .format("jdbc") \
        .option("url", "jdbc:oracle:thin:@192.168.0.251:1521:orcl") \
        .option("dbtable", sql_str) \
        .option("user", "****") \
        .option("password", "***") \
        .option("fetchSize", 100) \
        .option("partitionColumn", "rownum__rn") \
        .option("numPartitions", 2) \
        .option("lowerBound", 0) \
        .option("upperBound", ct) \
        .load() \
        .drop("rownum__rn")
    # df.printSchema()

2 ) transform

  • 选取列、列名处理

    # oracle列名转换为小写:datframe是schema RDD分布式存储数据,避免使用原生python迭代-schema信息是存储单节点
    #  df[name].alias(name.lower()),alias返回column配合select使用
    names = df.columns
      for name in names:
          df = df.withColumnRenamed(name, name.lower()
    
  • 非空处理

     df = df.na.fill("")
     df = df.na.fill({"is_insurup": 0, "tsort": 0, "comb_cost_count": 0, "order_type": 0,
                      "cost_money": 0.0, "prefer_money" : 0.0, "tstatus": 0})
    
  • 删除不参与分析列

     df = df.drop("group_no", "comb_random", "remark", "is_corr", "is_insurup", "receipt_print_flag", "send_mtl_flag")
    
  • 数据类型转换

     df = df.withColumn('order_type', df.order_type.cast(IntegerType()))
     df = df.withColumn('cost_count', df.cost_count.cast(IntegerType()))
     df = df.withColumn('is_comb', df.is_comb.cast(IntegerType()))
     # dfc = dfc.withColumn('is_insurup', dft.is_insurup.cast(IntegerType()))
     df = df.withColumn('tsort', df.tsort.cast(IntegerType()))
     df = df.withColumn('tstatus', df.tstatus.cast(IntegerType()))
     df = df.withColumn('cost_tstatus', df.cost_tstatus.cast(IntegerType()))
     df = df.withColumn('payment_tstatus', df.payment_tstatus.cast(IntegerType()))
     df = df.withColumn('is_append', df.is_append.cast(IntegerType()))
     # dfc = dfc.withColumn('send_mtl_flag', dft.send_mtl_flag.cast(IntegerType()))
     df = df.withColumn('comb_cost_count', df.comb_cost_count.cast(IntegerType()))
     # dfc = dfc.withColumn('is_corr', dft.is_corr.cast(IntegerType()))
     # df.printSchema()
    
  • 刷选

     # 可以使用&或|对两个bool列进行逻辑运算,但必须要用圆括号括起,限定运算顺序
     df = df.filter((df.tstatus == 2) & (df.cost_money > 0.0))
    
  • 聚合

     # 聚合:按费用业务类型分组聚合
     df_order = df.groupBy("order_type").agg(F.sum(df.cost_money - df.prefer_money), F.max(df.cost_money - df.prefer_money))
     df_order = df_order.withColumnRenamed("sum((cost_money - prefer_money))", "sum_group_order")
     df_order = df_order.withColumnRenamed("max((cost_money - prefer_money))", "max_group_order")
     df_order.show(200, truncate=False)
    
     # 聚合:按诊断科室分组聚合
     df_depart = df.groupBy("op_depart_code").agg(F.sum(df.cost_money - df.prefer_money), F.max(df.cost_money - df.prefer_money))
     df_depart = df_depart.withColumnRenamed("sum((cost_money - prefer_money))", "sum_group_depart")
     df_depart = df_depart.withColumnRenamed("max((cost_money - prefer_money))", "max_group_depart")
     df_depart.show(200, truncate=False)
    
  • 窗口聚合

     class_window = Window.partitionBy("order_type").orderBy(F.desc("cost_money"))  # 降序排列
     class_rank = F.rank().over(class_window)
     # class_row_number = row_number().over(class_window)  # 窗口函数(xxx).over(window),就是一般的用法
     df_order_rank = df.withColumn("gby_ordertype_oby_desc", class_rank)
     df_order_rank.show(200, truncate=False)
    

3)load

 '''
    load操作:
    '''
    # spark.sql("CREATE DATABASE outpatient_stat")
    spark.sql("use outpatient_stat")

    # df_order.createOrReplaceTempView("outpatient_cost_by_order")
    # df_depart.createOrReplaceTempView("outpatient_cost_by_depart")
    # spark.sql("select * from outpatient_cost_by_order").show(200, truncate=False)

    # 保存数据到数据仓库
    df_order.write.mode("overwrite").format("parquet").saveAsTable(
        "outpatient_stat.outpatient_cost_by_order")

    df_depart.write.mode("overwrite").format("parquet").saveAsTable(
        "outpatient_stat.outpatient_cost_by_depart")

    df_order_rank.write.mode("overwrite").format("parquet").saveAsTable(
        "outpatient_stat.outpatient_cost_by_rank")

    spark.sql("SELECT * FROM outpatient_stat.outpatient_cost_by_order").show(200, truncate=False)

    spark.sql("SELECT * FROM outpatient_stat.outpatient_cost_by_depart").show(200, truncate=False)

    spark.sql("SELECT * FROM outpatient_stat.outpatient_cost_by_rank").show(200, truncate=False)
医疗数据之数据仓库的创建 在之前开篇及数据仓库的方案中,我都提及到数据仓库对于管理型的数据(或对于BI系统)是至关重要的,所以这篇就分享一下我在实际工作中怎么创建数据仓库的,如有不足之处,请指正。 阅读详情

相关推荐

深入探索数据库领域的数据仓库架构

本文旨在为读者提供关于数据仓库架构的全面理解,涵盖从传统数据仓库到现代云数据仓库的演进过程。我们将重点讨论数据仓库的设计原则、实现技术和最佳实践。文章首先介绍数据仓库的基本概念,然后深入探讨其架构设计,接着通过实际案例展示实现方法,最后讨论未来发展趋势。数据仓库(Data Warehouse): 面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持管理决策: 数据抽取、转换和加载的过程: 在线分析处理系统,支持复杂分析查询云数据仓库普及。

2502_91592937的博客 997

医疗数据之医院管理型数据仓库解决方案

0、 方案背景 整个医疗数据是一个庞大而又复杂的数据集,对于管理者来说,想要从这个繁琐的原始数据找到决策的依据,是比较困难的!所以,创建数据仓库,是一个有效的解决方案。数据仓库:将现有HIS、LIS、PACS、OA、病案系统、资产管理系统等多种业务和管理系统的数据应用联机业务、数据的清洗,转换,数据仓库、多维数据、数理统计和数据挖掘等技术,以生动友好的界面形式展现数据分布特征,发现数据中的显性或...

医疗数据 9689

深度剖析大数据领域结构化数据的应用场景

随着企业数字化转型的深入,结构化数据作为最规范、易处理的数据形态,在大数据分析中扮演核心角色。本文聚焦结构化数据的技术本质、存储架构、处理流程及其在典型行业的应用模式,通过技术原理与实战案例的结合,帮助读者建立从数据建模到业务落地的完整认知体系。本文遵循"概念解析→技术架构→算法实现→行业应用→未来趋势"的逻辑,通过数学模型、代码示例和可视化工具,逐层拆解结构化数据的核心价值。特别强化"技术-业务"映射关系,确保理论落地的可操作性。结构化数据。

AI智能探索者的博客 211

PyETL:一个强大的Python ETL框架

PyETL:一个强大的Python ETL框架 1. 项目的基础介绍和主要的编程语言 PyETL是一个基于Python 3.6+的ETL(Extract, Transform, Load)框架,旨在简化数据从源系统到目标系统的提取、转换和加载过程。该项目由taogeYT开发并托管在GitHub上,是一个开源项目,遵循Apache-2.0许可证。 2. 项目的核心功能 PyETL框架提供了丰富的功能...

gitblog_01220的博客 912

大数据领域数据仓库的ETL调度优化

在大数据时代,数据仓库作为企业数据的核心存储和管理平台,承载着海量数据的集成、存储和分析任务。ETL过程是数据仓库建设的关键环节,它负责从多个数据源抽取数据,进行清洗、转换和集成,最终加载到数据仓库中。然而,随着数据量的不断增长和业务需求的日益复杂,ETL调度面临着性能瓶颈、资源利用率低等问题。本文的目的在于探讨大数据领域数据仓库的ETL调度优化策略,提高ETL过程的效率和可靠性,降低系统资源消耗,确保数据的及时、准确加载。

大数据洞察的博客 772

大数据领域数据仓库在医疗科技领域的应用前景展望

随着医疗科技的飞速发展,医疗数据呈现出爆炸式增长。这些数据包含了患者的基本信息、病历记录、检查检验结果、治疗方案等多方面的内容。然而,这些数据往往分散在不同的医疗机构、不同的信息系统中,存在数据格式不统一、数据质量参差不齐等问题。大数据领域的数据仓库技术为解决这些问题提供了有效的途径。本文的目的在于探讨数据仓库在医疗科技领域的应用前景,具体范围涵盖数据仓库在医疗数据整合、数据分析、临床决策支持、疾病预测等方面的应用,以及相关技术的发展趋势和面临的挑战。

移动开发前沿的博客 822

使用 SQL + Python 构建可扩展的 ETL

本文着眼于构建一个模块化的 ETL 管道,该管道使用 SQL 转换数据并使用 Python 和 R 将其可视化。

weixin_39915649的博客 622

大数据ETL流程详解:从原始数据到分析报表

在当今数字化时代,企业和组织积累了海量的数据。这些原始数据往往分散在不同的系统和数据源中,格式各异且存在大量噪声和不一致性。大数据ETL流程的目的就是将这些原始数据进行整合、清洗和转换,使其成为高质量、结构化的数据,以便进行后续的分析和决策。本文的范围涵盖了从原始数据的抽取,到数据的转换处理,再到数据加载到目标数据库或数据仓库的整个ETL过程,最终实现生成分析报表的目标。本文将按照以下结构进行组织:首先介绍ETL流程的核心概念与联系,通过直观的示意图和流程图展示其架构;

AI架构师小马 1166

数据库领域:SQL 数据仓库的 ETL 过程

ETL(Extract-Transform-Load)是数据仓库建设的核心环节,负责将分散的源系统数据经过清洗、转换后加载到目标数据仓库中。本文旨在全面解析SQL数据仓库环境下的ETL过程,涵盖从基础概念到高级实现技术的各个方面。文章首先介绍ETL的基本概念和核心组件,然后深入探讨技术实现细节,包括架构设计、算法原理和数学模型。随后提供实际项目案例和代码实现,最后讨论工具选择和发展趋势。ETL:提取(Extract)、转换(Transform)、加载(Load)三个数据处理步骤的简称数据仓库。

2502_91592937的博客 510

大数据领域 OLAP 在医疗科技领域的应用探索

医疗行业正经历着数字化转型的浪潮,每天产生海量的临床数据、影像数据、基因组数据和运营数据。如何从这些数据中提取有价值的信息,支持临床决策、医学研究和医院管理,成为医疗科技发展的关键问题。OLAP技术作为大数据分析的重要工具,能够帮助医疗专业人员快速、灵活地从多维度分析医疗数据,发现隐藏的模式和趋势。本文旨在全面探讨OLAP技术在医疗领域的应用场景、技术实现和最佳实践,为医疗信息化建设提供技术参考。本文首先介绍医疗大数据的特点和OLAP的基本概念,然后深入分析OLAP的技术原理和实现方式。

架构师的AI之路,分享AI应用开发架构的学习与实践。 671

企业级大数据BI解决方案:从数据仓库到可视化分析

在当今数字化时代,企业面临着海量的数据,如何从这些数据中提取有价值的信息,为企业的决策提供支持,成为了企业发展的关键。企业级大数据BI解决方案旨在帮助企业整合、管理和分析大量的数据,通过构建数据仓库和进行可视化分析,将复杂的数据转化为直观的图表和报表,使企业管理者能够快速、准确地了解企业的运营状况,做出明智的决策。本解决方案的范围涵盖了从数据的收集、存储、处理到可视化展示的整个过程。

AI架构师小马 963

数据开发 数据仓库 ETL 报表开发 数据分析都是干什么的?

目前,大数据技术已经广泛应用于金融、电商、医疗、物流等领域,对这些行业的发展起到了重要的推动作用。未来,随着人工智能、区块链等技术的不断发展,大数据技术的应用前景更加广阔。需要注意的是,这些岗位之间的界限并不是非常明确,有些岗位的职能可能会涉及到其他岗位的工作。因此,在大数据领域,综合能力和跨界合作能力也是非常重要的。同时,随着技术的不断发展和变革,学习和掌握新的技能和工具也是这些岗位必备的素质之一。在大数据领域,数据开发、数据仓库、ETL、报表开发、数据分析、数据建模和数据产品等岗位扮演着重要的角色。

weixin_45017098的博客 635

数据仓库与5G应用:海量连接数据处理方案

在当今数字化的时代,5G技术的广泛应用带来了前所未有的海量连接数据。这些数据蕴含着巨大的价值,但如何对它们进行有效的处理、存储和分析,成为了一个亟待解决的问题。数据仓库作为一种能够集中存储和管理大量数据的技术,与5G应用相结合,可以为海量连接数据提供一套完整的处理方案。本文的目的就是深入探讨这种结合方式,介绍相关的技术原理和实际操作方法,范围涵盖了从数据仓库和5G应用的基本概念到具体的项目实战和未来发展趋势。本文将首先介绍数据仓库和5G应用的核心概念,通过生动的比喻让大家轻松理解。

AI智能探索者的博客 717

python etl 大猩猩_大数据ETL实践探索 ---- 使用python 进行 快速EDA综合可视化

可视化处理的前置处理数据清洗对于可视化的过程,拿到一份数据,我们首先要做的是进行数据清洗。我在这篇博文:数据清洗的目的,方法介绍了数据清洗的一个通用步骤。针对这个通用流程,我们 准备了一份医疗领域 的通用 样例数据,准备进行分析探查以及基本的可视化工作。使用pandas 对数据进行处理通过文件加载,我们首先需要将文件中的数据转化为pandas 的dataframe ,假设我们有一个脱密后的HIS数...

weixin_39965161的博客 239

揭秘大数据领域 OLAP 的数据仓库优化

在当今大数据时代,企业和组织积累了海量的数据。OLAP 作为一种强大的数据分析技术,能够帮助用户从多个维度对数据进行快速、灵活的分析。数据仓库则是 OLAP 的重要基础,它存储了大量的历史数据和汇总数据。然而,随着数据量的不断增长和分析需求的日益复杂,数据仓库的性能面临着巨大的挑战。本文的目的就是深入探讨大数据领域 OLAP 数据仓库的优化策略,提高数据仓库的查询性能、存储效率和可维护性。

2502_91592937的博客 447

大数据领域数据仓库的数据分析方法

随着企业数据量以年均40%的速度爆炸式增长(Gartner, 2023),传统数据库已难以支撑复杂的数据分析需求。数据仓库作为面向主题、集成、稳定且随时间变化的数据集合,成为企业级数据分析的核心基础设施。本文聚焦数据仓库环境下的主流数据分析方法,覆盖从数据整合(ETL)、存储建模(星型/雪花模型)到多维分析(OLAP)、可视化呈现(BI工具)的完整技术链条,结合Hadoop/Spark等大数据技术栈,提供可落地的工程实践方案。数据仓库(Data Warehouse)

大数据洞察的博客 1127

谈大数据领域数据仓库的数据清洗流程

想象你是一家蛋糕店的老板,每天收到来自不同供应商的原料:面粉袋上有的标"kg",有的标"斤";鸡蛋盒里混着碎壳和过期蛋;sugar 袋子上有的写"白糖",有的写"蔗糖",还有的拼写错误成"sugur"。如果直接把这些原料扔进搅拌机,烤出来的蛋糕要么太甜,要么没熟,甚至可能让顾客拉肚子。数据仓库就像这家蛋糕店的"中央厨房",而数据清洗就是"原料预处理"——在把数据用于分析或决策前,去除杂质、统一格式、修复缺陷,确保数据"干净可用"。解释数据清洗在数据仓库中的核心地位(为什么必须做)

AI天才研究院 1325

大数据领域数据仓库的实时数据同步策略

在当今数字化时代,大数据已经成为企业决策和业务发展的重要驱动力。数据仓库作为大数据管理的核心组件,用于存储和整合企业的各种数据。然而,随着业务的快速发展,对数据的实时性要求越来越高,传统的数据同步方式已经无法满足需求。因此,本文的目的是深入探讨大数据领域数据仓库的实时数据同步策略,为企业提供有效的解决方案。本文的范围涵盖了实时数据同步的基本概念、核心算法原理、具体操作步骤、数学模型、项目实战、实际应用场景等方面。通过对这些内容的详细阐述,帮助读者全面了解和掌握大数据领域数据仓库的实时数据同步策略。

AI Agent Harness Engineering 942
上一篇: 医疗实时流日志分析
下一篇: 开源精选 - Spark个性化推荐算法
架构师老狼
博客等级 码龄14年 44粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值