All skills
github avatar

/fabric-lakehouse

@3b907f7 official
by githubgithub/awesome-copilot40k stars
5,040

Use this skill to get context about Fabric Lakehouse and its features for software systems and AI-powered functions. It offers descriptions of Lakehouse data components, organization with schemas and shortcuts, access control, and code examples. This skill supports users in designing, building, and optimizing Lakehouse solutions using best practices.

Use this Skill: https://skilld.dev/gh/github/awesome-copilot/fabric-lakehouse

This session only. Nothing lands on disk.

referencespyspark.md

≈1.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Spark Configuration (Best Practices)

# Enable Fabric optimizations
spark.conf.set("spark.sql.parquet.vorder.enabled", "true")
spark.conf.set("spark.microsoft.delta.optimizeWrite.enabled", "true")

Reading Data

# Read CSV file
df = spark.read.format("csv") \
    .option("header", "true") \
    .option("inferSchema", "true") \
    .load("Files/bronze/data.csv")

# Read JSON file
df = spark.read.format("json").load("Files/bronze/data.json")

# Read Parquet file
df = spark.read.format("parquet").load("Files/bronze/data.parquet")

# Read Delta table
df = spark.read.table("my_delta_table")

# Read from SQL endpoint
df = spark.sql("SELECT * FROM lakehouse.my_table")

Writing Delta Tables

# Write DataFrame as managed Delta table
df.write.format("delta") \
    .mode("overwrite") \
    .saveAsTable("silver_customers")

# Write with partitioning
df.write.format("delta") \
    .mode("overwrite") \
    .partitionBy("year", "month") \
    .saveAsTable("silver_transactions")

# Append to existing table
df.write.format("delta") \
    .mode("append") \
    .saveAsTable("silver_events")

Delta Table Operations (CRUD)

# UPDATE
spark.sql("""
    UPDATE silver_customers
    SET status = 'active'
    WHERE last_login > '2024-01-01' -- Example date, adjust as needed
""")

# DELETE
spark.sql("""
    DELETE FROM silver_customers
    WHERE is_deleted = true
""")

# MERGE (Upsert)
spark.sql("""
    MERGE INTO silver_customers AS target
    USING staging_customers AS source
    ON target.customer_id = source.customer_id
    WHEN MATCHED THEN UPDATE SET *
    WHEN NOT MATCHED THEN INSERT *
""")

Schema Definition

from pyspark.sql.types import StructType, StructField, StringType, IntegerType, TimestampType, DecimalType

schema = StructType([
    StructField("id", IntegerType(), False),
    StructField("name", StringType(), True),
    StructField("email", StringType(), True),
    StructField("amount", DecimalType(18, 2), True),
    StructField("created_at", TimestampType(), True)
])

df = spark.read.format("csv") \
    .schema(schema) \
    .option("header", "true") \
    .load("Files/bronze/customers.csv")

SQL Magic in Notebooks

%%sql
-- Query Delta table directly
SELECT 
    customer_id,
    COUNT(*) as order_count,
    SUM(amount) as total_amount
FROM gold_orders
GROUP BY customer_id
ORDER BY total_amount DESC
LIMIT 10

V-Order Optimization

# Enable V-Order for read optimization
spark.conf.set("spark.sql.parquet.vorder.enabled", "true")

Table Optimization

%%sql
-- Optimize table (compact small files)
OPTIMIZE silver_transactions

-- Optimize with Z-ordering on query columns
OPTIMIZE silver_transactions ZORDER BY (customer_id, transaction_date)

-- Vacuum old files (default 7 days retention)
VACUUM silver_transactions

-- Vacuum with custom retention
VACUUM silver_transactions RETAIN 168 HOURS

Incremental Load Pattern

from pyspark.sql.functions import col

# Get last processed watermark
last_watermark = spark.sql("""
    SELECT MAX(processed_timestamp) as watermark 
    FROM silver_orders
""").collect()[0]["watermark"]

# Load only new records
new_records = spark.read.format("delta") \
    .table("bronze_orders") \
    .filter(col("created_at") > last_watermark)

# Merge new records
new_records.createOrReplaceTempView("staging_orders")
spark.sql("""
    MERGE INTO silver_orders AS target
    USING staging_orders AS source
    ON target.order_id = source.order_id
    WHEN MATCHED THEN UPDATE SET *
    WHEN NOT MATCHED THEN INSERT *
""")

SCD Type 2 Pattern

from pyspark.sql.functions import current_timestamp, lit

# Close existing records
spark.sql("""
    UPDATE dim_customer
    SET is_current = false, end_date = current_timestamp()
    WHERE customer_id IN (SELECT customer_id FROM staging_customer)
    AND is_current = true
""")

# Insert new versions
spark.sql("""
    INSERT INTO dim_customer
    SELECT 
        customer_id,
        name,
        email,
        address,
        current_timestamp() as start_date,
        null as end_date,
        true as is_current
    FROM staging_customer
""")

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    This skill provides technical guidance and PySpark code templates for managing Microsoft Fabric Lakehouse environments. It covers data ingestion, optimization, and security best practices without any detected malicious behavior.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    3/3 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 3b907f7. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 8 months ago
metadata
{
  "author": "tedvilutis",
  "version": "1.0"
}
  • microsoft-fabric
  • lakehouse
  • data-warehouse
  • delta-lake
  • spark
  • pyspark
  • azure
  • data-management
  • onelake

README badge

README badge for github/awesome-copilot/fabric-lakehouse

Provides reference material on Microsoft Fabric Lakehouse architecture, including Delta table management, schemas, shortcuts to external data sources, and security controls. Use this skill to explain Lakehouse concepts, design data storage solutions, or optimize performance with V-Order and table compaction.

Generated from the current SKILL.md.

What table formats does Fabric Lakehouse support?
Lakehouse primarily uses Delta format for managed tables with ACID compliance. It also supports CSV and Parquet formats for Spark querying, plus any file format in the Files section.
Can I reference data from outside Fabric without copying it?
Yes. Shortcuts create virtual links to external data sources including ADLS Gen2, Amazon S3, Google Cloud Storage, and Dataverse without duplicating the data.
How does row-level and column-level security work in Lakehouse?
Lakehouse supports fine-grained security through Microsoft Entra ID RBAC on OneLake, allowing you to restrict access to specific rows or columns in tables beyond workspace-level permissions.
What are Fabric Materialized Views and how do they differ from Spark Views?
Materialized Views are pre-computed tables automatically updated on a schedule, providing fast query performance for complex operations. Spark Views are logical virtual tables that don't store data but provide a query interface.
How can I improve query performance on Lakehouse tables?
Enable V-Order optimization on Delta tables for faster reads with semantic models, use the OPTIMIZE command to compact files and apply Z-ordering on specific columns, and run VACUUM to clean up old files.

Generated from the current SKILL.md. These answers refresh after source changes.