Amazon S3 でホストされているCData JDBC ドライバーを使用してAWS Glue ジョブからXML にデータ連携。
AWS Glue はAmazon のETL サービスであり、これを使用すると、簡単にデータプレパレーションを行い、ストレージおよび分析用に読み込むことができます。AWS Glue と一緒にPySpark モジュールを使用すると、JDBC 接続を経由でデータを処理するジョブを作成し、そのデータをAWS データストアに直接読み込むことができます。ここでは、CData JDBC Driver for XML をAmazon S3 バケットにアップロードし、XML からデータを抽出してCSV ファイルとしてS3 に保存するためのAWS Glue ジョブを作成して実行する方法について説明します。
※製品について詳しい情報をご希望の方は以下からお進みください。
- XML にほかのBI、ETL、開発ツールから接続したい:XML データ連携ガイドおよびチュートリアルのリストへ
- XML Drivers について詳細を知りたい:ドライバー詳細情報ページへ
- ほかのデータソースに連携したい:CData Drivers 一覧へ
- ドライバーの30日の無償トライアル版を使いたい:トライアル版ダウンロードページへ
- 製品の利用やライセンスについて相談したい:sales@cdata.co.jp までメールにてご相談ください。
CData JDBC driver for XML をAmazon S3 バケットにアップロード
CData JDBC Driver for XML をAWS Glue から使用するには、ドライバーの.jar ファイル(および必要なライセンスファイル)をAmazon S3 のバケットに配置する必要があります。
- Amazon S3 コンソールを開きます。
- バケットを選択、もしくは作成します。
- [アップロード]をクリックします。
- JDBC Driver の.jar ファイル(cdata.jdbc.xml.jar) をインストールディレクトリのlib フォルダから選択してアップロードします。
Amazon Glue Job を設定
- [分析]->[AWS Glue]をクリックします。
- AWS Glue コンソールで、[ETL]->[ジョブ]をクリックします。
- [ジョブの追加]をクリックして新しいGlue ジョブを作成します。
- ジョブのプロパティを設定します:
- 名前: XMLGlueJob など任意のジョブ名
- IAM ロール: AWSGlueServiceRole もしくは AmazonS3FullAccessSelect の権限があるIAM ロールを設定(JDBC Driver がAmazon S3 バケットにあるため)。
- Type: [Spark]を選択。
- Glue version: ドロップダウンからバージョンを選択。
- このジョブ実行: [ユーザーが作成する新しいスクリプト]を選択。
スクリプトプロパティの設定: - スクリプトファイル名: GlueXMLJDBC などのスクリプトファイル名。
- スクリプトが保存されているS3 パス: S3 バケットを入力もしくは選択。
- 一時ディレクトリ: S3 バケットを入力もしくは選択
- ETL 言語: [Python]を選択
- セキュリティ設定、スクリプトライブラリおよびジョブパラメータを展開。依存JARS パスは、JDBC の.jar ファイルをアップロードしたS3 バケットに設定。.jar ファイル名 s3://mybucket/cdata.jdbc.xml.jar も含めます。
- [次へ]をクリックすると、ほかのAWS エンドポイントへの接続オプション追加ができます。Redshift、MySQL などに接続する際にはここで接続を作成できます。
- [ジョブの保存とスクリプトの編集]をクリックします。
- 開いたエディタで、Python スクリプトを記述します。サンプルは以下です。
サンプルGlue スクリプト
CData JDBC driver でXML に接続するには、JDBC URL を作成します。さらにライセンスとしてJDBC URL にRTK プロパティを設定する必要があります。RTK は通常のライセンスと異なりますので、CData まで直接ご連絡をください。
See the Getting Started chapter in the data provider documentation to authenticate to your data source: The data provider models XML APIs as bidirectional database tables and XML files as read-only views (local files, files stored on popular cloud services, and FTP servers). The major authentication schemes are supported, including HTTP Basic, Digest, NTLM, OAuth, and FTP. See the Getting Started chapter in the data provider documentation for authentication guides.
After setting the URI and providing any authentication values, set DataModel to more closely match the data representation to the structure of your data.
The DataModel property is the controlling property over how your data is represented into tables and toggles the following basic configurations.
- Document (default): Model a top-level, document view of your XML data. The data provider returns nested elements as aggregates of data.
- FlattenedDocuments: Implicitly join nested documents and their parents into a single table.
- Relational: Return individual, related tables from hierarchical data. The tables contain a primary key and a foreign key that links to the parent document.
See the Modeling XML Data chapter for more information on configuring the relational representation. You will also find the sample data used in the following examples. The data includes entries for people, the cars they own, and various maintenance services performed on those cars.
ビルトイン接続文字列デザイナー
JDBC URL の作成をサポートするビルトインの接続文字列デザイナーがあります。ドライバーの.jar ファイルをダブルクリックするか、コマンドラインで.jar ファイルを実行するとデザイナーが開きます。
java -jar cdata.jdbc.xml.jar
必要項目を入力すると、デザインs-下部に接続文字列が生成されますのでクリップボードにコピーして使います。

CData JDBC driver をPySpark で使用して、AWS Glue モジュールでXML データを取得して、S3 にCSV 形式で保存するシンプルなスクリプト例は以下です。.
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from 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 XML data from the people table into a DataFrame
##Note the populated JDBC URL and driver class name
source_df = sparkSession.read.format("jdbc").option("url","jdbc:xml:RTK=5246...;URI=C:\people.xml;DataModel=Relational;").option("dbtable","people").option("driver","cdata.jdbc.xml.XMLDriver").load()
glueJob = Job(glueContext)
glueJob.init(args['JOB_NAME'], args)
##Convert DataFrames to AWS Glue's DynamicFrames Object
dynamic_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()
Glueジョブを実行する
スクリプト記述後、Glue ジョブを実行します。実行した取得/ロードのジョブが完了するとAWS Glue コンソールのジョブページでステータスが確認できます。成功するとS3 バケットにXML データのCSV ファイルが生成されています。
このようにCData JDBC Driver for XML をAWS Glue で使用することで、XML データをAWS Glue で自在に扱うことができます。Glue の外部データへの接続性を拡張するJDBC Driver を是非お試しください。