首页 > 解决方案 > 当列仅出现在某些 CSV 中时,爬虫无法正确排序数据

问题描述

我正在尝试建立一个数据湖。我们以以下格式将一堆 CSV 转储到 S3 中(对于提问过于简单):

bucket
|-- report_type1
    |-- file1.csv
    |-- file2.csv
|-- report_type2
    |-- file3.csv
    |-- file4.csv
    |-- file5.csv
|-- report_type3
 etc . . .

我想从这个湖中抓取数据并将部分数据推送到红移中,并使雅典娜湖可查询。为此,我通过 Glue 启动了一个爬虫。爬虫运行,创建了一堆表(report_type1,report_type2,report_type3,...)并完成。

但是,当我向 Athena 查询以检查它是否有效时,我发现在 Athena 中未正确分配某些列。例如,file1.csv 如下所示:

col0, col1, col2
0, 1, 3
2, 4, 9
2, 1, 7

但 file2.csv 看起来像这样:

col0, new_col, col1, col2
1, 3, 12, 8
3,  , 10, 2
7,  , 0, 

所以在处理第二个数据集时,我们发现了一个额外的列。这是一个应该记录的合法列......但由于它不在第一个文件的数据中,因此没有添加到那里。

我最终看到的是,我会这样查询:

SELECT col1 FROM report_type1

在 athena 中,我会看到 col2 已经转移,现在我看到 col2 的值以 col1 的名义。我的假设是这与进入的额外列有关。我尝试使用所有不同的“找到新列时该怎么做”来运行爬虫

* Update the table definition in the data catalog.
* Add new columns only.
* Ignore the change and don't update the table in the data catalog

没有人努力解决这个问题。我可以使用不会以这种方式破坏的设置吗?

标签: amazon-web-servicesaws-glue

解决方案


文件的结构是不可变的。Athena 只是 S3 文件的查询服务。当列附加在末尾而不是任何地方时,“仅添加新列”起作用。

在此处输入图像描述


推荐阅读