在 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 子句中添加连接条件使查询更快。为啥?
为啥在 FROM 子句中再添加一个 INNER JOIN 会使我的 SQL 查询如此缓慢?