Hadoop查询、日期、循环、BASH或Java



我是Hadoop、Linux的新手,已经有15年没有用Java编码了,所以我通常只使用Hue来运行查询。我的问题是,我试图在12个月的数据上运行一个基本的选择查询,然而,由于数据集的巨大规模和应用的读取阈值,这个查询总是会失败。因此,我需要每周/每月运行相同的查询,将结果插入到预先存在的表中,然后将它们聚合到我的最后12个月期间。

原始查询:-

    SELECT col1, col2, col3
    FROM foo
    WHERE local_date >= '2013-09-01'
    AND local_date < '2014-09-01'

可能的新脚本(PLSQL格式):-

    DECLARE dtStart DATE;
    DECLARE dtEnd DATE;
    SET dtStart = (CURRENT_DATE - 1 YEAR) + 1 DAYS - DAY(CURRENT_DATE);
    SET dtEnd = CURRENT_DATE + 1 DAYS - DAY(CURRENT_DATE);
    WHILE dtStart < dtEnd THEN DO
            INSERT INTO test
            SELECT col1, col2, col3
            FROM foo
            WHERE local_date >= dtStart
            AND local_date < dtStart + 7 DAYS;
            IF dtStart = dtEnd THEN
                    SET dtStart = dtStart + 1 DAYS;
            ELSEIF dtEnd - dtStart < 7 THEN
                    SET dtStart = dtStart + (dtEnd - dtStart) DAYS;
            ELSE
                    SET dtStart = dtStart + 7 DAYS;
            END IF;
    END WHILE;
    SELECT col1, col2, SUM(col3)
    FROM test
    GROUP BY col1, col2;

有人告诉我,这在顺化是不可能的。这是正确的吗?这可以在BASH中完成吗?或者我需要创建一些Java代码吗?正如你所看到的,我也希望日期是动态的,然而,我相信Hadoop中的日期函数无法做到这一点。

任何帮助都将不胜感激,特别是BASH或Jave中的例子,它们可以做一些类似的事情和/或为进一步阅读提供建议。

Hue有时会在涉及大量数据的查询中失败。然而,与其进行选择查询,不如将查询一年的输出重定向到另一个表中,看看它是否有效。

或者,您可以使用配置单元命令行客户端运行uery。请在那里试一下,看看是否有效。

你可以这样从shell使用它:

hive-e"从foo WHERE local_date>中选择col1、col2、col3='2013-09-01'和local_date<'2014-09-01"

最新更新