设置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的数据表,然后阅读模式,所有列被定义为可空。


这篇文章有用吗?