从外部表向外部表插入数据

时间:2016-06-01 08:48:38

标签: hadoop mapreduce hive external-tables

从外部表-1向外部表-2插入数据时,外部表-2的数据存储在/user/hive/warehouse/db-name/table-name/中,但作为外部表,它不应该将数据存储到仓库目录中吗?登记/> 我们应该指定将数据存储到外部表的位置吗?

3 个答案:

答案 0 :(得分:1)

您在配置单元中创建的任何表,无论其内部或外部文件是否移动到“/ user / hive / warehouse”或您指定的任何内容    hive.metastore.warehouse.dir 在hive-site.xml中

创建外部表 - 以防止有人意外丢弃表时数据丢失。尝试创建2个外部表并浏览文件系统。您可以轻松理解这个概念。

答案 1 :(得分:1)

是的,您必须在创建外部表时提及该位置。 你可以按照以下方式完成。

创建表table1和table2:

CREATE EXTERNAL TABLE table1(col1 INT, col2 BIGINT,col3 STRING)
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS TEXTFILE
 LOCATION '<hdfs_location1>';

CREATE EXTERNAL TABLE table2(col21 INT, col22 BIGINT,col23 STRING)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
     STORED AS TEXTFILE
     LOCATION '<hdfs_location2>';

现在将table1中的数据插入表2

INSERT OVERWRITE TABLE table2(col21,col22,col23) SELECT * FROM table1

它会将数据从表1复制到table2 hdfs位置。

请注意,外部表格不支持CTAS(创建表AS选择)。

答案 2 :(得分:0)

我认为你已经创建了外部表-2而没有指定LOCATION。尝试使用以下语法

CREATE EXTERNAL TABLE [db_name.]table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [
   [ROW FORMAT row_format] 
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]
  [AS select_statement];