AWS Glue 是 Amazon 的一项 ETL 服务,可让您轻松准备和加载数据以进行存储和分析。 使用 PySpark 模块和 AWS Glue,您可以创建通过 JDBC 连接处理数据的作业,将数据直接加载到 AWS 数据存储中。 在本文中,我们将介绍将 BigQuery 的 CData JDBC 驱动程序上传到 Amazon S3 存储桶,并创建和运行 AWS Glue 作业以提取 BigQuery 数据并将其作为 CSV 文件存储在 S3 中。

Upload the CData JDBC Driver for BigQuery to an Amazon S3 Bucket

为了在 AWS Glue 中使用适用于 BigQuery 的 CData JDBC 驱动程序,您需要将其(以及任何相关的许可证文件)存储在 Amazon S3 存储桶中。

  1. 打开 Amazon S3 控制台。
  2. 选择一个现有存储桶(或创建一个新存储桶)。
  3. 点击上传
  4. 选择驱动程序安装位置的 lib 目录中的 JAR 文件 (cdata.jdbc.googlebigquery.jar)。

Configure the Amazon Glue Job

  1. 从 AWS Glue 控制台导航到 ETL -> 作业。
  2. 单击添加作业以创建新的Glue作业。

3.填写作业属性:

  • 名称: 填写作业的名称,例如:GoogleBigQueryGlueJob。

  • IAM 角色: 选择(或创建)具有 AWSGlueServiceRole 和 AmazonS3FullAccess 权限策略的 IAM 角色。后一种策略是访问 JDBC 驱动程序和 Amazon S3 中的输出目标所必需的。

  • 类型: 选择“Spark”。

  • 胶水版本: 选择“Spark 2.4, Python 3 (Glue Version 1.0)”。

  • 此作业运行: 选择“A new script to be authored by you”。
    填充脚本属性:

    • 脚本文件名: 脚本文件的名称,例如:GlueGoogleBigQueryJDBC
    • 存储脚本的 S3 路径: 填写或浏览到 S3 存储桶。
    • 临时目录: 填写或浏览到 S3 存储桶。
  • 展开 安全配置、脚本库和作业参数(可选) 。对于 Dependent jars path ,填写或浏览到您上传 JAR 文件的 S3 存储桶。请务必在路径中包含 JAR 文件本身的名称,即: s3://mybucket/cdata.jdbc.googlebigquery.jar

  1. 单击下一步。在这里,您可以选择添加与其他 AWS 端点的连接。因此,如果您的目标是 Redshift、MySQL 等,您可以创建和使用与这些数据源的连接。

  2. 单击“保存作业并编辑脚本”以创建作业。

  3. 在打开的编辑器中,为该作业编写一个 python 脚本。您可以使用示例脚本(见下文)作为示例。

Sample Glue Script

要使用 CData JDBC 驱动程序连接到 BigQuery,您需要创建一个 JDBC URL,填充必要的连接属性。 此外,您需要在 JDBC URL 中设置 RTK 属性(除非您使用的是 Beta 驱动程序)。 您可以查看安装中包含的许可文件以获取有关如何设置此属性的信息。

Google 使用 OAuth 身份验证标准。 要代表个人用户访问 Google API,您可以使用嵌入式凭据,也可以注册自己的 OAuth 应用程序。

OAuth 还允许您使用服务帐户代表 Google Apps 域中的用户进行连接。 要使用服务帐户进行身份验证,您需要注册应用程序以获取 OAuth JWT 值。

除了 OAuth 值之外,您还需要指定 DatasetId 和 ProjectId。 有关使用 OAuth 的指南,请参阅帮助文档的“入门”一章。

Built-in Connection String Designer

如需帮助构建 JDBC URL,请使用 BigQuery JDBC 驱动程序中内置的连接字符串设计器。 双击 JAR 文件或从命令行执行 JAR 文件。

view sourcejava -jar cdata.jdbc.googlebigquery.jar

Fill in the connection properties and copy the connection string to the clipboard.

要在 Amazon S3 中托管 JDBC 驱动程序,您需要一个许可证(完整版或试用版)和一个运行时密钥 (RTK)。 有关获取此许可证(或试用)的更多信息,联系我们的销售团队

下面是一个示例脚本,它使用带有 PySpark 和 AWSGlue 模块的 CData JDBC 驱动程序来提取 BigQuery 数据并将其写入 CSV 格式的 S3 存储桶。 对脚本进行任何必要的更改以满足您的需要并保存作业。

