SlideShare a Scribd company logo
1 of 2
Download to read offline
Rollback a table to an earlier version
PERFORMANCE OPTIMIZATIONS
TIME TRAVEL
View table details
Delete old files with Vacuum
Clone a Delta Lake table
Interoperability with Python / DataFrames
Run SQL queries from Python
Modify data retention settings for Delta Lake table
-- RESTORE requires Delta Lake version 0.7.0+ & DBR 7.4+.
RESTORE tableName VERSION AS OF 0
RESTORE tableName TIMESTAMP AS OF "2020-12-18"
Delta Lake is an open source storage layer that brings ACID
transactions to Apache Spark™ and big data workloads.
delta.io | Documentation | GitHub | Delta Lake on Databricks
WITH SPARK SQL UPDATE tableName SET event = 'click' WHERE event = 'clk'
DELETE FROM tableName WHERE "date < '2017-01-01"
MERGE INTO logs
USING newDedupedLogs
ON logs.uniqueId = newDedupedLogs.uniqueId
WHEN NOT MATCHED
THEN INSERT *
-- Add "Not null" constraint:
ALTER TABLE tableName CHANGE COLUMN col_name SET NOT NULL
-- Add "Check" constraint:
ALTER TABLE tableName
ADD CONSTRAINT dateWithinRange CHECK date > "1900-01-01"
-- Drop constraint:
ALTER TABLE tableName DROP CONSTRAINT dateWithinRange
ALTER TABLE tableName ADD COLUMNS (
col_name data_type
[FIRST|AFTER colA_name])
MERGE INTO target
USING updates
ON target.Id = updates.Id
WHEN MATCHED AND target.delete_flag = "true" THEN
DELETE
WHEN MATCHED THEN
UPDATE SET * -- star notation means all columns
WHEN NOT MATCHED THEN
INSERT (date, Id, data) -- or, use INSERT *
VALUES (date, Id, data)
INSERT INTO TABLE tableName VALUES (
(8003, "Kim Jones", "2020-12-18", 3.875),
(8004, "Tim Jones", "2020-12-20", 3.750)
);
-- Insert using SELECT statement
INSERT INTO tableName SELECT * FROM sourceTable
-- Atomically replace all data in table with new values
INSERT OVERWRITE loan_by_state_delta VALUES (...)
DELTA LAKE DDL/DML: UPDATE, DELETE, MERGE, ALTER TABLE
Update rows that match a predicate condition
Delete rows that match a predicate condition
Insert values directly into table
Upsert (update + insert) using MERGE
Alter table schema — add columns
Insert with Deduplication using MERGE
Alter table — add constraint
DESCRIBE DETAIL tableName
DESCRIBE FORMATTED tableName
-- logRetentionDuration -> how long transaction log history
is kept, deletedFileRetentionDuration -> how long ago a file
must have been deleted before being a candidate for VACCUM.
ALTER TABLE tableName
SET TBLPROPERTIES(
delta.logRetentionDuration = "interval 30 days",
delta.deletedFileRetentionDuration = "interval 7 days"
);
SHOW TBLPROPERTIES tableName;
spark.sql("SELECT * FROM tableName")
spark.sql("SELECT * FROM delta.`/path/to/delta_table`")
-- Read name-based table from Hive metastore into DataFrame
df = spark.table("tableName")
-- Read path-based table into DataFrame
df = spark.read.format("delta").load("/path/to/delta_table")
-- Deep clones copy data from source, shallow clones don't.
CREATE TABLE [dbName.] targetName
[SHALLOW | DEEP] CLONE sourceName [VERSION AS OF 0]
[LOCATION "path/to/table"]
-- specify location only for path-based tables
VACUUM tableName [RETAIN num HOURS] [DRY RUN]
UTILITY METHODS
*Databricks Delta Lake feature
OPTIMIZE tableName
[ZORDER BY (colNameA, colNameB)]
*Databricks Delta Lake feature
ALTER TABLE [table_name | delta.`path/to/delta_table`]
SET TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true)
*Databricks Delta Lake feature
CACHE SELECT * FROM tableName
-- or:
CACHE SELECT colA, colB FROM tableName WHERE colNameA > 0
Compact data files with Optimize and Z-Order
Auto-optimize tables
Cache frequently queried data in Delta Cache
DESCRIBE HISTORY tableName
SELECT * FROM tableName VERSION AS OF 12
EXCEPT ALL SELECT * FROM tableName VERSION AS OF 11
SELECT * FROM tableName VERSION AS OF 0
SELECT * FROM tableName@v0 -- equivalent to VERSION AS OF 0
SELECT * FROM tableName TIMESTAMP AS OF "2020-12-18"
View transaction log (aka Delta Log)
Query historical versions of Delta Lake tables
Find changes between 2 versions of table
-- Managed database is saved in the Hive metastore.
Default database is named "default".
DROP DATABASE IF EXISTS dbName;
CREATE DATABASE dbName;
USE dbName -- This command avoids having to specify
dbName.tableName every time instead of just tableName.
/* You can refer to Delta Tables by table name, or by
path. Table name is the preferred way, since named tables
are managed in the Hive Metastore (i.e., when you DROP a
named table, the data is dropped also — not the case for
path-based tables.) */
SELECT * FROM [dbName.] tableName
CREATE TABLE [dbName.] tableName
USING DELTA
AS SELECT * FROM tableName | parquet.`path/to/data`
[LOCATION `/path/to/table`]
-- using location = unmanaged table
-- by table name
CONVERT TO DELTA [dbName.]tableName
[PARTITIONED BY (col_name1 col_type1, col_name2
col_type2)]
-- path-based tables
CONVERT TO DELTA parquet.`/path/to/table` -- note backticks
[PARTITIONED BY (col_name1 col_type1, col_name2 col_type2)]
SELECT * FROM delta.`path/to/delta_table` -- note backticks
CREATE TABLE [dbName.] tableName (
id INT [NOT NULL],
name STRING,
date DATE,
int_rate FLOAT)
USING DELTA
[PARTITIONED BY (time, date)] -- optional
COPY INTO [dbName.] targetTable
FROM (SELECT * FROM "/path/to/table")
FILEFORMAT = DELTA -- or CSV, Parquet, ORC, JSON, etc.
CREATE AND QUERY DELTA TABLES
Create and use managed database
Query Delta Lake table by table name (preferred)
Query Delta Lake table by path
Convert Parquet table to Delta Lake format in place
Create table, define schema explicitly with SQL DDL
Create Delta Lake table as SELECT * with no upfront
schema definition
Copy new data into Delta Lake table (with idempotent retries)
TIME TRAVEL (CONTINUED)
Provided to the open source community by Databricks
© Databricks 2021. All rights reserved. Apache, Apache Spark, Spark and the Spark logo are
trademarks of the Apache Software Foundation.
spark.sql("SELECT * FROM tableName")
spark.sql("SELECT * FROM delta.`/path/to/delta_table`")
spark.sql("DESCRIBE HISTORY tableName")
deltaTable.vacuum() # vacuum files older than default
retention period (7 days)
deltaTable.vacuum(100) # vacuum files not required by
versions more than 100 hours old
deltaTable.clone(target="/path/to/delta_table/",
isShallow=True, replace=True)
spark.sql("SELECT * FROM tableName")
spark.sql("SELECT * FROM delta.`/path/to/delta_table`")
UTILITY METHODS
WITH PYTHON
Convert Parquet table to Delta Lake format in place
Run Spark SQL queries in Python
Compact old files with Vacuum
Clone a Delta Lake table
Get DataFrame representation of a Delta Lake table
Run SQL queries on Delta Lake tables
fullHistoryDF = deltaTable.history()
# choose only one option: versionAsOf, or timestampAsOf
df = (spark.read.format("delta")
.option("versionAsOf", 0)
.option("timestampAsOf", "2020-12-18")
.load("/path/to/delta_table"))
TIME TRAVEL
View transaction log (aka Delta Log)
Query historical versions of Delta Lake tables
PERFORMANCE OPTIMIZATIONS
*Databricks Delta Lake feature
spark.sql("OPTIMIZE tableName [ZORDER BY (colA, colB)]")
*Databricks Delta Lake feature. For existing tables:
spark.sql("ALTER TABLE [table_name |
delta.`path/to/delta_table`]
SET TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true)
To enable auto-optimize for all new Delta Lake tables:
spark.sql("SET spark.databricks.delta.properties.
defaults.autoOptimize.optimizeWrite = true")
*Databricks Delta Lake feature
spark.sql("CACHE SELECT * FROM tableName")
-- or:
spark.sql("CACHE SELECT colA, colB FROM tableName
WHERE colNameA > 0")
Compact data files with Optimize and Z-Order
Auto-optimize tables
Cache frequently queried data in Delta Cache
WORKING WITH DELTATABLES
WORKING WITH DELTA TABLES
# A DeltaTable is the entry point for interacting with
tables programmatically in Python — for example, to
perform updates or deletes.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, tableName)
deltaTable = DeltaTable.forPath(spark,
delta.`path/to/table`)
CONVERT PARQUET TO DELTA LAKE
deltaTable = DeltaTable.convertToDelta(spark,
"parquet.`/path/to/parquet_table`")
partitionedDeltaTable = DeltaTable.convertToDelta(spark,
"parquet.`/path/to/parquet_table`", "part int")
df1 = spark.read.format("delta").load(pathToTable)
df2 = spark.read.format("delta").option("versionAsOf",
2).load("/path/to/delta_table")
df1.exceptAll(df2).show()
deltaTable.restoreToVersion(0)
deltaTable.restoreToTimestamp('2020-12-01')
Find changes between 2 versions of a table
Rollback a table by version or timestamp
Delta Lake is an open source storage layer that brings ACID
transactions to Apache Spark™ and big data workloads.
delta.io | Documentation | GitHub | API reference | Databricks
df = spark.createDataFrame(pdf)
# where pdf is a pandas DF
# then save DataFrame in Delta Lake format as shown below
# read by path
df = (spark.read.format("parquet"|"csv"|"json"|etc.)
.load("/path/to/delta_table"))
# read by table name
df = spark.table("events")
# by path or by table name
df = (spark.readStream
.format("delta")
.schema(schema)
.table("events") | .load("/delta/events")
)
streamingQuery = (
df.writeStream.format("delta")
.outputMode("append"|"update"|"complete")
.option("checkpointLocation", "/path/to/checkpoints")
.trigger(once=True|processingTime="10 seconds")
.table("events") | .start("/delta/events")
)
(df.write.format("delta")
.mode("append"|"overwrite")
.partitionBy("date") # optional
.option("mergeSchema", "true") # option - evolve schema
.saveAsTable("events") | .save("/path/to/delta_table")
)
READS AND WRITES WITH DELTA LAKE
Read data from pandas DataFrame
Read data using Apache Spark™
Save DataFrame in Delta Lake format
Streaming reads (Delta table as streaming source)
Streaming writes (Delta table as a sink)
# predicate using SQL formatted string
deltaTable.delete("date < '2017-01-01'")
# predicate using Spark SQL functions
deltaTable.delete(col("date") < "2017-01-01")
# Available options for merges [see documentation for
details]:
.whenMatchedUpdate(...) | .whenMatchedUpdateAll(...) |
.whenNotMatchedInsert(...) | .whenMatchedDelete(...)
(deltaTable.alias("target").merge(
source = updatesDF.alias("updates"),
condition = "target.eventId = updates.eventId")
.whenMatchedUpdateAll()
.whenNotMatchedInsert(
values = {
"date": "updates.date",
"eventId": "updates.eventId",
"data": "updates.data",
"count": 1
}
).execute()
)
(deltaTable.alias("logs").merge(
newDedupedLogs.alias("newDedupedLogs"),
"logs.uniqueId = newDedupedLogs.uniqueId")
.whenNotMatchedInsertAll()
.execute()
)
# predicate using SQL formatted string
deltaTable.update(condition = "eventType = 'clk'",
set = { "eventType": "'click'" } )
# predicate using Spark SQL functions
deltaTable.update(condition = col("eventType") == "clk",
set = { "eventType": lit("click") } )
DELTA LAKE DDL/DML: UPDATES, DELETES, INSERTS, MERGES
Delete rows that match a predicate condition
Update rows that match a predicate condition
Upsert (update + insert) using MERGE
Insert with Deduplication using MERGE
df = deltaTable.toDF()
TIME TRAVEL (CONTINUED)
Provided to the open source community by Databricks
© Databricks 2021. All rights reserved. Apache, Apache Spark, Spark and the Spark logo are
trademarks of the Apache Software Foundation.

