数据管理基础:从结构化到数据湖
如今,由于信息包含珍贵的信息,正确有效的数据管理尤为重要。在本文中,我们将讨论数据管理的一些基础知识,从结构化数据和非结构化数据的区别到 OLAP 和 OLTP 另外,我们还将讨论它们之间的差异。 ETL/ELT、关键概念,如数据湖和数据仓库。
一 结构化数据和非结构化数据
了解结构化数据与非结构化数据的区别在数据前后文中尤为重要。前一种是指数据库表等具有特定定义格式的数据类型,其中表中的每一个字段都包含特定类型的数据(字符串、整数等)。
另一方面,非结构化数据是一种不遵循之前定义的数据类型,但它非常灵活,因此很难组织在表格或数据库中,如电子邮件、音频或视频文件。

图 1. 结构化数据和非结构化数据的示例
现在,这两种类型的数据都起着非常重要的作用,各有利弊。 有些是:

表 结构化与非结构化数据的比较
这个例子反映了结构化数据和非结构化数据的区别。结构化数据是根据定义的字段组织的,而非结构化数据是纯文本,提取相关信息可能需要额外的分析。
# 从 CSV 文件载入结构化数据
with open ( 'clients.csv' , mode= 'r' ) as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
first_name = row[ 'first_name' ]
last_name = row[ 'last_name' ]
age = row[ 'age' ]
email = row[ 'email' ]
print ( "First name:" , first_name)
print ( "Last name:" , last_name)
print ( "Age:" , age)
print ( "Email:" , email)
# 导出结构化数据:
# First name: John
# Last name: Doe
# Age: 35
# Email: john.doe@example.com
# …
# 从 txt 文件包含非结构化数据(用户评论)
with open ( 'customer_views.txt' , mode= 'r' ) as txt_file:
意见 = txt_file.read().split( '\n\n' )
for i, opinion in enumerate (opinions, 1 ):
print ( f"Opinion {i} :" )
# 非结构化数据导出:
# 意见 1:今日,我在您的商店度过了一段美好的时光。工作人员非常友好,乐于助人。
# …
二 数据仓库
数据仓库是一个以结构化和集中化的方式存储大量数据的系统。它们允许将来自不同来源的数据转换整合到一个单一和连贯的地方,以便进行后续分析,从而获得意见并支持决策。
为了提高数据质量,数据仓库通常需要清理和验证流程来提高质量和完整性,这一点非常重要。但不利的一面是,数据仓库的维护成本通常很高,因为它必须满足以上几点。
数据架构中除数据仓库外,还有其它重要部件:
数据集市:这些是数据仓库的子集,旨在满足特定职责领域(如销售或财务(部门)的分析需求,或者可以根据地理区域或产品线(分布式)建立。
Data Vault:这是一个由三个部分组成的数据仓库设计模型:
中心:代表关键概念,例如客户,通常在单个表中建模,具有唯一的标识符(主键)。
链接:表示中心之间的链接或关系,通常用作独立的表和外键。
卫星:表示中心或链接的描述特征,通常用作独立的表和外键。
该设计有利于数据审计、数据传承和新数据集成,提供更加灵活和可扩展的能力。
三 数据湖
数据湖是一个集中的数据存储库,允许大量数据以原始格式存储、管理和共享(即未经事先处理的数据)。这就是为什么数据湖可以以不同的格式(结构化、半结构化、非结构化数据)存储数据,甚至不知道未来会如何使用,而数据仓库需要提前转换数据,使其符合定义。
数据湖的灵活性使它成为一个有价值数据的组织理想系统,希望在传统系统的预处理中实施高级分析并找到它。此外,由于结构不僵化,数据探索和分析敏捷,没有限制。
最后,数据湖成为一个集中且高度可扩展的区域,集成来自不同来源和格式数据的选项,用于存储来自整个组织的原始数据,即它们作为组织中不同团队和领域之间合作的交汇处,以提高部门之间的协同效应和基于可靠性和全面数据的决策。
实施数据湖的良好实践
在企业环境中,数据湖的实施对数据管理和分析的成功尤为重要。下面是一些有效、高效地实施数据湖的好实践。
将数据湖划分为多层(或区域)
为了提高数据湖中数据的组织性和可访问性,建议将其分为多层,每层包含不同目的的特定类型的数据。最常见的层是:
原始/黄铜/贴源层:顾名思义,这一层包括原始形式的数据,即从不同数据库接收的数据。这一层包括任何未转换的数据,因此作为数据提取的入口点。此外,这一层的数据永久存储(不可改变)并成为历史记录。
一致/标准化层:一般而言,原始数据的格式不同(例如 CSV、JSON 等等)输入。这一层将所有这些格式转换成标准格式,通常是 Parquet,为了进一步分析,我们可以获得一致且优化的数据,这是一种对大量数据进行优化的存储类型。
清洁/银/处理层:这一层充当过滤器,因为在这里进行数据转换(清洁、集成和合并),以获得方法和格式统一的层。此外,它可以规范数据,并添加元数据,以便于可追溯性和高效搜索。
表示层/金层/网络层/网络层:利用上一层的清理数据,将业务规则应用到数据中,这样终端用户(如数据科学家或分析应用程序)就可以使用这些信息。它还可以通过应用程序聚集或摘要来应用转换来改进和改进数据。
沙盒/探索层:这一层可以有选择地开发,因为它通常是原始层的副本,可以读取和修改数据。从数据科学家的角度来看,这是一个有用的层,因为它可以在不丢失任何信息(不转换)的情况下探索数据,并且具有很大的灵活性。除了作为可选层,如果有必要,还可以构建多个这样的层。
图 2.数据湖层
创建文件夹结构
另一个好方法是在数据湖中创建文件夹结构,以便有效浏览数据。根据组织的兴趣,这个文件夹结构可以通过多种方式实现:
数据隔离:数据分离是根据数据源、数据类型或业务单元进行的。为了方便数据科学家浏览数据,他们可以搜索与其用例相关的数据。
密钥管理:若数据必须具有不同级别的权限,则使用密钥管理,以便组织中并非所有用户都能访问所有数据。在这种情况下,访问策略必须定义。
合规性要求:在不同的文件夹中存储敏感数据可能很有趣,这样他们就有了更严格的隐私和安全策略。
备份和灾难恢复:根据备份频率,可以有不同类型的文件夹。例如,有一个经常备份的文件夹,包括永远不会丢失的数据,或者相反,有一个永远不会备份的文件夹,因为它包含了不需要存储的数据,因为它可以重新生成。
实行审计与诚信控制
对任何一个数据湖来说,设计一系列的机制来保证数据在从一层传输到另一层时不会发生变化尤为重要。这类机制是:
数据审计:为了保证可追溯性,存储对数据进行了全部修改。
完整性检查:在整个转换过程中,通过一系列自动检查来检查数据的一致性。例如,如果格式转换已经实施,则必须验证源中出现的文档数量是否与目标中出现的文档数量相同,如果没有,则必须重新启动转换过程。
四 OLAP 和 OLTP
OLAP(在线分析处理)和 OLTP(在线事务处理)是两个数据处理系统,允许与数据有效交互。虽然它们都是为满足特定和互补的需求而设计的,但我们将在下面看到它们。
一方面,OLAP 它是一个数据处理系统,致力于快速高效地分析大量数据。它是一种旨在对多维数据集进行复杂查询的技术。这些数据可能已经从不同的来源合并、/或聚集,并使用优化的存储和处理技术来确保快速响应时间。
它还提供对比分析、预测、趋势和分段分析的能力,并提供快速不同粒度探索数据的互动工具,从而可以根据需要进行非常深入的分析(数据钻取)或更多的摘要(总结)分析。
因此,OLAP 可以用来提取存储在数据仓库中的相关数据的有用信息,这些信息可以用来支持战略决策。
另一方面,OLTP 它是一个用于即时交易管理的数据处理系统。它是一种主要用于操作数据库系统的技术,存储销售、订单、支付等各种日常交易。
经过改进,这些系统几乎可以在没有延迟的情况下立即支持大量交易。此外,它还保证了这些交易的完整性和并发性,即确保所有交易都将被执行,数据库将始终保持一致,并且可以并行执行多个交易。
因此,OLTP 有利于为实时交易提供可靠的环境,确保数据插入、修改和删除操作的快速、安全和一致执行。

图 3. OLAP 和 OLTP
下面的例子,我们可以看到 OLAP 和 OLTP 查询之间的差异。OLAP 查询通常用于分析目的,例如每月获得总销售额, OLTP 查询侧重于单一记录和实时更新,例如销售后库存缩水。
# OLAP 查询:按月分析销售额
olap_query = """
SELECT month, SUM(total_sale)
FROM sales_table
GROUP BY month;
"""
# OLTP 查询:库存更新
oltp_query = """
UPDATE inventory_table
SET amount = amount - 1
WHERE product_id = 'product_to_sell';
"""
五 ETL/ELT
为了从数据中获得价值,必须根据需要进行数据处理和优化。这通常涉及集成和处理数据的强大过程,使组织能够将原始数据转换成可操作和有用的信息,从而有助于支持决策。
ETL 和 ELT 所有这些方法都允许我们进行数据处理,但是,这两种方法之间的关键区别在于操作数据的执行顺序。 ETL 按顺序执行数据的方法如下:
1.提取(E):提取阶段包括从不同来源获取数据,可以是数据库、应用程序、文件系统等。在这个阶段,信息是原始的,也就是说,它们只存储在没有任何类型处理的情况下。
2.转换(T):转换阶段是为了获得高质量、连贯的数据层,对之前提取的数据进行所有必要的操作。操作可能包括清理错误或重复的数据、格式转换、聚集等。
3.载入 (L):载入阶段包括所有载入已转换为数据库表或其他类型数据存储(如数据仓库)的数据。在这个阶段,数据结构化,优化分析和后续查询。
对于 ELT 就操作顺序而言,操作顺序是不同的:
1.提取(E):从各种来源提取数据,例如 ETL。
2.载入(L):直接存储数据,无需转换。
3.转换(T):对于存储的数据进行转换,将涉及使用数据分析工具,复杂性 SQL 查询或高级分析过程。
图 4. ETL 和 ELT 工作流程
正如我们所看到的,ETL 和 ELT 这是一种相似的方法,但是它们在实施转换的时间和方法上是不同的。咱们来看看它们的一些优点和缺点:
表 2.ETL 与 ELT
基于这些方法的特点,我们可以说 ETL 由于数据在载入前进行转换,以保持数据的一致性和完整性,所以用于数据仓库, ELT 在数据湖中使用是有意义的,因为数据以原始的方式存储,并且根据需要进行转换。
现在我们知道了这两种方法,让我们看一个能说明根本区别的方法。 Python 示例。
导入pandas为pddas
## ETL
# 步骤 1:提取数据
raw_data = pd.read_csv( 'sales_data.csv' )
# 步骤 2:转换数据
raw_data[ 'Date' ] = pd.to_datetime(raw_data[ 'Date' ])
perceived_data = raw_data.groupby(raw_data[ 'Date' ].dt.month). sum ()
# 步骤 3:载入数据
perceived_data.to_csv( 'sales_per_month.csv' )
import pandas as pd
## ELT
# 步骤 1:提取数据
raw_data = pd.read_csv( 'sales_data.csv' )
# 步骤 2:载入数据
data_lake = raw_data.copy() # 模拟数据湖,存储原始数据
# 步骤 3:转换数据(在数据库中)
data_lake[ 'Date' ] = pd.to_datetime(data_lake[ 'Date' ])
perceived_data = data_lake.groupby(data_lake[ 'Date' ].dt.month). sum ()
结论
本文从结构化数据和非结构化数据的区别到数据仓库和数据湖的技术及其良好的实践,回顾了数据管理的基础知识。此外,我们还强调 OLAP 和 OLTP 它们之间的差异,以及 ETL/ELT 过程的相关性和代码示例或应用这些知识的用例。
本文来自微信微信官方账号“数据驱动智能”(ID:Data作者:晓晓,36氪经授权发布,_0101)。
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com




