【发布时间】:2018-11-16 20:37:07
【问题描述】:
我正在使用 AWS 集群将许多带有嵌套数据的 JSON 文件处理到 Hive 扁平表中。
有些数据集非常大,所以我需要将其拆分成块,并为每个块制作单独的小 Hive 表,这导致这些较小的表具有不同的列。
例如,table1 具有列 A1....A1000,table2 具有列 A1,A3,A100,...A1000 和 A1001(因此有些列是常见的,有些列对于每个表都是唯一的)。
有没有办法将这些小表(可能是数百个表,每个表大约 1e7 行)附加、联合或连接到一个大 Hive 表中,该表包含小表中的所有列(以及缺失单元格中的 NULL)对于每个最初没有该特定列的小表)?
喜欢Total_table 与列A1...A1001?
UPD:printSchema() 命令会显示如下内容:
root
|-- aaa: struct (nullable = true)
| |-- ids: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- bb1: string (nullable = true)
| | | |-- bb2: string (nullable = true)
| | | |-- bb3: string (nullable = true)
当我将其展平以获得常规 Hive 表时,根据每个块中碰巧出现的 json 文件集,ids 数组中的元素数量(例如)可能不同,因此输出列将是也不同:比如 aaa_ids_bbb1_0(对于 ids 数组的第 0 个元素),...,aaa_ids_bbb1_999(对于第 999 个元素,如果恰好有 1000 个元素)。所以每个块中的表可以不同。
在 python pandas 模块中,如果我将 3 个数据帧与列 A、B、C(第 1 列)、A、C、D(第 2 列)和 D、E、F(第 3 列)连接起来,则生成的数据帧将包含列 A ,B,C,D,E,F。当然,如果可能的话,我需要在 Hive SQL 中做同样的事情。
【问题讨论】:
-
请提供一些 JSON 的简短示例并解释您为什么创建具有不同结构的表
-
我无法提供 json 文件示例,这些文件很大,但我更新了我的问题,解释了块如何具有不同的结构。
标签: sql amazon-web-services join hive union