如何插入配置单元表,按从临时表读取的日期进行分区? [复制]

Posted

技术标签:

【中文标题】如何插入配置单元表,按从临时表读取的日期进行分区? [复制]【英文标题】:How to insert into hive table, partitioned by date reading from temp table? [duplicate] 【发布时间】:2020-03-10 19:03:58 【问题描述】:

我有一个 Hive 临时表,没有任何具有所需数据的分区。我想选择这些数据并插入到另一个按日期分区的表中。我尝试了以下技术,但没有成功。

源表架构

 CREATE TABLE cls_staging.cls_billing_address_em_tmp
( col1 string,
 col2 string,
col3 string);

目标表:

CREATE TABLE cls_staging.cls_billing_address_em_tmp
    ( col1 string,
     col2 string,
    col3 string) 
    PARTITIONED BY (
       curr_date string) 
      STORED AS ORC;

查询插入目标表:

insert overwrite table cls_staging.cls_billing_address_em_tmp partition (record_date)  select col1, col2, col3, FROM_UNIXTIME(UNIX_TIMESTAMP()) from myDB.mytbl;

错误

Dynamic partition strict mode requires at least one static partition column

第二次

insert overwrite table cls_staging.cls_billing_address_em_tmp partition (record_date = FROM_UNIXTIME(UNIX_TIMESTAMP()))  select col1, col2, col3 from myDB.mytbl;

错误:

cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP'

【问题讨论】:

它回答了你的问题吗? ***.com/questions/24238583/hive-dynamic-partitioning 【参考方案1】:

第一次开启动态分区和非严格模式:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

insert overwrite table cls_staging.cls_billing_address_em_tmp partition (record_date)  
select col1, col2, col3, current_timestamp from myDB.mytbl;

第二个:不要为此使用unix_timestamp(),因为它会产生很多不同的时间戳,使用current_timestamp常量,阅读这个:https://***.com/a/58081191/2700344

【讨论】:

我们也可以选择它的格式吗? @Saawan 当然。像这样指定格式:select date_format(current_timestamp,'yyyy-MM-dd HH:mm:ss:SSS');

以上是关于如何插入配置单元表,按从临时表读取的日期进行分区? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有分区的外部配置单元表 - 当我添加具有读取访问权限的数据的分区时出现权限错误

如何将原始数据插入具有不同列序列的配置单元表中?

使用 bigquery 和单个查询进行分区,根据日期将表拆分为多个表

如何将按月分区的配置单元表中的数据加载到按周分区的配置单元表中

以可使用 Impala 查询的方式在包含复杂类型的配置单元表上创建日期限制视图?

Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?