在配置单元中创建表时向列添加默认值

Posted

技术标签:

【中文标题】在配置单元中创建表时向列添加默认值【英文标题】:Adding a default value to a column while creating table in hive 【发布时间】:2015-05-04 15:07:59 【问题描述】:

我能够从外部文件中的数据创建一个配置单元表。现在我希望从上一个表中的数据创建另一个表,其中包含具有默认值的附加列。

我知道可以使用 CREATE TABLE AS SELECT 但如何添加具有默认值的其他列?

【问题讨论】:

【参考方案1】:

您可以指定在创建/更新时从表中选择哪些列。只需提供默认值作为列之一。 UPDATE 示例如下:

创建简单的表并用值填充它:

hive> create table table1(col1 string);
hive> insert into table table1 values('val1');
hive> select col1 from table1;
OK
val1
Time taken: 0.087 seconds, Fetched: 1 row(s)

允许动态分区:

hive> SET hive.exec.dynamic.partition.mode=nonstrict;

创建第二个表:

hive> create table table2(col1 string, col2 string);

使用默认值从 table1 填充它:

hive> insert overwrite table table2 select col1, 'DEFAULT' from table1;
hive> select * from table2;
OK
val1    DEFAULT
Time taken: 0.081 seconds, Fetched: 1 row(s)

【讨论】:

很难相信在 hive ql 中没有类似的支持【参考方案2】:

我也一直在寻找解决方案并想出了这个:

CREATE TABLE test_table AS SELECT
 CASE 
  WHEN TRUE
  THEN "desired_value" 
 END AS default_column_name;

【讨论】:

以上是关于在配置单元中创建表时向列添加默认值的主要内容,如果未能解决你的问题,请参考以下文章

在 clickhouse 中创建表时如何将自定义默认值添加到 Nullable 类型?

在配置单元中创建外部表时更改默认位置

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

在Oracle 11g 中创建表时如何保存表?

在mysql中创建表时使用变量作为表名

ORACLE中创建如何创建表,并设置结构和默认值