More Related Content

Similar to delta_lake_cheat_sheet.pdf

My sql Syntax
My sql SyntaxMy sql Syntax
My sql SyntaxReka
 
MS SQL SERVER: Manipulating Database
MS SQL SERVER: Manipulating DatabaseMS SQL SERVER: Manipulating Database
MS SQL SERVER: Manipulating Databasesqlserver content
 
MS Sql Server: Manipulating Database
MS Sql Server: Manipulating DatabaseMS Sql Server: Manipulating Database
MS Sql Server: Manipulating DatabaseDataminingTools Inc
 
MS SQLSERVER:Manipulating Database
MS SQLSERVER:Manipulating DatabaseMS SQLSERVER:Manipulating Database
MS SQLSERVER:Manipulating Databasesqlserver content
 
Impala SQL Support
Impala SQL SupportImpala SQL Support
Impala SQL SupportYue Chen
 
Oracle SQL AND PL/SQL
Oracle SQL AND PL/SQLOracle SQL AND PL/SQL
Oracle SQL AND PL/SQLsuriyae1
 
Building a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkEvan Chan
 
Oracle-L11 using Oracle flashback technology-Mazenet solution
Oracle-L11 using  Oracle flashback technology-Mazenet solutionOracle-L11 using  Oracle flashback technology-Mazenet solution
Oracle-L11 using Oracle flashback technology-Mazenet solutionMazenetsolution
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slidesmetsarin
 
