0

我正在使用 HQL 从配置单元表中提取一些数据,同时添加一个包含当前时间的额外行。

类似于:从 myTable 中选择 col1、col2、col3、unix_timestamp();

我期待所有记录在第四列中都具有相同的值。

我期待类似的东西:

col1Value, col2Value, col3Value, col4Value, timeT
col1Value, col2Value, col3Value, col4Value, timeT
col1Value, col2Value, col3Value, col4Value, timeT
col1Value, col2Value, col3Value, col4Value, timeT
col1Value, col2Value, col3Value, col4Value, timeT
col1Value, col2Value, col3Value, col4Value, timeT

但是我得到这样的东西:

col1Value, col2Value, col3Value, col4Value, timeT1
col1Value, col2Value, col3Value, col4Value, timeT1
col1Value, col2Value, col3Value, col4Value, timeT1
col1Value, col2Value, col3Value, col4Value, timeT2
col1Value, col2Value, col3Value, col4Value, timeT2
col1Value, col2Value, col3Value, col4Value, timeT2
col1Value, col2Value, col3Value, col4Value, timeT2
col1Value, col2Value, col3Value, col4Value, timeT3
col1Value, col2Value, col3Value, col4Value, timeT3

数据集并没有那么大,只使用了一个映射器。所以我的问题是:

在单台机器中,unix_timestamp() 是为每一行(hive 映射器中的每一行)评估,还是一个值被评估并用于所有行?

我正在使用 MapR M5/hive 0.9.0

4

1 回答 1

1

根据LanguageManual:“UDF 的评估方法的上下文是一次一行”。我相信这意味着您的unix_timestamp()调用将在映射阶段对发出的每条记录进行一次评估。

也许您可以使用子查询进行unix_timestamp()一次评估,然后将结果加入原始查询?

于 2013-08-06T08:20:24.680 回答