Spark SQL创建含非空元素数组列的表DDL语法咨询
Spark SQL 创建含非空元素数组/映射列的表
数组列(对应containsNull=False)
对应StructType([StructField("array_col", ArrayType(StringType(), False))])的DDL语句,在Spark 3.0及以上版本的正确写法是:
CREATE TABLE your_table_name ( array_col ARRAY<STRING NOT NULL> );
创建完成后,可通过DESCRIBE EXTENDED your_table_name查看列元数据,会显示containsNull=false,说明元素非空约束已生效。
如果你的Spark版本低于3.0,DDL不支持直接指定数组元素的非空约束,只能通过DataFrame API的StructType定义来创建表,或者在写入数据时通过业务逻辑保证数组元素不为NULL。
映射列(对应valueContainsNull=False)
同理,要创建值不允许为NULL的映射列,DDL写法为:
CREATE TABLE your_map_table ( map_col MAP<STRING, STRING NOT NULL> );
这里的STRING NOT NULL指定映射的值不能为NULL,对应MapType的valueContainsNull=False。
关于你之前的尝试
你用array_col array<string not null>的写法本身是正确的,但不生效的原因几乎可以确定是Spark版本低于3.0——Spark 3.0才引入了元素级的非空约束支持,低版本会忽略该语法,无法生效。
内容的提问来源于stack exchange,提问作者E. T.
相关产品推荐
相关产品推荐

