Indeed! The documentation is a fair bit off. I've tested the below on Hive 0.12 on CDH and it works fine. Lefty, would you please update the documentation on the two pages below?
----------------------- Source: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ExchangePartition "Exchange Partition" section {code} ALTER TABLE source_table_name EXCHANGE PARTITION (partition_spec) WITH TABLE target_table_name; {code} This statement lets you move the data in a partition from a table to another table that has the same schema and partition keys, but does not already have that partition. For details, see Exchange Partition and HIVE-4095. ----------------------- Source: https://cwiki.apache.org/confluence/display/Hive/Exchange+Partition The EXCHANGE PARTITION DDL command has been proposed as part of https://issues.apache.org/jira/browse/HIVE-4095. The syntax is: {code} alter table <source_table_name> exchange partition (<partition spec>) with table <target_table_name>; {code} The partition spec can be fully or partially specified. The semantics of the above statement is that the data is moved from the source table to the target table. Both the tables must have the same schema and the same partition keys. The operation fails in the presence of an index. The partition(s) must exist in the source table and mus NOT exists in the target one. Consider the following examples: ## Full partition spec {code} create table T1(a string, b string) partitioned by (ds string); create table T2(a string, b string) partitioned by (ds string); alter table T1 add partition (ds = '1'); {code} The operation: {code} alter table T1 exchange partition (ds='1') with table T2; {code} moves the data from T1 to T2@ds=1. The operation fails if T2@ds=1 already exists or T1 and T2 have different schemas and/or partition keys. ## Partial partition spec {code} create table T1(a string, b string) partitioned by (ds string, hr string); create table T2(a string, b string) partitioned by (ds string, hr string); alter table T1 add partition (ds = '1', hr = '00'); alter table T1 add partition (ds = '1', hr = '01'); alter table T1 add partition (ds = '1', hr = '03'); {code} The operation: {code} alter table T1 exchange partition (ds='1') with table T2; {code} moves the 3 partitions from T1 to T2. The operation fails if any of the partitions already exist on T2 or if T1 and T2 have different schemas and/or partition keys. Either all the partitions of T1 will get created or the whole operation will fail. All partitions of T1 are dropped. On 21 July 2014 05:52, Kristof Vanbecelaere <kristof.vanbecela...@gmail.com> wrote: > I think the documentation related to exchanging partitions is not accurate > > https://cwiki.apache.org/confluence/display/Hive/Exchange+Partition > > when I try it out on hortonworks sandbox 2.1 which runs Hive 0.13 I get > this: > > hive> create table T1(a string, b string) partitioned by (ds string); > > OK > > Time taken: 0.72 seconds > > hive> create table T2(a string, b string); > > OK > > Time taken: 0.357 seconds > > hive> alter table T1 exchange partition (ds='1') with table T2; > > FAILED: SemanticException [Error 10235]: Tables have incompatible schemas > and their partitions cannot be exchanged. > > -- André Araújo Big Data Consultant/Solutions Architect The Pythian Group - Australia - www.pythian.com Office (calls from within Australia): 1300 366 021 x1270 Office (international): +61 2 8016 7000 x270 *OR* +1 613 565 8696 x1270 Mobile: +61 410 323 559 Fax: +61 2 9805 0544 IM: pythianaraujo @ AIM/MSN/Y! or ara...@pythian.com @ GTalk “Success is not about standing at the top, it's the steps you leave behind.” — Iker Pou (rock climber) -- --