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