Delta Live Tables Python語言引用
本文提供了Delta Live Tables Python編程接口的詳細信息和示例。有關完整的API規範,請參閱Python API規範.
有關SQL API的信息,請參見Delta Live Tables SQL語言引用.
限製
Delta Live Tables Python接口有以下限製:
Python
表格
而且視圖
函數必須返回一個數據幀。一些操作dataframe的函數不返回dataframe,不應該被使用。因為執行了DataFrame轉換後完整的數據流圖已解析,使用此類操作可能會產生意想不到的副作用。這些操作包括如下函數收集()
,count ()
,toPandas ()
,save ()
,saveAsTable ()
.但是,可以將這些函數包含在表格
或視圖
函數定義,因為這段代碼在圖初始化階段隻運行一次。的
主()
函數不支持。的主
Spark中的操作需要立即加載輸入數據來計算輸出的模式。Delta Live表不支持此功能。
Python數據集
Python API定義在dlt
模塊。您必須導入dlt
使用Python API實現的Delta Live Tables管道中的模塊。應用@dlt.view
或@dlt.table
函數的裝飾器來定義Python中的視圖或表。可以使用函數名或名字
參數來分配表或視圖名稱。下麵的示例定義了兩個不同的數據集taxi_raw
一個JSON文件作為輸入源和一個名為filtered_data
這需要taxi_raw
視圖作為輸入:
@dlt.視圖deftaxi_raw():返回火花.讀.格式(“json”).負載(“/ databricks-datasets / nyctaxi /樣本/ json /”)使用函數名作為表名@dlt.表格deffiltered_data():返回dlt.讀(“taxi_raw”).在哪裏(...)#使用name參數作為表名@dlt.表格(名字=“filtered_data”)defcreate_filtered_data():返回dlt.讀(“taxi_raw”).在哪裏(...)
視圖和表函數必須返回一個SparkDataFrame或者考拉DataFrame.函數返回的Koalas DataFrame被Delta Live Tables運行時轉換為Spark Dataset。
除了閱讀之外外部數據源,您可以訪問與Delta Live Tables在同一管道中定義的數據集read ()
函數。下麵的示例演示如何創建beplay体育app下载地址customers_filtered
數據集使用read ()
功能:
@dlt.表格defbeplay体育app下载地址customers_raw():返回火花.讀.格式(“csv”).負載(“/數據/ cbeplay体育app下载地址ustomers.csv”)@dlt.表格defbeplay体育app下载地址customers_filteredA():返回dlt.讀(“beplay体育app下载地址customers_raw”).在哪裏(...)
你也可以使用spark.table ()
函數訪問在同一管道中定義的數據集或在metastore中注冊的表。當使用spark.table ()
函數來訪問在管道中定義的數據集,則在函數參數的前麵生活
關鍵字到數據集名稱:
@dlt.表格defbeplay体育app下载地址customers_raw():返回火花.讀.格式(“csv”).負載(“/數據/ cbeplay体育app下载地址ustomers.csv”)@dlt.表格defbeplay体育app下载地址customers_filteredB():返回火花.表格(“LIVE.beplay体育app下载地址customers_raw”).在哪裏(...)
來讀取數據表登記在亞轉移,在函數參數中省略生活
關鍵字,並可選地用數據庫名稱限定表名:
@dlt.表格defbeplay体育app下载地址():返回火花.表格(“sales.beplay体育app下载地址customers”).在哪裏(...)
Delta Live Tables確保管道自動捕獲數據集之間的依賴關係。當執行更新並在管道的事件日誌中記錄沿襲信息時,此依賴項信息用於確定執行順序。
方法也可以返回數據集spark.sql
查詢函數中的表達式。若要從內部數據集讀取數據,請使用前置操作生活。
到數據集名稱:
@dlt.表格defchicago_beplay体育app下载地址customers():返回火花.sql(select * from live。beplay体育app下载地址customers_cleaned WHERE city = 'Chicago'")
視圖和表都有以下可選屬性:
評論
:此數據集的人類可讀的描述。spark_conf
:一個Python字典,僅包含執行此查詢所需的Spark配置。執行的數據質量約束預期.
表還提供了對其物化的額外控製:
指定表是怎樣的分區使用
partition_cols
.您可以使用分區來加快查詢速度。您可以在定義視圖或表時設置表屬性。看到表屬性欲知詳情。
屬性為表數據設置存儲位置
路徑
設置。默認情況下,表數據存儲在管道存儲位置路徑
不設置。您可以選擇使用Python指定表模式
StructType
或SQL DDL字符串。當使用DDL字符串指定時,定義可以包括生成的列.下麵的示例創建一個名為銷售
使用顯式指定的模式:sales_schema=StructType([StructField(“customer_id”,StringType(),真正的),StructField(“customer_name”,StringType(),真正的),StructField(“number_of_line_items”,StringType(),真正的),StructField(“order_datetime”,StringType(),真正的),StructField(“order_number”,LongType(),真正的)])@dlt.表格(評論=“銷售原始數據”,模式=sales_schema)def銷售():返回(“…”)@dlt.表格(評論=“銷售原始數據”,模式=”“”customer_id字符串,customer_name字符串,number_of_line_items字符串,order_datetime字符串,order_number長,(dayofweek(order_datetime))”“”,partition_cols=[“order_day_of_week”])def銷售():返回(“…”)
默認情況下,Delta Live表從
表格
定義,如果不指定模式。
Python庫
要指定外部Python庫,請使用%皮普安裝
神奇的命令。更新開始時,Delta Live Tables將運行所有包含%皮普安裝
命令,然後再運行任何表定義。管道中包含的每個Python筆記本都可以訪問所有已安裝的庫。下麵的示例安裝numpy
庫,並使它對管道中的任何Python筆記本都可以全局使用:
%皮普安裝numpy進口numpy作為np
要安裝Python wheel包,請將wheel路徑添加到%皮普安裝
命令。已安裝的Python輪包可用於管道中的所有表。下麵的示例安裝一個名為dltfns - 1.0 - py3 any.whl——沒有
從DBFS目錄/ dbfs / dlt /
:
%皮普安裝/dbfs/dlt/dltfns-1.0-py3-沒有一個-任何.whl
看到安裝一個車輪包%pip.
Python API規範
創建表
要在Python中定義表,請應用@ table
裝飾。的@ table
控件的別名@create_table
裝飾。
進口dlt@dlt.表格(名字=“<名稱>”,評論=“< >評論”,spark_conf={“< >鍵”:“<價值”,“<鍵”:“< >價值”},table_properties={“< >鍵”:“< >價值”,“< >鍵”:“< >價值”},路徑=“< storage-location-path >”,partition_cols=[“<劃分字段>”,“<劃分字段>”),模式=“模式定義”,臨時=假)@dlt.預計@dlt.expect_or_fail@dlt.expect_or_drop@dlt.expect_all@dlt.expect_all_or_drop@dlt.expect_all_or_faildef<函數-名字>():返回(<查詢>)
創建視圖
要在Python中定義視圖,請應用@view
裝飾。的@view
控件的別名@create_view
裝飾。
進口dlt@dlt.視圖(名字=“<名稱>”,評論=“< >評論”)@dlt.預計@dlt.expect_or_fail@dlt.expect_or_drop@dlt.expect_all@dlt.expect_all_or_drop@dlt.expect_all_or_faildef<函數-名字>():返回(<查詢>)
Python的屬性
@table或@view |
---|
名字 類型: 表或視圖的可選名稱。如果沒有定義,則使用函數名作為表或視圖名。 |
評論 類型: 表的可選描述。 |
spark_conf 類型: 用於執行此查詢的可選Spark配置列表。 |
table_properties 類型: 可選的表屬性在桌子上。 |
路徑 類型: 表數據的可選存儲位置。如果不設置,係統將默認為管道存儲位置。 |
partition_cols 類型: 用於對表進行分區的一個或多個列的可選列表。 |
模式 類型: 表的可選模式定義。模式可以定義為SQL DDL字符串,也可以定義為Python |
臨時 類型: 創建臨時表。此表沒有持久化元數據。 默認為“False”。 |
表或視圖定義 |
---|
def <函數名> () 定義數據集的Python函數。如果 |
查詢 一個返回Spark Dataset或Koalas DataFrame的Spark SQL語句。 使用
你也可以使用
使用 使用 使用PySpark語法,用Python定義Delta Live Tables查詢。 |
預期 |
---|
@expect(“描述”、“約束”) 聲明由標識的數據質量約束 |
@expect_or_drop(“描述”、“約束”) 聲明由標識的數據質量約束 |
@expect_or_fail(“描述”、“約束”) 聲明由標識的數據質量約束 |
@expect_all(期望) 聲明一個或多個數據質量約束。 |
@expect_all_or_drop(期望) 聲明一個或多個數據質量約束。 |
@expect_all_or_fail(期望) 聲明一個或多個數據質量約束。 |
表屬性
所支持的表屬性之外三角洲湖,可以設置以下表屬性。
表屬性 |
---|
pipelines.autoOptimize.managed 默認值: 啟用或禁用此表的自動調度優化。 |
pipelines.autoOptimize.zOrderCols 默認值:無 一個可選字符串,包含以逗號分隔的列名列表,該表按z順序排列。例如, |
pipelines.reset.allowed 默認值: 控製是否允許此表進行完全刷新。 |