設置nullability當使用SaveAsTable與δ表

學習如何創建一個增量表的nullability列設置為false。

寫的anshuman.sahu

去年發表在:2022年10月14日

當創建一個增量表saveAsTable默認的nullability列真正的(列可以包含null值)。這是預期行為。

在某些情況下,您可能想要創建一套三角洲的nullability列的表(列不能包含空值)。

指令

使用創建表命令來創建表和定義的列不能包含空值通過使用非空

例如,這個示例代碼創建了一個三角洲表有兩個整數列。列命名可以包含null值,但列命名呢null1不能包含空值,因為它創建了非空

% sql CREATE TABLE <表名> (num Int, Int num1 NOT NULL)使用三角洲

現在我們已經三角洲表定義我們可以創建一個示例DataFrame和使用saveAsTable寫信給三角洲表。

此示例代碼生成示例數據和配置模式isNullable屬性設置為真正的為字段全國礦工工會字段num1。這個樣例數據存儲在一個新創建的DataFrame。

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

進口org.apache.spark.sql.types。_ val數據= Seq(行(1、3)、行(5、7))= StructType val模式(列表(StructField (“num”, IntegerType,真的),StructField (“num1”, IntegerType假)))val df =火花。createDataFrame (spark.sparkContext.parallelize(數據),模式)df.write.mode .format(“覆蓋”)(“δ”).saveAsTable(“<表名稱>”)

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

根|——num:整數(nullable = true) |——num1:整數(nullable = false)


刪除

警告

如果你沒有配置nullability列事先通過創建一個表,而不是試著寫數據到一個未定義的表,所有列的nullability違約真正的。在這種情況下DataFrame方案將被忽略。

舉個例子,如果你跳過表創建,就試著寫saveAsTable的數據表,然後閱讀模式,所有列被定義為可空。


這篇文章有用嗎?