我有一个S3位置s3://bucket-name/folder-name/
,该位置由一个子文件夹组成,该子文件夹的名称是动态生成的,其中包含短语_Top10InvoiceIds
。该子文件夹由.csv
和.csv.metadata
文件组成。我正在使用粘合爬网程序仅爬网csv文件并在Athena中查看它们。但是我无法排除.csv.metadata
文件。我已经尝试了所有可能的正则表达式模式作为glob值。
我的一些尝试是:
*_Top10InvoiceIds/ *.metadata
*_Top10InvoiceIds/ * .* metadata
*_Top10InvoiceIds/ *. *.metadata
*_Top10InvoiceIds/ * .csv.metadata
** .metadata
* .metadata
* .csv.metadata
* /*.metadata
如果有人可以帮助我弄清楚模式或建议另一种方式来做,那就太好了。
答案 0 :(得分:2)
听起来您正在尝试通过使用Glue Crawlers中的排除项来阻止.metadata文件作为Athena表中的数据显示。
Glue Crawlers用于为该表创建表定义和关联的元数据。就将数据填充到表而言,就是雅典娜:
爬虫
连接到数据存储(源或目标)的程序,通过 优先分类器列表,用于确定数据的架构, 然后在AWS Glue数据目录中创建元数据表。
https://docs.aws.amazon.com/glue/latest/dg/components-key-concepts.html
雅典娜(Athena)制成的表格会在您在包含模式中列出的存储桶路径下抓取所有数据:
重要
Athena读取存储在“ s3:// bucketname / prefix /”下的所有数据。如果你有 您不希望雅典娜读取的数据,请勿将该数据存储在同一数据中 Amazon S3前缀是您希望Athena读取的数据。如果您正在利用 分区,以确保Athena扫描分区中的数据,请使用WHERE过滤器 必须包括分区。有关更多信息,请参见表位置和 分区。
https://docs.aws.amazon.com/athena/latest/ug/tables-location-format.html
我认为,如果要从表中排除数据,它将需要自己的子文件夹
答案 1 :(得分:2)
这是一个简单的答案:
雅典娜不会兑现胶水排除模式。这些模式仅用于排除在爬网时不需要扫描的不必要文件,并用于Glue ETL。因此,如果要排除这些.metadata文件,则需要编写一个自动化脚本来删除它们。>
答案 2 :(得分:0)
尝试使用**/*.metadata
或Set<String> greppedKeys = expirationMap.keySet().stream() // keyset only
.filter(key -> expirationMap.get(key) > 3L) // X here being 3L
.collect(Collectors.toSet()); // all keys would be unique anyway
排除模式