我对hadoop比较陌生,了解到可能有数百种方法和工具来解决任何给定的问题。我正在寻找一个人来引导我通过普遍接受的最佳实践方法来解决一个问题,我希望这是一个相对常见的情况我。
我有一些csv文件是从一个进程,我不控制生成。csv文件是相关的,但是每个csv文件中可能有一组不同的列。我提供了下面两个文件的一个虚构的例子,在现实生活中,将有成千上万的文件和潜在的数千列。
文件1
# COL1, COL3, COL4
a1, c1, d1
a2,,d2
a3,c3,d3
文件2
# COL1, COL2, COL4
a1, b1, d6
a5, b5,
a3,,
最后,我想在这些数据上公开某种可通过sql/jdbc访问的表格视图,其理论结构如下:
# COL1, COL2, COL3, COL4
a1,,c1,d1
a1,b1,,d6
a3,,c3,d3
a3,c3,,
a5,b5,,
关键点是:
我想一个简单的过程,能够更新可用的列作为新的发现在较新的文件。
如果用户希望在所有文件中的所有列的列表都是数千列的情况下同时只分析或处理10-20列,那么我不想因为性能而受到惩罚。
1条答案
按热度按时间mrfwxfqh1#
这可能只是一个部分的答案,但我至少可以解决您的数据结构。如果您希望在sql数据库中存储可变大小的数据(不管dbms是什么),您可能需要类似的结构。。。
补充说明:我主要将以下内容用作传入数据的“暂存阶段”。应该有一个最终的数据库/模式,其中包含存储最终产品或经过净化的最终数据形式的表。这些表只能用于将数据导入系统。在那里,我将拥有一些过程(自动化或其他),这些过程将这些临时数据复制或移动到最终的表中,同时对其进行清理、规范化和全面的清理和验证。这一思想并不是一个完整的解决方案,而是解决输入数据变结构问题的一种方法。
您需要一个用于指定列名的主“列查找”表。我们称之为,
column_names
:数据示例如下:
如果您愿意,我们可以添加更多的字段,以便在字段定义中提供更高的粒度(即数据类型、可为null的等),或者保持上面的状态以提供简单的通用结构。我们只是假设,并将所有传入的数据转换为string/varchar。这使得它现在更简单一点。
在此之后,您可能需要定义一些东西,我们称之为“导入会话”。
样本数据:
同样,如果您需要的话,这可以变得更具体,但是上面的内容应该可以作为示例。
接下来,我们需要你的进口结构。这将允许重用可能常见的结构。我们就叫它吧
import_struct
.样本数据:
此示例包含两个结构:122和37。
最后,我们需要一个数据存储表
一个简单的数据导入可能如下所示:
希望这个数据库的设计能让你朝着正确的方向努力。这只是构造数据的一种非常基本、非常通用的方法。如前几次所述,您可以在结构中获得更具体的内容,您还可以在其中添加更多的表,以使关系,从而使数据完整性,更健壮和更好的可扩展性。不过,这应该让你开始。