在 Hive 中使用子句创建外部 TABLE

CREATE EXTERNAL TABLE with clause in Hive

我想知道是否可以根据条件(我的意思是 WHERE)在 Hive 中创建外部 table?

Hive 无法使用 CTAS 创建外部 table。

CTAS 有这些限制:

1.The 目标 table 不能是分区的 table。

2.The 目标 table 不能是外部 table.

3.The 目标 table 不能是列表分桶 table。

参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableAsSelect(CTAS)

或者, 您可以创建一个外部 table 并使用 select 查询插入到 table。

您可以创建外部 table,方法是将 select 语句与 where clause.First 创建外部 table,然后使用插入覆盖外部 [=16] =] 使用 select 和 where 子句。

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";

您不能在 Hive 中使用 Create Table As Select (CTAS) 创建外部 table。但是您可以先创建外部 table,然后使用您的过滤条件将来自任何其他 table 的数据插入 table。下面是创建一个存储为 ORC 的分区外部 table 并将记录插入 table.

的示例
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";
CREATE TABLE myTable AS
SELECT a,b,c FROM selectTable;