我想知道是否有可能根据一个条件(我指的是一个where)在hive中创建一个外部表?
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";
xhv8bpkk2#
配置单元无法使用CTA创建外部表。CTA有以下限制:1.目标表不能是分区表。2.目标表不能是外部表。3.目标表不能是列表列表列表。参考文献:https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-CreateTableAssetSelect(ctas)或者,您可以创建一个外部表,并使用selectquery插入到表中。
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";
3条答案
按热度按时间wrrgggsh1#
不能在配置单元中使用create table as select(ctas)创建外部表。但您可以先创建外部表,然后使用筛选条件从任何其他表向表中插入数据。下面是创建存储为orc的分区外部表并将记录插入该表的示例。
xhv8bpkk2#
配置单元无法使用CTA创建外部表。
CTA有以下限制:
1.目标表不能是分区表。
2.目标表不能是外部表。
3.目标表不能是列表列表列表。
参考文献:https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-CreateTableAssetSelect(ctas)
或者,您可以创建一个外部表,并使用selectquery插入到表中。
6mw9ycah3#
您可以通过使用where子句分隔select语句来创建和外部表。首先创建外部表,然后使用select with where子句使用insert overwrite to external table。