AWS Glue ETL作业如何检索数据?

时间:2018-08-23 04:53:27

标签: amazon-web-services amazon-s3 aws-glue

我是使用AWS Glue的新手,我不了解ETL作业如何收集数据。我使用搜寻器从S3存储桶中的某些文件生成了我的表架构,并检查了ETL作业中的自动生成的脚本,该脚本在这里(略有修改):

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "mydatabase", table_name = "mytablename", transformation_ctx = "datasource0")
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("data", "string", "data", "string")], transformation_ctx = "applymapping1")
datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://myoutputbucket"}, format = "json", transformation_ctx = "datasink2")

当我运行此作业时,它将成功地从我的搜寻器用来生成表架构的存储桶中获取数据,并将其按预期放入我的目标s3存储桶中。

我的问题是:可以这么说,我在脚本中没有看到数据被“加载”的任何地方。我知道我将其指向由搜寻器生成的表,但来自this doc

  

AWS Glue中的表和数据库是AWS Glue数据目录中的对象。它们包含元数据;它们不包含数据存储中的数据。

如果表仅包含元数据,那么ETL作业如何从数据存储(在我的情况下为S3存储桶)中检索文件?我之所以这样问,主要是因为我想以某种方式修改ETL作业以在另一个存储桶中转换结构相同的文件,而不必编写新的搜寻器,而且还因为我想加强对Glue服务的一般理解。

2 个答案:

答案 0 :(得分:2)

主要要了解的是: Glue数据源目录(数据库和表)始终与Athena同步,Athena是无服务器查询服务,可使用标准SQL轻松分析Amazon S3中的数据。您可以从Glue Console / Athena Query控制台创建表/数据库。

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "mydatabase", table_name = "mytablename", transformation_ctx = "datasource0")

上面的Glue Spark代码行在使用Glue数据目录源表创建初始数据帧方面为您神奇,除了元数据,架构和表属性外,它的Location也指向您的数据存储(s3位置),您的数据所在的位置。

enter image description here

完成applymapping之后,这部分代码(数据库)正在将数据实际加载到目标集群/数据库中。

datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://myoutputbucket"}, format = "json", transformation_ctx = "datasink2")

答案 1 :(得分:0)

如果您深入了解AWS Glue数据目录。它具有驻留在数据库下的表。通过单击这些表,您将获得元数据,该元数据显示由于搜寻器运行而指向当前表的s3文件夹。

您仍然可以通过数据目录选项添加表来手动在s3结构化文件上创建表:

enter image description here

并将其指向您的s3位置。

另一种方法是使用AWS-athena控制台创建指向s3位置的表。您将使用常规的创建表脚本,其中location字段保存您的s3位置。