某些Hive派生工具(例如Hadoop)需要一个表名才能进行SQL查询以获取当前时间:
SELECT UNIX_TIMESTAMP() FROM ANYTABLE
表名既无关紧要又多余,但是是必需的(其他Hive方言不允许使用FROM子句,有些则不在乎是否存在FROM子句)。
如果不包括FROM子句,我从Cloudera Hadoop收到的错误: [Cloudera] [Hardy](80)执行查询时,服务器中引发了语法或语义分析错误。来自服务器的错误消息:处理语句时出错:失败:ParseException行1:23输入不匹配” from from子句中的FROM期望')'
如果有任何表可用,则可以从“ SHOW TABLES”中获得一个。但这需要另一个查询,我想避免这种情况。
是否存在可用于此目的的通用/系统表名称?还是在没有已知表名的情况下查询时间的另一种方法?
(我发现需要FROM子句的Hive实现是Cloudera Hadoop和Horton。如果使用FROM子句,Presto和Athena会给出错误。我检查的其他Hive实现并不关心是否存在FROM子句
答案 0 :(得分:0)
Hortonworks Hive允许您选择无FROM
子句。
0: jdbc:hive2://localhost> SELECT UNIX_TIMESTAMP();
+-------------+--+
| _c0 |
+-------------+--+
| 1555423112 |
+-------------+--+
1 row selected (0.204 seconds)
0: jdbc:hive2://localhost> SELECT'foo bar';
+----------+--+
| _c0 |
+----------+--+
| foo bar |
+----------+--+
1 row selected (0.855 seconds)
如果尝试选择时间戳时仍然出现错误,请发布错误和Hive版本。