回答

收藏

动态分区+在HIVE上创建AS

技术问答 技术问答 242 人阅读 | 0 人回复 | 2023-09-14

我正在尝试CREATE AS使用HiveCLI上的动态分区从另一个表创建一个新表。我正在从Hive官方Wiki学习,这里有以下示例:  a$ C1 w6 F; O5 q. p2 p
CREATE TABLE T (key int, value string) 6 q* U% i- u% j3 ?6 m
PARTITIONED BY (ds string, hr int) AS9 i  \1 ^: H, d# o' d5 g
SELECT key, value, ds, hr+1 hr1
" M* ^8 h% _$ ~- h# v' T/ D" \7 O) @   FROM srcpart 8 P! t* ]: P! Q- H9 z
   WHERE ds is not null
7 j- U+ H3 h* `7 A   And hr>10;
. n/ U7 j1 x( z. D/ {0 s. ?2 s5 G0 t但是我收到了这个错误:& E! P7 P8 h3 s/ b  v

* c* n$ ~* k' B: h$ |0 s& e; ]失败:SemanticException [错误10065]:% t: R  H. [- P& f8 s3 R# f
CREATE TABLE AS SELECT命令无法指定目标表的列列表
1 J7 j; d( D# n. q
# h& P' T2 @+ w# y% J  M
资料来源:https :
2 `5 g+ Y0 y$ b$ V//cwiki.apache.org/confluence/display/Hive/DynamicPartitions#DynamicPartitions-
& h  d8 {2 J* a5 z0 [8 ?7 x( aSyntax  M2 l0 M9 E6 B2 p$ l+ N' c
               
' m- I  F9 H- K% V- Z! _! J: V解决方案:
" d; ^) B! V6 _$ Z               
5 T$ B/ u9 B& e* C: s# w4 N
9 @: Y+ V# k2 B0 Y7 ]1 Y+ B' J; U
                由于您已经了解了目标表的完整模式,因此请先尝试创建它,然后使用LOAD DATA命令填充它:
- W! ^2 b0 o9 e/ A4 }6 C7 W+ [SET hive.exec.dynamic.partition.mode=nonstrict;
; z9 V3 A. b5 Y$ h* p  qCREATE TABLE T (key int, value string) , a6 _9 |( m: U9 h* {6 ^- _
PARTITIONED BY (ds string, hr int);
7 d" }/ O  T9 E9 r; EINSERT OVERWRITE TABLE T PARTITION(ds, hr)
* n( [# B* O) `! NSELECT key, value, ds, hr+1 AS hr $ z- p1 O' `4 ~% S: U' d: _
   FROM srcpart * c/ \+ M0 p  n, ?7 J( v% C
   WHERE ds is not null 6 P' n6 s" T" i8 q: }
   And hr>10;0 P- O" P3 Z. a7 M( ]: `) G/ g
注意:因为要执行完整的动态分区插入,所以需要set命令。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则