SQL WORKSHOP::Lecture 10
SQL WORKSHOP::Lecture 10SQL WORKSHOP::Lecture 10
SQL WORKSHOP::Lecture 10Umair Amjad
 
Oracle data guard configuration in 12c
Oracle data guard configuration in 12cOracle data guard configuration in 12c
Oracle data guard configuration in 12cuzzal basak
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...Alex Zaballa
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...Alex Zaballa
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
COMPUTERS SQL
COMPUTERS SQL COMPUTERS SQL
COMPUTERS SQL Rc Os
 
Delta lake and the delta architecture
Delta lake and the delta architectureDelta lake and the delta architecture
Delta lake and the delta architectureAdam Doyle
 

Similar to delta_lake_cheat_sheet.pdf (20)

My sql Syntax
My sql SyntaxMy sql Syntax
My sql Syntax
 
MS SQL SERVER: Manipulating Database
MS SQL SERVER: Manipulating DatabaseMS SQL SERVER: Manipulating Database
MS SQL SERVER: Manipulating Database
 
MS Sql Server: Manipulating Database
MS Sql Server: Manipulating DatabaseMS Sql Server: Manipulating Database
MS Sql Server: Manipulating Database
 
MS SQLSERVER:Manipulating Database
MS SQLSERVER:Manipulating DatabaseMS SQLSERVER:Manipulating Database
MS SQLSERVER:Manipulating Database
 
