使用Hive插入时的多个分区问题

4xrmg8kj  于 2023-10-18  发布在  Hive
关注(0)|答案(1)|浏览(178)

我正在创建一个包含多个分区的表。我创建的表很好,一切似乎都工作得很好,但我不能插入使用我的插入代码,并得到正确的响应,一个似乎分区上的列被倒置,或交换。这意味着event_datestem被交换,这是非常令人沮丧的。
因此,例如在分区代码中的databricks是:

%sql

CREATE TABLE IF NOT EXISTS table_name (
company_id string
, event_date string
, context_page_url string
, stem string
)
USING parquet partitioned by (event_date, stem);

插入代码为:`

%sql

insert overwrite table table_name partition (event_date, steam)
(
  select cs.company_id as company_id 
  , cs.context_page_url as context_page_url 
  , split_part(cs.context_page_url, '/', 7) as stem
  , try_cast(concat(cs.year, "-", cs.month, "-", cs.day) as string) as event_date
  from cstr_table cs where year=2023 and month = 5 and day = 1 and geo_country_iso = "GB" and context_page_url like "%help%"
)

如果我只在单个字段上分区,情况就不是这样了:event_date . 以正确的方式插入数据,其中event_date反映日期,而不是stem`。

tjjdgumg

tjjdgumg1#

您需要修改您的选择沿着以下修改。

  • 分区列必须是选择查询中的最后一列。
  • 添加以下set命令
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict
  • 修改后的插入命令是
INSERT OVERWRITE TABLE table_name PARTITION (event_date, steam)
 SELECT cs.company_id as company_id , 
 cs.context_page_url as context_page_url ,
 , try_cast(concat(cs.year, "-", cs.month, "-", cs.day) as string) as 
 event_date,
 , split_part(cs.context_page_url, '/', 7) as stem
 from cstr_table cs where year=2023 and month = 5 and day = 1 and 
 geo_country_iso = "GB" and context_page_url like "%help%"

相关问题