我有hive查询,它读取5个大表并将记录输出到下一个进程。所有这些表都在proc_dt上进行了分区,并在user_id(5个桶)上进行了分区。联接在user_id上完成,并在proc_dt上进行过滤。
如何针对所有表的特定存储桶运行此查询?对于前者我想为所有表的第一个桶运行查询。
这样做的原因是,一旦我完成第一个存储桶的查询,我就可以将输出数据发送到下一个进程。当下一个进程正在运行时,我可以完成查询下一个存储桶等等。这样下一个进程就不会等待整个查询完成。
如果我还有一个具有用户ID Mod5的列,那么我就可以进行分区了。但是没有这样的专栏,我无法添加它。
有谁能请给我一些解决方案。任何建议都会非常有用。
答案 0 :(得分:1)
我得到了答案。我们可以在连接查询中提到桶号。请查看以下链接以获取更多详细信息。
https://www.qubole.com/blog/big-data/5-tips-for-efficient-hive-queries/
答案 1 :(得分:0)
您可以在查询语句中指定分区,但不能指定存储区。桶用于优化目的 - 例如更快的采样和mapside连接。但它们对sql语句不可见。
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables
所以这是文档示例:
CLUSTERED BY(user_id) INTO 256 BUCKETS;
这显然不允许按值/名称访问各个存储桶。