将数据加载到具有动态分区的蜂巢表中



文件empdetails.log以下数据 -

100 AAA 12000 HYD

101 BBB 13000浦那

102 CCC 14000 HYD

103 DDD 10000 Blore

104 EEE 12000 Pune

我想将此数据加载到具有动态分区的" EMP"表中,以便从EMP中选择 *;给我以下输出(按位置分区)。

100 AAA 12000 HYD

102 CCC 14000 HYD

101 BBB 13000浦那

104 EEE 12000 Pune

103 DDD 10000 Blore

任何人都可以提供要在Hive中执行的加载命令。

表创建 - 创建表EMP(CID INT,CNAME String,CSAL INT)由(cloc string)划分行格式定界由" t"终止的字段存储为textfile;

用于动态分区,您必须使用插入...选择查询(Hive Insert)。

将数据插入具有DP的蜂巢表中,这是一个两个步骤过程。

  1. 在Hive中的分期数据库中创建分期表,然后将数据从该表中加载到该表中外部来源,例如RDBM,文档数据库或本地文件使用蜂巢负载。
  2. 使用Hive Insert。

另外,在Hive中设置以下属性。

  • 设置hive.exec.dynamic.partition = true;
  • 设置hive.exec.dynamic.partition.mode = nountrict;

以下示例在Cloudera VM上工作。

-- Extract orders data from mysql (Retail_DB.products) 
select * from orders into outfile '/tmp/orders_data.psv' fieldsterminated by '|' lines terminated by 'n';
-- Create Hive table with DP - order_month is DP.
CREATE TABLE orders (order_id int, order_date string, order_customer_id int, order_status string ) PARTITIONED BY (order_month string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'STORED AS TEXTFILE;
--Create staging table in Hive.
CREATE TABLE orders_stage (order_id int,order_date string, order_customer_id int, order_status string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE;
--Load data into staging table (Hive)
Load data into staging table  load data local inpath 
/tmp/orders_data.psv' overwrite into table orders_stage;
--Insert into Orders, which is final table (Hive). 
Insert overwrite table retail_ods.orders partition (order_month)
select order_id, order_date, order_customer_id,order_status,
substr(order_date, 1, 7) order_month from retail_stage.orders_stage;

您可以在https://cwiki.apache.org/confluence/display/hive/dynamicpartitions

上找到更多详细信息。

最新更新