我想创建一个包含静态数据的表,例如HDFS中的国家/地区代码和名称。我将使用csv将数据加载到系统中。如果我删除表和数据并不重要,因为这是您可以在Internet上轻松找到的信息。
对于此类数据,是否有关于外部/内部表的性能考虑?我应该像所有人一样坚持使用外部表格post吗?
答案 0 :(得分:0)
正如Stephen ODonnell在评论中指出的那样,内部/外部更多的是关于数据的位置以及管理它的内容。
我想说还有其他重要的性能因素需要考虑,例如表格格式以及是否使用压缩。
以下是 HDP 的观点;对于 Cloudera ,一般概念是相同的,但细节可能会有所不同。)
例如,您可以将表定义为ORC格式,它提供了许多优化,例如谓词下推,允许在存储层之前优化行甚至被添加到SQL处理层。 More details就此而言。
另一种选择是您是否要指定压缩,例如 Snappy ,这是一种平衡速度和压缩比的压缩算法(有关详细信息,请参阅上面的ORC链接)。
一般来说,我将HDFS数据视为源,将 sqoop 视为 Hive ,将其视为托管(内部)表启用ORC格式和snappy压缩。我发现它提供了良好的性能,并且可以对这些数据进行任何 ETL ,而不考虑 HDFS 中的原始源数据,因为它被复制到 sqoop 期间的
这当然需要额外的空间,这可能是一个考虑因素,具体取决于您的环境和/或特定用例。