在 HIVE 插入查询中,为啥 from 子句在开头?

Posted

技术标签:

【中文标题】在 HIVE 插入查询中,为啥 from 子句在开头?【英文标题】:In a HIVE insert query why from clause is in the beginning?在 HIVE 插入查询中,为什么 from 子句在开头? 【发布时间】:2015-04-22 05:01:52 【问题描述】:

我在 o'reilly programmin hive 中找到了这个示例和其他几个示例:

FROM staged_employees se
INSERT OVERWRITE DIRECTORY '/tmp/or_employees'
SELECT * WHERE se.cty = 'US' and se.st = 'OR'
INSERT OVERWRITE DIRECTORY '/tmp/ca_employees'
SELECT * WHERE se.cty = 'US' and se.st = 'CA'
INSERT OVERWRITE DIRECTORY '/tmp/il_employees'
SELECT * WHERE se.cty = 'US' and se.st = 'IL';

不知道为什么s开头的那个'from'子句?

【问题讨论】:

【参考方案1】:

那是因为它是多表插入。一次更新多个故事或目录。 在您指出的示例中,查询的输出: SELECT * FROM stage_employees se WHERE se.cty = 'US' and se.st = 'OR' 被插入到表“/tmp/or_employees”中。

下面的其他两个 SELECT 查询也是如此,其中 st = 'CA' 和 st = 'IL'。

希望有所帮助 普拉桑特

【讨论】:

【参考方案2】:

“FROM”子句用于 hive 查询的开头,用于将单个表中的数据插入到多个表/目录中。无需在插入查询中使用的每个选择语句中都写表名。在您提到的上述查询中,您可以看到 INSERT 查询中的 select 语句中缺少“FROM”子句(例如:SELECT * missing FROM 子句 WHERE se.cty = 'US'和 se.st = 'OR')。

当您想通过从单个表中选择数据将数据一次性插入多个表或目录时,这很有用。从中选择数据的表是在查询的开头使用 FROM 子句 (FROM staged_employees se) 写入的,这避免了在所有插入查询中写入它。

希望这会有所帮助。

【讨论】:

以上是关于在 HIVE 插入查询中,为啥 from 子句在开头?的主要内容,如果未能解决你的问题,请参考以下文章

在 from 子句 *and* where 子句中添加连接条件使查询更快。为啥?

hive UNION和子查询

为啥在 FROM 子句中再添加一个 INNER JOIN 会使我的 SQL 查询如此缓慢?

为啥“在适用于 UPDATE 或 DELETE 语句的目标表的 FROM 子句中”忽略 NOLOCK?

如何在子查询中使用外部查询中的列从另一个表中获取结果?

如何在配置单元中使用正则表达式排除字符串中的特殊字符