view sourceimport sysfrom awsglue.transforms import *from awsglue.utils import getResolvedOptionsfrom pyspark.context import SparkContextfrom awsglue.context import GlueContextfrom awsglue.dynamicframe import DynamicFramefrom awsglue.job import Job args = getResolvedOptions(sys.argv, ['JOB_NAME']) sparkContext = SparkContext()glueContext = GlueContext(sparkContext)sparkSession = glueContext.spark_session ##Use the CData JDBC driver to read BigQuery data from the Orders table into a DataFrame##Note the populated JDBC URL and driver class namesource_df = sparkSession.read.format("jdbc").option("url","jdbc:googlebigquery:RTK=5246...;DataSetId=MyDataSetId;ProjectId=MyProjectId;").option("dbtable","Orders").option("driver","cdata.jdbc.googlebigquery.GoogleBigQueryDriver").load() glueJob = Job(glueContext)glueJob.init(args['JOB_NAME'], args) ##Convert DataFrames to AWS Glue's DynamicFrames Objectdynamic_dframe = DynamicFrame.fromDF(source_df, glueContext, "dynamic_df") ##Write the DynamicFrame as a file in CSV format to a folder in an S3 bucket.##It is possible to write to any Amazon data store (SQL Server, Redshift, etc) by using any previously defined connections.retDatasink4 = glueContext.write_dynamic_frame.from_options(frame = dynamic_dframe, connection_type = "s3", connection_options = {"path": "s3://mybucket/outfiles"}, format = "csv", transformation_ctx = "datasink4") glueJob.commit()

Run the Glue Job

编写好脚本后,我们就可以运行 Glue 作业了。 单击运行作业并等待提取/加载完成。 您可以从 AWS Glue 控制台的作业页面查看作业的状态。 作业成功后,您的 S3 存储桶中将有一个 CSV 文件,其中包含 BigQuery Orders 表中的数据。

使用 AWS Glue 中用于 BigQuery 的 CData JDBC 驱动程序,您可以轻松地为 BigQuery 数据创建 ETL 作业,无论是将数据写入 S3 存储桶还是将其加载到任何其他 AWS 数据存储中。

任何程序错误,以及技术疑问或需要解答的

Docker和JupyterAWS Glue ETL 该项目是创建脚本的助手,该脚本可在 , 笔记本以及带有spark-submit的容器运行。 Glue支持针对开发人员端点运行,但是对于快速开发人员而言,有时您只想针对一部分数据在本地运行,而不必为保持开发人员端点运行而付费。 Glue具有将数据加载和保存到s3的特定方法,当在jupyter笔记本运行时将无法使用。 胶粘剂提供了在两种情况下都可以使用的更高级别的api。 from aws_glue_etl_docker import glueshim shim = glueshim . GlueShim () params = shim . arguments ({ 'data_bucket' : "examples" }) pprint ( params ) files = shim . get_all_files_ AWS Glue 是一项无服务器数据集成服务,可让使用分析功能的用户轻松发现、准备、移动和集成来自多个来源的数据。您可以将其用于分析、机器学习和应用程序开发。它还包括用于编写、运行任务和实施业务工作流程的额外生产力和数据操作工具。AWS Glue 将主要数据集成功能整合到一项服务。其包括数据发现、现代 ETL、清理、转换和集式编目。这也是一项无服务器服务,即无需管理基础设施。 bigqueryby Aftab Ansari 通过Aftab Ansari 如何将Google BigQuery表导入AWS Athena (How to import Google BigQuery tables to AWS Athena) As a data engineer, it is quite likely that you are using one of the leadi... 一个完整的birt的报表设计过程包括两部分:一是设计报表;二是运行和生成报表; 一、报表设计生成 报表设计生成就是生产一个报表的模板,及.rptdesign格式的文件(实际是一个xml文件的生成),这个过程包括了以下几个步骤: 1)生成数据源(datasource);2)生成数据集(dataset);3)生成报表设计 这个过程有很多的例子,比如birt官方的例子如下: import ja... 点击关注公众号,利用碎片时间学习缘起最近在公司基于bigQuery开发埋点数据分析功能,所以总结一下自己封装的bigQuery查询工具类(网上关于bigQuery的文章比较少)关于bigQ... ]]>   xml的特殊字符必须转义,通过CDATA可以保证数据原样输出。xml文档的所有文本都会被解析器解析,只有CDATA区段的文本会被解析器忽略。 <?xml version="1.0" encoding="UTF-8"?&am