當對Delta表使用SaveAsTable時,設置可空性

學習如何創建一個將列的可空性設置為false的Delta表。

寫的anshuman.sahu

最後發布日期:2022年10月14日

創建Delta表時使用saveAsTable,列的可空性默認為真正的(列可以包含空值)。這是預期的行為。

在某些情況下,您可能希望創建一個Delta表,其中列的可空性設置為(列不能包含空值)。

指令

使用創建表命令創建表並定義不能包含空值的列非空

例如,這個示例代碼創建了一個包含兩個整數列的Delta表。列名為可以包含空值,但列名為null1不能包含空值,因為它是用非空

%sql CREATE TABLE < TABLE -name> (num Int, num1 Int NOT NULL) USING DELTA

現在我們已經定義了Delta表,我們可以創建一個樣本DataFrame並使用它saveAsTable寫入Delta表。

類型生成樣例數據並配置模式isNullable屬性設置為真正的對於這個領域全國礦工工會而且字段num1.這個示例數據存儲在一個新創建的DataFrame中。

最後一步,saveAsTable用於將數據寫入前麵創建的表。

進口org.apache.spark.sql.types。_ val data = Seq(Row(1,3), Row(5,7)) val schema = StructType(List(StructField("num", IntegerType, true), StructField("num1", IntegerType, false))) val df = spark。createDataFrame(spark.sparkContext.parallelize(data), schema) df.write.mode("overwrite").format("delta").saveAsTable("")

如果你讀表模式,全國礦工工會允許空值num1不允許空值。

|——num: integer (nullable = true) |——num1: integer (nullable = false)


刪除

警告

如果您沒有通過預先創建表來配置列的可空性,而是嚐試將數據寫入一個未定義的表,則所有列的可空性默認為真正的.在這種情況下,DataFrame方案被忽略。

例如,如果跳過表創建,隻是嚐試將數據寫入帶有saveAsTable的表,然後讀取模式,則所有列都定義為可空。


這篇文章有用嗎?