【问题标题】:How to assign default value in deltalake如何在 deltalake 中分配默认值
【发布时间】:2022-01-24 08:04:49
【问题描述】:

我有以下客户表的 ddl

CREATE TABLE customer (
  name string NOT NULL
  ,id string NOT NULL DEFAULT 'No ID'
  ,age INT
) using delta

在 deltalake 中创建表时遇到 default 关键字问题

谁能帮帮我,如何在 ddl 中为 deltalake 定义默认值?

【问题讨论】:

  • 你遇到了什么错误?

标签: pyspark apache-spark-sql databricks azure-databricks delta-lake


【解决方案1】:

创建增量表不支持DEFAULT关键字:

CREATE [ OR REPLACE ] table_identifier [ ( col_name1 col_type1 [ NOT NULL ] [ GENERATED ALWAYS AS ( generation_expression1 ) ] [ COMMENT col_comment1 ], ... ) ] 使用 DELTA [ 位置 ]

这叫generated-column

id STRING GENERATED ALWAYS AS (CAST('No ID' AS STRING)),

【讨论】:

  • 如果用户在创建表后定义任何其他值将被存储?
  • @SMValiAli 当然,SQL 表达式CAST('No ID' AS STRING) 仅用于在写入表时未显式提供值时生成值。
  • spark.sql("""create table demo_deltalake.customer(name string not null, id string GENERATED ALWAYS as (cast('No ID' as string)), age int )using delta"" ") 我在 databricks 中使用了这个命令,但得到了以下错误 ParseException:在输入'create table demo_deltalake.customer(\n name string not null,\n id string GENERATED'(第 3 行,pos 12) == SQL = 时没有可行的选择= 创建表 demo_deltalake.customer(名称字符串不为空,id 字符串始终生成为(cast('No ID' as string)),------------^^^ age int)使用 delta
  • 在使用 GENERATED ALWAYS AS (coalesce('No ID', name)) 在输入时遇到与没有可行替代方案相同的问题
  • @SMValiAli 你可以试试GENERATED ALWAYS AS (substring(name, 0, 1))吗?只是为了确认它在您的环境中有效
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多