在配置单元中创建带有子句的外部表

qhhrdooz  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(272)

我想知道是否有可能根据一个条件(我指的是一个where)在hive中创建一个外部表?

wrrgggsh

wrrgggsh1#

不能在配置单元中使用create table as select(ctas)创建外部表。但您可以先创建外部表,然后使用筛选条件从任何其他表向表中插入数据。下面是创建存储为orc的分区外部表并将记录插入该表的示例。

CREATE EXTERNAL TABLE `table_name`( 
  `column_1` bigint, 
  `column_2` string)
PARTITIONED BY (
  `partition_column_1` string,
  `partition_column_2` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  '${dataWarehouseDir}/table_name'
TBLPROPERTIES (
  'orc.compress'='ZLIB');

set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE table_name PARTITION(partition_column_1, partition_column_2)
SELECT column_1, column_2, partition_column_1, partition_column_2 FROM Source_Table WHERE column = "your filter criteria here";
xhv8bpkk

xhv8bpkk2#

配置单元无法使用CTA创建外部表。
CTA有以下限制:
1.目标表不能是分区表。
2.目标表不能是外部表。
3.目标表不能是列表列表列表。
参考文献:https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-CreateTableAssetSelect(ctas)
或者,您可以创建一个外部表,并使用selectquery插入到表中。

6mw9ycah

6mw9ycah3#

您可以通过使用where子句分隔select语句来创建和外部表。首先创建外部表,然后使用select with where子句使用insert overwrite to external table。

CREATE EXTERNAL TABLE table_name
STORED AS TEXTFILE
LOCATION '/user/path/table_name';

INSERT OVERWRITE TABLE table_name
SELECT * FROM Source_Table WHERE column="something";

相关问题