Impala SQL Support
Impala SQL SupportImpala SQL Support
Impala SQL Support
 
Oracle SQL AND PL/SQL
Oracle SQL AND PL/SQLOracle SQL AND PL/SQL
Oracle SQL AND PL/SQL
 
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with ExamplesDML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
 
Building a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and Spark
 
Les10
Les10Les10
Les10
 
Oracle-L11 using Oracle flashback technology-Mazenet solution
Oracle-L11 using  Oracle flashback technology-Mazenet solutionOracle-L11 using  Oracle flashback technology-Mazenet solution
Oracle-L11 using Oracle flashback technology-Mazenet solution
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slides
 
SQL WORKSHOP::Lecture 10
SQL WORKSHOP::Lecture 10SQL WORKSHOP::Lecture 10
SQL WORKSHOP::Lecture 10
 
Oracle data guard configuration in 12c
Oracle data guard configuration in 12cOracle data guard configuration in 12c
Oracle data guard configuration in 12c
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
 
COMPUTERS SQL
COMPUTERS SQL COMPUTERS SQL
COMPUTERS SQL
 
My sql
My sqlMy sql
My sql
 
Delta lake and the delta architecture
Delta lake and the delta architectureDelta lake and the delta architecture
Delta lake and the delta architecture
 

Recently uploaded

