【问题标题】:Hive Bucketing - How to run hive query for specific bucketHive Bucketing - 如何对特定存储桶运行 hive 查询
【发布时间】:2015-11-23 17:40:17
【问题描述】:

我有读取 5 个大表并将记录输出到下一个进程的配置单元查询。所有这些表都在 proc_dt 上进行分区,并在 user_id 上进行了分桶(5 个桶)。连接在 user_id 上完成并在 proc_dt 上进行过滤。

如何对所有表的特定存储桶运行此查询?例如。我只想对所有表的第一个存储桶运行查询。

这样做的原因是,一旦我完成了对第一个存储桶的查询,我就可以将输出数据发送到下一个进程。在下一个进程运行时,我可以完成对下一个存储桶的查询,依此类推。这样下一个进程就不会等待整个查询完成。

如果我还有一个用户 ID 为 Mod5 的列,那么我会进行分区。但是没有这样的列,我不能添加它。

谁能给我一些解决方案。任何建议都会很有帮助。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    我得到了答案。我们可以在连接查询中提到桶号。查看以下链接了解更多详情。

    https://www.qubole.com/blog/big-data/5-tips-for-efficient-hive-queries/

    【讨论】:

    • 在join查询中可以提及bucket号是不正确的。该链接显示了由 itinid 分桶的表。该查询没有提及存储桶编号。
    【解决方案2】:

    您可以在查询语句中指定分区,但不能指定存储桶。存储桶用于优化目的 - 例如更快的采样和 mapside 连接。但它们对 sql 语句不可见。

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables

    这里是文档示例:

    CLUSTERED BY(user_id) INTO 256 BUCKETS;
    

    这显然不允许按值/名称访问单个存储桶。

    【讨论】:

    • 您好,感谢您的建议。我无法在 user_id 列上创建分区,因为它是唯一的,并且我无法将任何列添加到源表。有什么办法可以达到这个要求吗?
    • @kishor 这是对您最初问题的回答 - 关于如何查询存储桶(这是不可能的)。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多