当前位置: 首页 > 知识库问答 >
问题:

配置单元中的多表联接

能正青
2023-03-14

我已经将Teradata表的数据迁移到配置单元中。

如果我使用joins,我需要连接五个表,在hive中可以吗?或者我应该将查询分成五个部分?对于这个问题应该采取什么明智的方法?

请建议

共有1个答案

柳深
2023-03-14

hive中的五种方式连接当然是可能的,而且(自然)可能会很慢到很慢。

您应该考虑在

  • 相同的分区列
  • 相同数量的分区
SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val, d.val, e.val 
FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) join d on (d.key = c.key) join e on (e.key = d.key)

另一个提示是mapjoin,它有助于在内存中缓存小表。

假设a很大,而b、c、d、e小到足以容纳每个映射器的内存:

 SELECT /*+ MAPJOIN(b,c,d,e) */  a.val, b.val, c.val, d.val, e.val 
 FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) 
 join d on (d.key = c.key) join e on (e.key = d.key)
 类似资料:
  • 我正在运行几个脚本,但我总是得到同样的错误。它们都是相同条件的多表连接。 数据以拼花形式存储。 我们有许多带有相同条件的多表联接语句的SQL查询,但只有少数SQL脚本遇到这些错误。

  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 为什么我会得到这个错误,我该如何解决它?下面给出了完整的堆栈跟踪。 原因:org.apache.hadoop.hive.ql.metadata.hiveException:org.apache.hadoop.ipc.RemoteException(java.io.ioException):文件/tmp/hive-root/hive_2015-03-09_10-03-59_970_364645675

  • 我有一个配置单元表保存在ORC文件中,这是“create”命令中的定义: 我想从末尾删除一个列,所以我尝试了“alter table-replace columns”命令,在这里我没有写列名--但是得到了这个错误: