在 Apache Spark SQL (Azure Databricks) 中,我创建了一个如下表:
CREATE TABLE t(
a BIGINT,
b BIGINT NOT NULL
)
我已验证我有一个可为 null 的列和一个不可为 null 的列,因为如果我尝试在
NULL
列中插入 b
,则会收到错误,但我可以在 a
列中插入 null。
但是,以下声明
DESCRIBE TABLE t
不告诉我哪些列可以为空,哪些列不可以为空。
DESCRIBE TABLE EXTENDED
也没有。我怎样才能获得完整的描述?
Spark SQL 辅助命令(例如
DESCRIBE TABLE
和 SHOW COLUMNS
)不会根据文档显示列 NULL 约束。
有这个命令:
SHOW TABLE EXTENDED like 't'
它返回
information
列中的模式以及其他信息,但可读性不强。
//Table Properties: [transient_lastDdlTime=1643396075]
//.....
//Partition Provider: Catalog
//Schema: root
// |-- a: long (nullable = true)
// |-- b: long (nullable = false)
spark.catalog
与 scala/python api 一起使用,那么这很简单:
spark.catalog.listColumns("t").show()
//+----+-----------+--------+--------+-----------+--------+
//|name|description|dataType|nullable|isPartition|isBucket|
//+----+-----------+--------+--------+-----------+--------+
//| a| null| bigint| true| false| false|
//| b| null| bigint| false| false| false|
//+----+-----------+--------+--------+-----------+--------+
用这个
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = "database_name"
AND
TABLE_NAME ="t"
您要查找的列名称称为“IS_NULLABLE”
这对我有用 select * from system.information_schema.columns 其中 table_schema = 'finance' AND table_name = 'YourtableNM' 并且 is_nullable = 'NO'