Data Lake์ Data Warehouse
๊ฐ์
๋ฐ์ดํฐ ์ ์ฅ์ ์ํคํ
์ฒ๋ ์กฐ์ง์ ๋ฐ์ดํฐ ์ ๋ต์ ํต์ฌ์ ์
๋๋ค. Data Lake, Data Warehouse, ๊ทธ๋ฆฌ๊ณ ๋์ ๊ฒฐํฉํ Lakehouse ์ํคํ
์ฒ์ ํน์ฑ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํฉ๋๋ค.
1. Data Warehouse
1.1 ๊ฐ๋
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Warehouse โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ํน์ง: โ
โ - ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ (์คํค๋ง ์ ์ ํ์) โ
โ - Schema-on-Write (์ฐ๊ธฐ ์ ์คํค๋ง ์ ์ฉ) โ
โ - ๋ถ์ ์ต์ ํ (OLAP) โ
โ - SQL ๊ธฐ๋ฐ ์ฟผ๋ฆฌ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Data Warehouse โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ Dim Tables โ Fact Tables โโ โ
โ โ โ โโโโโโโโโโโโ โ โโโโโโโโโโโโ โโ โ
โ โ โ โdim_date โ โ โfact_salesโ โโ โ
โ โ โ โdim_productโ โ โfact_ordersโ โโ โ
โ โ โ โdim_customerโ โ โโ โ
โ โ โ โโโโโโโโโโโโ โ โโโโโโโโโโโโ โโ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1.2 ์ฃผ์ ์๋ฃจ์
| ์๋ฃจ์
|
์ ํ |
ํน์ง |
| Snowflake |
ํด๋ผ์ฐ๋ |
๋ถ๋ฆฌ๋ ์คํ ๋ฆฌ์ง/์ปดํจํ
, ์๋ ํ์ฅ |
| BigQuery |
ํด๋ผ์ฐ๋ (GCP) |
์๋ฒ๋ฆฌ์ค, ํํ๋ฐ์ดํธ ๊ท๋ชจ |
| Redshift |
ํด๋ผ์ฐ๋ (AWS) |
Columnar, MPP ์ํคํ
์ฒ |
| Synapse |
ํด๋ผ์ฐ๋ (Azure) |
ํตํฉ ๋ถ์ ํ๋ซํผ |
| PostgreSQL |
์จํ๋ ๋ฏธ์ค |
์๊ท๋ชจ, ์คํ์์ค |
1.3 Data Warehouse SQL ์์
-- Snowflake/BigQuery ์คํ์ผ ๋ถ์ ์ฟผ๋ฆฌ
-- ์๋ณ ๋งค์ถ ํธ๋ ๋
SELECT
d.year,
d.month,
d.month_name,
SUM(f.sales_amount) AS total_sales,
COUNT(DISTINCT f.customer_sk) AS unique_customers,
AVG(f.sales_amount) AS avg_order_value,
-- ์ ์ ๋๋น ์ฑ์ฅ๋ฅ
(SUM(f.sales_amount) - LAG(SUM(f.sales_amount)) OVER (ORDER BY d.year, d.month))
/ NULLIF(LAG(SUM(f.sales_amount)) OVER (ORDER BY d.year, d.month), 0) * 100
AS mom_growth_pct
FROM fact_sales f
JOIN dim_date d ON f.date_sk = d.date_sk
WHERE d.year >= 2023
GROUP BY d.year, d.month, d.month_name
ORDER BY d.year, d.month;
-- ๊ณ ๊ฐ ์ธ๊ทธ๋จผํธ๋ณ LTV (Life Time Value)
WITH customer_metrics AS (
SELECT
c.customer_sk,
c.customer_segment,
MIN(d.full_date) AS first_purchase_date,
MAX(d.full_date) AS last_purchase_date,
COUNT(DISTINCT f.order_id) AS total_orders,
SUM(f.sales_amount) AS total_revenue
FROM fact_sales f
JOIN dim_customer c ON f.customer_sk = c.customer_sk
JOIN dim_date d ON f.date_sk = d.date_sk
GROUP BY c.customer_sk, c.customer_segment
)
SELECT
customer_segment,
COUNT(*) AS customer_count,
AVG(total_orders) AS avg_orders,
AVG(total_revenue) AS avg_ltv,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_revenue) AS median_ltv
FROM customer_metrics
GROUP BY customer_segment
ORDER BY avg_ltv DESC;
2. Data Lake
2.1 ๊ฐ๋
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Lake โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ํน์ง: โ
โ - ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ (๊ตฌ์กฐํ, ๋ฐ๊ตฌ์กฐํ, ๋น๊ตฌ์กฐํ) โ
โ - Schema-on-Read (์ฝ๊ธฐ ์ ์คํค๋ง ์ ์ฉ) โ
โ - ์๋ณธ ๋ฐ์ดํฐ ๋ณด์กด โ
โ - ์ ๋น์ฉ ์คํ ๋ฆฌ์ง โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Data Lake โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Raw Zone (Bronze) โ โ โ
โ โ โ - ์๋ณธ ๋ฐ์ดํฐ (JSON, CSV, Logs, Images) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Processed Zone (Silver) โ โ โ
โ โ โ - ์ ์ ๋ ๋ฐ์ดํฐ (Parquet, Delta) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Curated Zone (Gold) โ โ โ
โ โ โ - ๋ถ์/ML ์ค๋น ๋ฐ์ดํฐ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.2 ์ฃผ์ ์คํ ๋ฆฌ์ง
| ์คํ ๋ฆฌ์ง |
ํด๋ผ์ฐ๋ |
ํน์ง |
| S3 |
AWS |
๊ฐ์ฒด ์คํ ๋ฆฌ์ง, ๋์ ๋ด๊ตฌ์ฑ |
| GCS |
GCP |
Google Cloud Storage |
| ADLS |
Azure |
Azure Data Lake Storage |
| HDFS |
์จํ๋ ๋ฏธ์ค |
Hadoop Distributed File System |
2.3 Data Lake ํ์ผ ๊ตฌ์กฐ
s3://my-data-lake/
โโโ raw/ # Bronze ๋ ์ด์ด
โ โโโ orders/
โ โ โโโ year=2024/
โ โ โ โโโ month=01/
โ โ โ โ โโโ day=15/
โ โ โ โ โ โโโ orders_20240115_001.json
โ โ โ โ โ โโโ orders_20240115_002.json
โ โโโ customers/
โ โ โโโ snapshot_20240115.csv
โ โโโ logs/
โ โโโ app_logs_20240115.log
โ
โโโ processed/ # Silver ๋ ์ด์ด
โ โโโ orders/
โ โ โโโ year=2024/
โ โ โโโ month=01/
โ โ โโโ part-00000.parquet
โ โโโ customers/
โ โโโ part-00000.parquet
โ
โโโ curated/ # Gold ๋ ์ด์ด
โโโ fact_sales/
โ โโโ year=2024/
โ โโโ month=01/
โโโ dim_customers/
โโโ current/
# PySpark๋ก Data Lake ๊ณ์ธต ์ฒ๋ฆฌ
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
spark = SparkSession.builder \
.appName("DataLakeProcessing") \
.getOrCreate()
# Raw โ Processed (Bronze โ Silver)
def process_raw_orders():
# Raw JSON ์ฝ๊ธฐ
raw_df = spark.read.json("s3://my-data-lake/raw/orders/")
# ์ ์
processed_df = raw_df \
.filter(col("order_id").isNotNull()) \
.withColumn("processed_at", current_timestamp()) \
.dropDuplicates(["order_id"])
# Parquet์ผ๋ก ์ ์ฅ
processed_df.write \
.mode("overwrite") \
.partitionBy("year", "month") \
.parquet("s3://my-data-lake/processed/orders/")
# Processed โ Curated (Silver โ Gold)
def create_fact_sales():
orders = spark.read.parquet("s3://my-data-lake/processed/orders/")
customers = spark.read.parquet("s3://my-data-lake/processed/customers/")
fact_sales = orders \
.join(customers, "customer_id") \
.select(
col("order_id"),
col("customer_sk"),
col("order_date"),
col("amount").alias("sales_amount")
)
fact_sales.write \
.mode("overwrite") \
.partitionBy("year", "month") \
.parquet("s3://my-data-lake/curated/fact_sales/")
3. Data Warehouse vs Data Lake
3.1 ๋น๊ต
| ํน์ฑ |
Data Warehouse |
Data Lake |
| ๋ฐ์ดํฐ ์ ํ |
๊ตฌ์กฐํ |
๋ชจ๋ ์ ํ |
| ์คํค๋ง |
Schema-on-Write |
Schema-on-Read |
| ์ฌ์ฉ์ |
๋น์ฆ๋์ค ๋ถ์๊ฐ |
๋ฐ์ดํฐ ๊ณผํ์, ์์ง๋์ด |
| ์ฒ๋ฆฌ |
OLAP |
๋ฐฐ์น, ์คํธ๋ฆฌ๋ฐ, ML |
| ๋น์ฉ |
๋์ |
๋ฎ์ |
| ์ฟผ๋ฆฌ ์ฑ๋ฅ |
์ต์ ํ๋จ |
๊ฐ๋ณ์ |
| ๋ฐ์ดํฐ ํ์ง |
๋์ (์ ์ ๋จ) |
๊ฐ๋ณ์ |
3.2 ์ ํ ๊ธฐ์ค
def choose_architecture(requirements: dict) -> str:
"""์ํคํ
์ฒ ์ ํ ๊ฐ์ด๋"""
warehouse_factors = [
requirements.get('structured_data_only', False),
requirements.get('sql_analytics_primary', False),
requirements.get('strict_governance', False),
requirements.get('fast_query_response', False),
]
lake_factors = [
requirements.get('unstructured_data', False),
requirements.get('ml_workloads', False),
requirements.get('raw_data_preservation', False),
requirements.get('cost_sensitive', False),
requirements.get('schema_flexibility', False),
]
if sum(warehouse_factors) > sum(lake_factors):
return "Data Warehouse ๊ถ์ฅ"
elif sum(lake_factors) > sum(warehouse_factors):
return "Data Lake ๊ถ์ฅ"
else:
return "Lakehouse ๊ณ ๋ ค"
4. Lakehouse
4.1 ๊ฐ๋
Lakehouse๋ Data Lake์ ์ ์ฐ์ฑ๊ณผ Data Warehouse์ ์ฑ๋ฅ/๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์ํคํ
์ฒ์
๋๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Lakehouse Architecture โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Applications โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โ BI โ โ ML โ โ SQL โ โ Streamingโ โ โ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Query Engine โ โ
โ โ (Spark, Presto, Trino, Dremio) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Lakehouse Format Layer โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ ACID Transactions โ Schema Enforcement โ โ โ
โ โ โ Time Travel โ Unified Batch/Streaming โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ Delta Lake / Apache Iceberg / Apache Hudi โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Object Storage (Data Lake) โ โ
โ โ S3 / GCS / ADLS / HDFS โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.2 ํต์ฌ ๊ธฐ๋ฅ
| ๊ธฐ๋ฅ |
์ค๋ช
|
| ACID ํธ๋์ญ์
|
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ |
| ์คํค๋ง ์งํ |
์คํค๋ง ๋ณ๊ฒฝ ์ง์ |
| ํ์ ํธ๋๋ธ |
๊ณผ๊ฑฐ ๋ฐ์ดํฐ ๋ฒ์ ์กฐํ |
| Upsert/Merge |
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฐฑ์ |
| ํตํฉ ์ฒ๋ฆฌ |
๋ฐฐ์น + ์คํธ๋ฆฌ๋ฐ ๋จ์ผ ํ
์ด๋ธ |
5. Delta Lake
5.1 Delta Lake ๊ธฐ๋ณธ
from pyspark.sql import SparkSession
from delta import *
# Delta Lake ์ค์
spark = SparkSession.builder \
.appName("DeltaLake") \
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
.getOrCreate()
# Delta ํ
์ด๋ธ ์์ฑ
df = spark.createDataFrame([
(1, "Alice", 100),
(2, "Bob", 200),
], ["id", "name", "amount"])
df.write.format("delta").save("/data/delta/users")
# ์ฝ๊ธฐ
delta_df = spark.read.format("delta").load("/data/delta/users")
# SQL๋ก ์ ๊ทผ
spark.sql("CREATE TABLE users USING DELTA LOCATION '/data/delta/users'")
spark.sql("SELECT * FROM users").show()
5.2 Delta Lake ๊ณ ๊ธ ๊ธฐ๋ฅ
from delta.tables import DeltaTable
# MERGE (Upsert)
delta_table = DeltaTable.forPath(spark, "/data/delta/users")
new_data = spark.createDataFrame([
(1, "Alice Updated", 150), # ์
๋ฐ์ดํธ
(3, "Charlie", 300), # ์ฝ์
], ["id", "name", "amount"])
delta_table.alias("target").merge(
new_data.alias("source"),
"target.id = source.id"
).whenMatchedUpdate(set={
"name": "source.name",
"amount": "source.amount"
}).whenNotMatchedInsert(values={
"id": "source.id",
"name": "source.name",
"amount": "source.amount"
}).execute()
# Time Travel (๊ณผ๊ฑฐ ๋ฒ์ ์กฐํ)
# ๋ฒ์ ๋ฒํธ๋ก
df_v0 = spark.read.format("delta") \
.option("versionAsOf", 0) \
.load("/data/delta/users")
# ํ์์คํฌํ๋ก
df_yesterday = spark.read.format("delta") \
.option("timestampAsOf", "2024-01-14") \
.load("/data/delta/users")
# ํ์คํ ๋ฆฌ ํ์ธ
delta_table.history().show()
# Vacuum (์ค๋๋ ํ์ผ ์ ๋ฆฌ)
delta_table.vacuum(retentionHours=168) # 7์ผ ๋ณด์กด
# ์คํค๋ง ์งํ
spark.read.format("delta") \
.option("mergeSchema", "true") \
.load("/data/delta/users")
# Z-Order ์ต์ ํ (์ฟผ๋ฆฌ ์ฑ๋ฅ)
delta_table.optimize().executeZOrderBy("date", "customer_id")
6. Apache Iceberg
6.1 Iceberg ๊ธฐ๋ณธ
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Iceberg") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.catalog.iceberg", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.iceberg.type", "hive") \
.config("spark.sql.catalog.iceberg.uri", "thrift://localhost:9083") \
.getOrCreate()
# Iceberg ํ
์ด๋ธ ์์ฑ
spark.sql("""
CREATE TABLE iceberg.db.users (
id INT,
name STRING,
amount DECIMAL(10, 2)
) USING ICEBERG
PARTITIONED BY (bucket(16, id))
""")
# ๋ฐ์ดํฐ ์ฝ์
spark.sql("""
INSERT INTO iceberg.db.users VALUES
(1, 'Alice', 100.00),
(2, 'Bob', 200.00)
""")
# Time Travel
spark.sql("SELECT * FROM iceberg.db.users VERSION AS OF 1").show()
spark.sql("SELECT * FROM iceberg.db.users TIMESTAMP AS OF '2024-01-15'").show()
# ์ค๋
์ท ํ์ธ
spark.sql("SELECT * FROM iceberg.db.users.snapshots").show()
6.2 Delta Lake vs Iceberg ๋น๊ต
| ํน์ฑ |
Delta Lake |
Iceberg |
| ๊ฐ๋ฐ์ฌ |
Databricks |
Netflix โ Apache |
| ํธํ์ฑ |
Spark ์ค์ฌ |
์์ง ๋
๋ฆฝ์ |
| ๋ฉํ๋ฐ์ดํฐ |
ํธ๋์ญ์
๋ก๊ทธ |
์ค๋
์ท ๊ธฐ๋ฐ |
| ํํฐ์
์งํ |
์ ํ์ |
๊ฐ๋ ฅํ ์ง์ |
| ์จ๊ฒจ์ง ํํฐ์
|
๋ฏธ์ง์ |
์ง์ |
| ์ปค๋ฎค๋ํฐ |
Databricks ์ํ๊ณ |
๋ค์ํ ๋ฒค๋ |
7. ๋ชจ๋ ๋ฐ์ดํฐ ์คํ
7.1 ์ํคํ
์ฒ ํจํด
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Modern Data Stack โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Data Sources โ
โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ
โ โ SaaS โ โDatabaseโ โ API โ โ IoT โ โ
โ โโโโโโฌโโโโ โโโโโฌโโโโโ โโโโโฌโโโโโ โโโโโฌโโโโโ โ
โ โโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Ingestion (EL) โ โ
โ โ Fivetran / Airbyte / Stitch โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Cloud Data Warehouse / Lakehouse โ โ
โ โ Snowflake / BigQuery / Databricks โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Transformation (T) โ โ
โ โ dbt โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ BI / Analytics โ โ
โ โ Looker / Tableau / Metabase / Mode โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ฐ์ต ๋ฌธ์
๋ฌธ์ 1: ์ํคํ
์ฒ ์ ํ
๋ค์ ์๊ตฌ์ฌํญ์ ๋ง๋ ์ํคํ
์ฒ๋ฅผ ์ ํํ๊ณ ์ด์ ๋ฅผ ์ค๋ช
ํ์ธ์:
- ์ผ์ผ 10TB์ ๋ก๊ทธ ๋ฐ์ดํฐ
- ML ๋ชจ๋ธ ํ์ต์ ์ฌ์ฉ
- ์๋ณธ ๋ฐ์ดํฐ 5๋
๋ณด์กด ํ์
๋ฌธ์ 2: Delta Lake ๊ตฌํ
๊ณ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ SCD Type 2๋ฅผ Delta Lake MERGE๋ก ๊ตฌํํ์ธ์.
์์ฝ
| ์ํคํ
์ฒ |
ํน์ง |
์ฌ์ฉ ์ฌ๋ก |
| Data Warehouse |
๊ตฌ์กฐํ, SQL ์ต์ ํ |
BI, ๋ฆฌํฌํ
|
| Data Lake |
๋ชจ๋ ๋ฐ์ดํฐ, ์ ๋น์ฉ |
ML, ์๋ณธ ๋ณด์กด |
| Lakehouse |
Lake + Warehouse ์ฅ์ |
ํตํฉ ๋ถ์ |
์ฐธ๊ณ ์๋ฃ