我有一个亚马逊胶水爬虫,它查看一个特定的s3位置,包含avro文件。我有一个进程,它在那个位置的一个新的子文件夹中输出文件。
一旦我手动运行爬虫,新的子文件夹将被视为数据库中的一个新表,它也将是可从雅典娜查询的。
有什么方法可以使进程自动化,并以编程方式调用爬虫,但只指定新的子文件夹,这样它就不必扫描整个父文件夹结构了吗?我希望将表添加到数据库中,而不是将分区添加到现有表中。
我正在寻找Python选项,我确实看到了这样一个选项:
import boto3
glue_client = boto3.client('glue', region_name='us-east-1')
glue_client.start_crawler(Name='avro-crawler')
我还没有看到一个选项来传递一个文件夹来限制爬虫正在查看的位置。因为那个位置有数百个文件夹/表,所以重新抓取所有东西需要很长的时间,这是我想要避免的。
我在这里有什么选择?我是否需要以编程方式创建一个新的爬虫,并将每个新的子文件夹添加到s3中?
或者创建一个lambda函数,当一个新的子文件夹被添加到s3时会触发它?我已经看到了here的答案,但是即使使用lambda,它仍然意味着我调用了start_crawler,它会爬行所有的东西?
谢谢你的建议。
发布于 2018-08-21 15:21:15
将crawler_name更新为crawler_name,将update_path更新到更新路径。
response = glue_client.update_crawler(Name=crawler_name,
Targets={'S3Targets': [{'Path':update_path}]})
https://stackoverflow.com/questions/51948607
复制相似问题