面试问题蜂巢分区和存储

时间:2019-01-04 03:37:04

标签: hive

我是Hive的新手,最近我接受了一次采访,被问到以下问题。有人可以帮助您找到正确的答案。

  1. 进行分区时,如果一列中缺少数据怎么办,分区将如何处理呢?
  2. 可以使用sqoop导入日志文件吗?我给出了答案NO,因为sqoop用于将RDBMS表中的数据导入到hadoop。
  3. 在employee表中,如果任何数据的值为null,您是否仍可以对其进行压缩?
  4. 给雇员表的雇员ID,位置,薪水,部门,职位栏将用于分配和存储吗?我认为我们可以将部门用作部门划分,并且可以将员工ID,位置和薪水用作存储区,请确认。

2 个答案:

答案 0 :(得分:1)

为以下问题添加答案和相关解释:

1)您要从哪一列中查询数据丢失? 如果从分区列中丢失了数据,则不会生效。如果您觉得查询的输出不正确,可以对表进行msck修复。 请让我知道分区列中是否缺少数据。

2)这取决于日志文件的位置和位置。 如果日志文件在任何RDBMS服务器中都采用表格形式,则可以对其进行压缩。 如果日志文件在某些​​ftp服务器中,则可以执行ftp / sftp / ssh。 如果日志文件在另一个群集中,则可以使用distcp。

3)是的,您可以蹲下。 但是,如果直接运行sqoop import命令,则可能会遇到问题。 在进行sqoop导入时,您需要提供的参数很少,这些参数是 --null-non-string'\ n'&--null-string'\ n'->这些用于导入 --input-null-non-string'\ n'&--input-null-string'\ n'->这些用于导出 这些将指定sqoop命令和生成的null的java程序,并由执行导入/导出的java程序标识。

4)这些是员工ID,位置,工资,部门的可用列

employeeId -> For bucketing

Location -> For partitioning

Salary -> Better not add for bucketing or partitioning (for example if there are )

原因::: 如果有10名员工,并且10名员工中只有6名拥有不同的薪水。 如果应用分区,则将有6个不同的目录。 如果您对2个存储分区应用存储分区,则数据将根据值进行划分。 这仅用于数据样本。想象一下,如果有大量数据。您将有多个目录,并且没有文件。因此最好不要对此应用任何内容。

department -> for partitioning

答案 1 :(得分:0)

添加第四个问题的要点,避免在“工资”列上进行分区/存储的原因是因为我们可以像Empid一样为薪水创建存储桶,但这意义不大。因为扫描EmpId会带来更好的性能,而不是薪水,因为它具有测量值。