专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改yuu sss
 
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...ThinkInnovation
 
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdf
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdfKantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdf
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdfSocial Samosa
 
ASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel CanterASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel Cantervoginip
 
GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]📊 Markus Baersch
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130Suhani Kapoor
 
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...Suhani Kapoor
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxStephen266013
 
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls DubaiDubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls Dubaihf8803863
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...Florian Roscheck
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Sapana Sha
 
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一F sss
 
Industrialised data - the key to AI success.pdf
Industrialised data - the key to AI success.pdfIndustrialised data - the key to AI success.pdf
Industrialised data - the key to AI success.pdfLars Albertsson
 
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...soniya singh
 
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理e4aez8ss
 
Call Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceCall Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceSapana Sha
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort servicejennyeacort
 

Recently uploaded (20)

专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
专业一比一美国俄亥俄大学毕业证成绩单pdf电子版制作修改
 
Call Girls in Saket 99530🔝 56974 Escort Service
Call Girls in Saket 99530🔝 56974 Escort ServiceCall Girls in Saket 99530🔝 56974 Escort Service
Call Girls in Saket 99530🔝 56974 Escort Service
 
E-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptxE-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptx
 
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...
Predictive Analysis - Using Insight-informed Data to Determine Factors Drivin...
 
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdf
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdfKantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdf
Kantar AI Summit- Under Embargo till Wednesday, 24th April 2024, 4 PM, IST.pdf
 
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
 
ASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel CanterASML's Taxonomy Adventure by Daniel Canter
ASML's Taxonomy Adventure by Daniel Canter
 
GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]GA4 Without Cookies [Measure Camp AMS]
GA4 Without Cookies [Measure Camp AMS]
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
 
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
VIP High Class Call Girls Jamshedpur Anushka 8250192130 Independent Escort Se...
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docx
 
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls DubaiDubai Call Girls Wifey O52&786472 Call Girls Dubai
Dubai Call Girls Wifey O52&786472 Call Girls Dubai
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
 
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
Saket, (-DELHI )+91-9654467111-(=)CHEAP Call Girls in Escorts Service Saket C...
 
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
办理学位证中佛罗里达大学毕业证,UCF成绩单原版一比一
 
Industrialised data - the key to AI success.pdf
Industrialised data - the key to AI success.pdfIndustrialised data - the key to AI success.pdf
Industrialised data - the key to AI success.pdf
 
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
High Class Call Girls Noida Sector 39 Aarushi 🔝8264348440🔝 Independent Escort...
 
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
 
Call Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts ServiceCall Girls In Dwarka 9654467111 Escorts Service
Call Girls In Dwarka 9654467111 Escorts Service
 
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
9711147426✨Call In girls Gurgaon Sector 31. SCO 25 escort service
 

