Spark 3.4已支持GENERATED ALWAYS AS,Delta Catalog何时支持该特性?
Delta Catalog对GENERATED ALWAYS AS列表达式的支持说明
Spark 3.4已支持列的GENERATED ALWAYS AS表达式,该版本不再对CREATE/REPLACE TABLE语句中的该语法抛出解析错误,仅在目录不支持时触发分析异常。
你尝试创建带生成列的Delta表的SQL语句如下:
CREATE TABLE IF NOT EXISTS delta_generated_column_test ( id INT, name STRING, date_created TIMESTAMP, dt DATE GENERATED ALWAYS AS (cast(date_trunc('MONTH',date_created) as date)) )USING DELTA
执行后触发异常:
The feature is not supported: Table
spark_catalog.default.delta_ttttdoes not support generated columns. Please check the current catalog and namespace to make sure the qualified table name is expected, and also check the catalog implementation which is configured by "spark.sql.catalog".
关于Delta Catalog的支持进度
目前Delta Lake官方尚未正式支持标准SQL的GENERATED ALWAYS AS生成列语法。不过Delta Lake提供了**衍生列(Derived Columns)**的替代方案,可通过以下方式实现类似计算列的效果:
- 写入数据时通过Spark SQL直接计算生成目标列
- 利用视图封装列计算逻辑,间接实现生成列的查询效果
- 在
MERGE/UPDATE操作中动态计算列值
社区已存在对该特性的需求讨论,未来适配Spark 3.4+的Delta Lake版本(如2.4及后续版本)有望纳入对标准GENERATED ALWAYS AS语法的原生支持,可关注Delta Lake官方更新日志跟踪进度。
内容的提问来源于stack exchange,提问作者业鹏王
相关产品推荐
相关产品推荐

