hadoop查询、日期、循环、bash或java

9bfwbjaz  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(368)

我对hadoop、linux非常陌生,已经15年没有用java编写代码了,所以我通常只使用hue来运行查询。我的问题是,我正在尝试对12个月的数据运行一个基本的select查询,但是,由于数据集的巨大大小和应用的读取阈值,这个查询总是会失败。因此,我需要每周/每月运行相同的查询,将结果插入到预先存在的表中,然后将它们聚合到我的最后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中的示例,这些示例将提供类似和/或进一步阅读的建议。

zbq4xfa0

zbq4xfa01#

hue有时会在涉及大量数据的查询中失败。但是,不要执行select查询,而是将一整年的查询输出重定向到另一个表中,然后查看它的工作情况。
或者,可以使用配置单元命令行客户端运行查询。请在那里试一次,看看是否有效。
您可以这样从shell使用它:
hive-e“从foo中选择col1、col2、col3,其中本地日期>='2013-09-01'和本地日期<'2014-09-01'”

相关问题