外部表和内部表性能的区别?

628mspwn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(417)

我想用静态数据创建一个表,比如hdfs中的国家代码和名称。我将使用csv将数据加载到系统中。如果我把表格和数据放在一边,那也没关系,因为这是你在网上很容易找到的信息。
对于这类数据的外部/内部表是否有性能方面的考虑?我应该像这篇文章中所有的人说的那样使用外部表吗?

ddhy6vgd

ddhy6vgd1#

正如stephenodnell在评论中指出的那样,内部/外部实际上更多的是关于数据的位置和管理它的内容。
我想说还有其他重要的性能因素需要考虑,例如表格式和是否使用压缩。
以下是从hdp的Angular 来看的;对于cloudera来说,一般的概念是相同的,但是具体的细节可能会有所不同。)
例如,您可以将表定义为orc格式,这提供了许多优化,例如 predicate 下推,允许在将行添加到sql处理层之前在存储层对行进行优化。更多细节。
另一个选项是是否要指定压缩,例如snappy,一种平衡速度和压缩比的压缩算法(有关更多信息,请参阅上面的orc链接)。
一般来说,我将hdfs数据视为一个源,并将其放入配置单元中,放入一个启用了orc格式和snappy压缩的托管(内部)表中。我发现它提供了良好的性能,同时还有一个额外的好处,即任何etl都可以对这些数据执行,而不必考虑hdfs中的原始源数据,因为它是在sqoop期间复制到hive中的。
这当然需要额外的空间,这可能是一个考虑因素,取决于您的环境和/或特定的用例。

相关问题