delta_lake_cheat_sheet.pdf

  • 1. Rollback a table to an earlier version PERFORMANCE OPTIMIZATIONS TIME TRAVEL View table details Delete old files with Vacuum Clone a Delta Lake table Interoperability with Python / DataFrames Run SQL queries from Python Modify data retention settings for Delta Lake table -- RESTORE requires Delta Lake version 0.7.0+ & DBR 7.4+. RESTORE tableName VERSION AS OF 0 RESTORE tableName TIMESTAMP AS OF "2020-12-18" Delta Lake is an open source storage layer that brings ACID transactions to Apache Spark™ and big data workloads. delta.io | Documentation | GitHub | Delta Lake on Databricks WITH SPARK SQL UPDATE tableName SET event = 'click' WHERE event = 'clk' DELETE FROM tableName WHERE "date < '2017-01-01" MERGE INTO logs USING newDedupedLogs ON logs.uniqueId = newDedupedLogs.uniqueId WHEN NOT MATCHED THEN INSERT * -- Add "Not null" constraint: ALTER TABLE tableName CHANGE COLUMN col_name SET NOT NULL -- Add "Check" constraint: ALTER TABLE tableName ADD CONSTRAINT dateWithinRange CHECK date > "1900-01-01" -- Drop constraint: ALTER TABLE tableName DROP CONSTRAINT dateWithinRange ALTER TABLE tableName ADD COLUMNS ( col_name data_type [FIRST|AFTER colA_name]) MERGE INTO target USING updates ON target.Id = updates.Id WHEN MATCHED AND target.delete_flag = "true" THEN DELETE WHEN MATCHED THEN UPDATE SET * -- star notation means all columns WHEN NOT MATCHED THEN INSERT (date, Id, data) -- or, use INSERT * VALUES (date, Id, data) INSERT INTO TABLE tableName VALUES ( (8003, "Kim Jones", "2020-12-18", 3.875), (8004, "Tim Jones", "2020-12-20", 3.750) ); -- Insert using SELECT statement INSERT INTO tableName SELECT * FROM sourceTable -- Atomically replace all data in table with new values INSERT OVERWRITE loan_by_state_delta VALUES (...) DELTA LAKE DDL/DML: UPDATE, DELETE, MERGE, ALTER TABLE Update rows that match a predicate condition Delete rows that match a predicate condition Insert values directly into table Upsert (update + insert) using MERGE Alter table schema — add columns Insert with Deduplication using MERGE Alter table — add constraint DESCRIBE DETAIL tableName DESCRIBE FORMATTED tableName -- logRetentionDuration -> how long transaction log history is kept, deletedFileRetentionDuration -> how long ago a file must have been deleted before being a candidate for VACCUM. ALTER TABLE tableName SET TBLPROPERTIES( delta.logRetentionDuration = "interval 30 days", delta.deletedFileRetentionDuration = "interval 7 days" ); SHOW TBLPROPERTIES tableName; spark.sql("SELECT * FROM tableName") spark.sql("SELECT * FROM delta.`/path/to/delta_table`") -- Read name-based table from Hive metastore into DataFrame df = spark.table("tableName") -- Read path-based table into DataFrame df = spark.read.format("delta").load("/path/to/delta_table") -- Deep clones copy data from source, shallow clones don't. CREATE TABLE [dbName.] targetName [SHALLOW | DEEP] CLONE sourceName [VERSION AS OF 0] [LOCATION "path/to/table"] -- specify location only for path-based tables VACUUM tableName [RETAIN num HOURS] [DRY RUN] UTILITY METHODS *Databricks Delta Lake feature OPTIMIZE tableName [ZORDER BY (colNameA, colNameB)] *Databricks Delta Lake feature ALTER TABLE [table_name | delta.`path/to/delta_table`] SET TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true) *Databricks Delta Lake feature CACHE SELECT * FROM tableName -- or: CACHE SELECT colA, colB FROM tableName WHERE colNameA > 0 Compact data files with Optimize and Z-Order Auto-optimize tables Cache frequently queried data in Delta Cache DESCRIBE HISTORY tableName SELECT * FROM tableName VERSION AS OF 12 EXCEPT ALL SELECT * FROM tableName VERSION AS OF 11 SELECT * FROM tableName VERSION AS OF 0 SELECT * FROM tableName@v0 -- equivalent to VERSION AS OF 0 SELECT * FROM tableName TIMESTAMP AS OF "2020-12-18" View transaction log (aka Delta Log) Query historical versions of Delta Lake tables Find changes between 2 versions of table -- Managed database is saved in the Hive metastore. Default database is named "default". DROP DATABASE IF EXISTS dbName; CREATE DATABASE dbName; USE dbName -- This command avoids having to specify dbName.tableName every time instead of just tableName. /* You can refer to Delta Tables by table name, or by path. Table name is the preferred way, since named tables are managed in the Hive Metastore (i.e., when you DROP a named table, the data is dropped also — not the case for path-based tables.) */ SELECT * FROM [dbName.] tableName CREATE TABLE [dbName.] tableName USING DELTA AS SELECT * FROM tableName | parquet.`path/to/data` [LOCATION `/path/to/table`] -- using location = unmanaged table -- by table name CONVERT TO DELTA [dbName.]tableName [PARTITIONED BY (col_name1 col_type1, col_name2 col_type2)] -- path-based tables CONVERT TO DELTA parquet.`/path/to/table` -- note backticks [PARTITIONED BY (col_name1 col_type1, col_name2 col_type2)] SELECT * FROM delta.`path/to/delta_table` -- note backticks CREATE TABLE [dbName.] tableName ( id INT [NOT NULL], name STRING, date DATE, int_rate FLOAT) USING DELTA [PARTITIONED BY (time, date)] -- optional COPY INTO [dbName.] targetTable FROM (SELECT * FROM "/path/to/table") FILEFORMAT = DELTA -- or CSV, Parquet, ORC, JSON, etc. CREATE AND QUERY DELTA TABLES Create and use managed database Query Delta Lake table by table name (preferred) Query Delta Lake table by path Convert Parquet table to Delta Lake format in place Create table, define schema explicitly with SQL DDL Create Delta Lake table as SELECT * with no upfront schema definition Copy new data into Delta Lake table (with idempotent retries) TIME TRAVEL (CONTINUED) Provided to the open source community by Databricks © Databricks 2021. All rights reserved. Apache, Apache Spark, Spark and the Spark logo are trademarks of the Apache Software Foundation.
  • 2. spark.sql("SELECT * FROM tableName") spark.sql("SELECT * FROM delta.`/path/to/delta_table`") spark.sql("DESCRIBE HISTORY tableName") deltaTable.vacuum() # vacuum files older than default retention period (7 days) deltaTable.vacuum(100) # vacuum files not required by versions more than 100 hours old deltaTable.clone(target="/path/to/delta_table/", isShallow=True, replace=True) spark.sql("SELECT * FROM tableName") spark.sql("SELECT * FROM delta.`/path/to/delta_table`") UTILITY METHODS WITH PYTHON Convert Parquet table to Delta Lake format in place Run Spark SQL queries in Python Compact old files with Vacuum Clone a Delta Lake table Get DataFrame representation of a Delta Lake table Run SQL queries on Delta Lake tables fullHistoryDF = deltaTable.history() # choose only one option: versionAsOf, or timestampAsOf df = (spark.read.format("delta") .option("versionAsOf", 0) .option("timestampAsOf", "2020-12-18") .load("/path/to/delta_table")) TIME TRAVEL View transaction log (aka Delta Log) Query historical versions of Delta Lake tables PERFORMANCE OPTIMIZATIONS *Databricks Delta Lake feature spark.sql("OPTIMIZE tableName [ZORDER BY (colA, colB)]") *Databricks Delta Lake feature. For existing tables: spark.sql("ALTER TABLE [table_name | delta.`path/to/delta_table`] SET TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true) To enable auto-optimize for all new Delta Lake tables: spark.sql("SET spark.databricks.delta.properties. defaults.autoOptimize.optimizeWrite = true") *Databricks Delta Lake feature spark.sql("CACHE SELECT * FROM tableName") -- or: spark.sql("CACHE SELECT colA, colB FROM tableName WHERE colNameA > 0") Compact data files with Optimize and Z-Order Auto-optimize tables Cache frequently queried data in Delta Cache WORKING WITH DELTATABLES WORKING WITH DELTA TABLES # A DeltaTable is the entry point for interacting with tables programmatically in Python — for example, to perform updates or deletes. from delta.tables import * deltaTable = DeltaTable.forName(spark, tableName) deltaTable = DeltaTable.forPath(spark, delta.`path/to/table`) CONVERT PARQUET TO DELTA LAKE deltaTable = DeltaTable.convertToDelta(spark, "parquet.`/path/to/parquet_table`") partitionedDeltaTable = DeltaTable.convertToDelta(spark, "parquet.`/path/to/parquet_table`", "part int") df1 = spark.read.format("delta").load(pathToTable) df2 = spark.read.format("delta").option("versionAsOf", 2).load("/path/to/delta_table") df1.exceptAll(df2).show() deltaTable.restoreToVersion(0) deltaTable.restoreToTimestamp('2020-12-01') Find changes between 2 versions of a table Rollback a table by version or timestamp Delta Lake is an open source storage layer that brings ACID transactions to Apache Spark™ and big data workloads. delta.io | Documentation | GitHub | API reference | Databricks df = spark.createDataFrame(pdf) # where pdf is a pandas DF # then save DataFrame in Delta Lake format as shown below # read by path df = (spark.read.format("parquet"|"csv"|"json"|etc.) .load("/path/to/delta_table")) # read by table name df = spark.table("events") # by path or by table name df = (spark.readStream .format("delta") .schema(schema) .table("events") | .load("/delta/events") ) streamingQuery = ( df.writeStream.format("delta") .outputMode("append"|"update"|"complete") .option("checkpointLocation", "/path/to/checkpoints") .trigger(once=True|processingTime="10 seconds") .table("events") | .start("/delta/events") ) (df.write.format("delta") .mode("append"|"overwrite") .partitionBy("date") # optional .option("mergeSchema", "true") # option - evolve schema .saveAsTable("events") | .save("/path/to/delta_table") ) READS AND WRITES WITH DELTA LAKE Read data from pandas DataFrame Read data using Apache Spark™ Save DataFrame in Delta Lake format Streaming reads (Delta table as streaming source) Streaming writes (Delta table as a sink) # predicate using SQL formatted string deltaTable.delete("date < '2017-01-01'") # predicate using Spark SQL functions deltaTable.delete(col("date") < "2017-01-01") # Available options for merges [see documentation for details]: .whenMatchedUpdate(...) | .whenMatchedUpdateAll(...) | .whenNotMatchedInsert(...) | .whenMatchedDelete(...) (deltaTable.alias("target").merge( source = updatesDF.alias("updates"), condition = "target.eventId = updates.eventId") .whenMatchedUpdateAll() .whenNotMatchedInsert( values = { "date": "updates.date", "eventId": "updates.eventId", "data": "updates.data", "count": 1 } ).execute() ) (deltaTable.alias("logs").merge( newDedupedLogs.alias("newDedupedLogs"), "logs.uniqueId = newDedupedLogs.uniqueId") .whenNotMatchedInsertAll() .execute() ) # predicate using SQL formatted string deltaTable.update(condition = "eventType = 'clk'", set = { "eventType": "'click'" } ) # predicate using Spark SQL functions deltaTable.update(condition = col("eventType") == "clk", set = { "eventType": lit("click") } ) DELTA LAKE DDL/DML: UPDATES, DELETES, INSERTS, MERGES Delete rows that match a predicate condition Update rows that match a predicate condition Upsert (update + insert) using MERGE Insert with Deduplication using MERGE df = deltaTable.toDF() TIME TRAVEL (CONTINUED) Provided to the open source community by Databricks © Databricks 2021. All rights reserved. Apache, Apache Spark, Spark and the Spark logo are trademarks of the Apache Software Foundation.